STM32F0 ADC程序设计
1。 ADC初始化
void ADC_CH_DMA_Config(void)
{ADC_InitTypeDef ADC_InitStructure;DMA_InitTypeDef DMA_InitStructure;GPIO_InitTypeDef GPIO_InitStruct; /* ADC1 DeInit */ ADC_DeInit(ADC1); /* Enable GPIOA clock */RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //PA0,PA1/* ADC1 Periph clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); /* DMA1 clock enable */RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE); /* Configure PA0,PA1 as analog input */GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //PA0,PA1GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN;GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL ;GPIO_Init(GPIOA, &GPIO_InitStruct); // PA0&PA1,ÊäÈëʱ²»ÓÃÉèÖÃËÙÂÊ/* DMA1 Channel1 Config */DMA_DeInit(DMA1_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_Address;DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RegularConvData_Tab;DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;DMA_InitStructure.DMA_BufferSize = 2;DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;DMA_InitStructure.DMA_Priority = DMA_Priority_High;DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;DMA_Init(DMA1_Channel1, &DMA_InitStructure); /* DMA1 Channel1 enable */DMA_Cmd(DMA1_Channel1, ENABLE); /* ADC DMA request in circular mode */ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular); /* Enable ADC_DMA */ADC_DMACmd(ADC1, ENABLE); /* Initialize ADC structure */ADC_StructInit(&ADC_InitStructure); /* Configure the ADC1 in continous mode withe a resolutuion equal to 12 bits */ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Backward;ADC_Init(ADC1, &ADC_InitStructure); /* Convert the ADC1 temperature sensor with 55.5 Cycles as sampling time */ /* Convert the ADC1 ADC_Channel_0 with 55.5 Cycles as sampling time */ ADC_ChannelConfig(ADC1, ADC_Channel_0 , ADC_SampleTime_55_5Cycles); /* Convert the ADC1 Vref with 55.5 Cycles as sampling time */ /* Convert the ADC1 ADC_Channel_1 with 55.5 Cycles as sampling time */ ADC_ChannelConfig(ADC1, ADC_Channel_1 , ADC_SampleTime_55_5Cycles); /* ADC Calibration */ADC_GetCalibrationFactor(ADC1); /* Enable ADC1 */ADC_Cmd(ADC1, ENABLE); /* Wait the ADRDY falg */while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY)); /* ADC1 regular Software Start Conv */ ADC_StartOfConversion(ADC1);
}
2。读adc 值
void ReadAdcValue(void)
{
/* Test DMA1 TC flag /
while((DMA_GetFlagStatus(DMA1_FLAG_TC1)) == RESET );
/ Clear DMA TC flag /
DMA_ClearFlag(DMA1_FLAG_TC1);
/ Convert temperature sensor voltage value in mv /
// TempSensVoltmv = (uint32_t)((RegularConvData_Tab[0] 3300) / 0xFFF);
AdcChn0Voltmv = (uint32_t)((RegularConvData_Tab[0]* 3300) / 0xFFF);
/* Convert Vref voltage value in mv /
// VrefIntVoltmv = (uint32_t)((RegularConvData_Tab[1] 3300) / 0xFFF);
AdcChn1Voltmv = (uint32_t)((RegularConvData_Tab[1]* 3300) / 0xFFF);
// printf(“AdcChn0Voltmv = %x “,AdcChn0Voltmv);
// printf(”\r\n”);
UART1_SendByte(0x01);
UART1_SendByte(AdcChn0Voltmv&0x00ff); //low
UART1_SendByte((AdcChn0Voltmv>>8)&0x00ff); //hi
UART1_SendByte(0x0D);
UART1_SendByte(0x0A);
// printf(“AdcChn1Voltmv = %x”,AdcChn1Voltmv);
// printf("\r\n");
UART1_SendByte(0x02);
UART1_SendByte(AdcChn1Voltmv&0x00ff); //low
UART1_SendByte((AdcChn1Voltmv>>8)&0x00ff); //hi
UART1_SendByte(0x0D);
UART1_SendByte(0x0A);
}
STM32F0 ADC程序设计相关推荐
- STM32F0 ADC学习
开始时候使用的是stdlib的库,最近发现cube库用的越来越广泛了,遂开始使用cube库来完成ADC的多通道采集实验. ADC 的driver 在STM32F0XX_HAL_DRIVER当中,有st ...
- 基于计算机控制的电压跟随器的设计,基于单片机的汽车转弯信号灯控制系统设计...
<基于单片机的汽车转弯信号灯控制系统设计.doc>由会员分享,可免费在线阅读全文,更多与<基于单片机的汽车转弯信号灯控制系统设计>相关文档资源请在帮帮文库(www.woc88. ...
- 嵌入式设计与开发项目-ADC键盘扫描程序设计
嵌入式设计与开发项目-ADC键盘扫描程序设计 一.实现的功能 二.根据功能实现代码 1.主文件main.c 2.ADC按键程序的头文件"adc.h" 3.ADC按键程序的源文件&q ...
- STM32F0 定时器触发ADC,多通道采样、DMA传输数据的配置
本块代码实现了定时器定时触发ADC,多通道采样,并通过DMA进行数据传输到内存的操作. #include "adc.h" [cpp] view plaincopy #defi ...
- linux 嵌入式汇编 adc,嵌入式Linux ARM汇编(四)——ARM汇编程序设计
嵌入式Linux ARM汇编(四)--ARM汇编程序设计 汇编程序有顺序.循环.分支.子程序四种结构形式. 一.顺序结构 程序实例: AREA Buf,DATA,READWRITE;定义数据段Buf ...
- Σ-Δ型ADC转换原理及程序设计--AD7712
要理解Σ-Δ型 ADC的工作原理,首先应对以下概念有所了解:①过采样.②噪声成形.③数字滤波和抽取. ①过采样 单音(基频)信号的功率与所有频率的噪声的RMS功率之和的比值就是信号噪声比(SNR).对 ...
- STM32F0 休眠模式下 ADC采样失效
笔者最近在作某汽车上的智能方向盘按键项目,系统要求待机电流小于100uA,同时能检测系统输入电压状态,做到能自检欠压和过压,并通过LIN发送给中控. 故笔者在对输入电压加了一个分压电路来检测,现在客户 ...
- AD7760转换原理及采集程序设计 (24位Σ-Δ型ADC)
1 AD7760(Σ-Δ模数转换器) 1.1 Σ-Δ型ADC的工作原理 的ADC不同,Σ-Δ型ADC不是直接根据采样数据的每一个样值的大小进行量化编码,而是根据前一量值与后一量值的差值即所谓的增量的大 ...
- linux下ad数模转换驱动程序设计,iTOP-4412开发板实现3路ADC数模转换驱动例程
学习下 linux 数模程序驱动的编写,本节我们实现的功能是实现三路 ADC 数模转换. 驱动程序 驱动程序的名字:"itop4412_adc.c". 要想把这个驱动注册到内核,先 ...
最新文章
- USEARCH11新功能——OTU表抽平otutab_rare
- 搭建yum仓库定制rpm包
- ElementUI中el-table设置指定列固定不动,不受滚动条影响
- Android 双击和手势的图片缩放
- 解决cell循环利用造成的重复勾选
- 增加表单的文字段的html的代码是,表单及表单新增元素(示例代码)
- 证明3-SAT问题是NP-complete
- paip.输出内容替换在Apache 过滤器filter的设置
- 【源码】基于MPPT算法的混合风能太阳能系统建模与仿真
- GitHub 加速神器, 来了!
- 2014 Unity 璀璨星空夜
- numpy:数组累乘
- Kafka集群的安装和使用
- 利用APPium获取自动浏览获取喵币
- 玲珑学院OJ 1130 - 喵哈哈村的魔法大师╳灬兲笙疯癫°月【强连通+可相交最小路径覆盖+背包】
- 案例|山东省中医院基于ZABBIX构建网络设备监控预警平台
- 【Bootstrap4】Bootstrap4 安装使用
- 小米手机用什么耳机音质好?发烧级音质蓝牙耳机推荐
- 怎么在电脑上登陆多个微信
- 微信小程序用定时器实现倒计时效果
热门文章
- 进入一个新公司,首先该怎么做?
- 新媒体人打开 ChatGPT 的正确姿势
- 响应式网页设计(3)
- vulnhub:DC1靶机
- Java开源生鲜电商平台-订单抽成模块的设计与架构(源码可下载)
- 【绘图必备】国际色卡
- 《人人都是产品经理》读书笔记 Part 1
- 凡人修仙传java安卓_凡人修仙传之七派六宗BT版
- iOS网络请求错误nw_proxy_resolver_create_parsed_array PAC evaluation error: NSURLErrorDomain: -1004
- 使用中国移动NB-IoT模组M5310-A快速连接到OneNET(LwM2M协议)