当前位置:首页 > 单片机 > 单片机
[导读]神通广大的各位互联网的网友们、大家早上中午晚上好好好、今早起来很准时的收到了两条10086的扣月租的信息、心痛不已、怀着这心情、又开始了STM32的研究、早上做了计算机控制的PID实验,又让我想起了飞思卡尔的电磁小

神通广大的各位互联网的网友们、大家早上中午晚上好好好、今早起来很准时的收到了两条10086的扣月租的信息、心痛不已、怀着这心情、又开始了STM32的研究、早上做了计算机控制的PID实验,又让我想起了飞思卡尔的电磁小车、、曾经的电感电压采集让我心碎的多少次、又让我开心了多少次、但已经成为过去、(软件和硬件都会影响),呵呵、估计有人已经猜到我接下来要介绍什么了、在你们面前、我已无秘密、额、其实标题也直接“表白”了、看到标题,别吓到哈、并不是要用英文写、至于原因是什么、请往下看:

好吧、言归正传:STM32的ADC模块,请允许我用如此通俗的语言:普通话来介绍STM32ADC模块的特色


1、1MHz转换速率、12位转换结果(12位、记住这个12位哈、因为2^12=4096 ,也请记住4096哈)

STM32F103系列:在56MHz时转换时间为:1μs

在72MHz时转换时间为:1.17μs

2、转换范围:0~3.6V (3.6v---->当你需要将采集的数据用电压来显示的话:设你采集的数据为:x[0~4095],此时的计算公式就为:(x / 4096) * 3.6))

3、ADC供电要求:2.4V~3.6 V(可千万别接到 5V 的石榴裙子底下呀)

4、ADC输入范围:VREF-≤ VIN ≤VREF+ (VREF+和VREF-只有LQFP100封装才有)

5、双重模式(带2个ADC的设备): 8种转换模式

6、最多有18个通道:16个外部通道

2个内部通道:连接到温度传感器和内部参考电压(VREFINT = 1.2V)

......(略,请看参考手册哈,由于篇幅,就不过多的列出来了、、说到略、让我想起了月光宝盒诸葛亮的:略懂略懂、、其实我也是略懂略懂而已、、)

12、DMA功能(仅ADC1有)

本博客里,由于篇幅、所以就以独立模式下的单次转换为例哈、打开参考手册可以看到这段话:

单次转换模式下,ADC只执行一次转换。

该模式既可通过设置ADC_CR2寄存器的ADON位(只适用于规则通道)启动也可通过外部触发启动(适用于规则通道或注入通道),这时CONT位为0。

一旦选择通道的转换完成:

● 如果一个规则通道被转换: ─ 转换数据被储存在16位ADC_DR寄存器中 ─EOC(转换结束)标志被设置 ─ 如果设置了EOCIE,则产生中断。

● 如果一个注入通道被转换: ─ 转换数据被储存在16位的ADC_DRJ1寄存器中 ─JEOC(注入转换结束)标志被设置 ─ 如果设置了JEOCIE位,则产生中断。

然后ADC停止。

此图形象的表明了其背后那不为人知的秘密转换关系。。虽然单凭看文字就能想象出来、但是、有图片是不是更加形象呢???

对于以上的寄存器、在此我稍微提提:免得寄存器大神们产生怨气:好不容易等到你讲我老大ADC,却不把我这些背后的勤劳者给导出来

好了,那就恕小弟容禀:

1、ADC状态寄存器(ADC_SR)

2、ADC控制寄存器1(ADC_CR1)

3、ADC控制寄存器2(ADC_CR2)

EXTSEL[2:0]:选择启动规则通道组转换的外部事件 (External event select for regular group)

ALIGN:数据对齐 (Data alignment)

RSTCAL:复位校准 (Reset calibration)

CAL:A/D校准 (A/D Calibration)

CONT:连续转换 (Continuous conversion)

ADON:开/关A/D转换器 (A/D converter ON / OFF)

4、ADC采样时间寄存器1(ADC_SMPR1)

SMPx[2:0]:选择通道x的采样时间 (Channel x Sample time selection)

5、ADC规则序列寄存器1(ADC_SQR1)

L[3:0]:规则通道序列长度 (Regular channel sequence length)

SQ1[4:0]:规则序列中的第1个转换 (1st conversion in regular sequence)(ADC规则序列寄存器3(ADC_SQR3))

6、ADC规则数据寄存器(ADC_DR)

DATA[15:0]:规则转换的数据 (Regular data)

(由于寄存器过于多,我们就不在这一一列举了哈、、因为我主要是用库,所以寄存器相关的位都不具体介绍了哈、请大家参照中文手册)

在这里,向大家介绍下:数据对齐:

ALIGN位用于设置对齐方式:右或左;

对于注入通道,转换结果是减去偏移量的值,可以为一个负数,在右对齐时扩展位位符号位。

那我们现在要怎么来实现呢??这个问题、相信大家在看了那么多的寄存器之后急迫想要知道的吧、、前面的只是个热身、、接下来步骤如下:

1、开启ADC1的时钟,由于ADC1是在PA1上,所以同时也要打开PA的时钟,并进行相关的配置、对于这个配置,要把PA1设置成模拟输入,为什么呢??大家打开中文参考手册可以看到

啊哈、、这下子清楚了吧、

2、复位ADC1,(本人觉得没必要、为什么,待会我会跟你说,留下悬念先),设置ADC1的分频因子,(记住,这里的ADC的时钟不能超过14MHZ),而且其采样周期长点会好点,

ADCCLK---最快可达14MHz, 时钟来自经过分频器的PCLK2(2、4、6、8分频)

整个转换时间 = 采样时间 + 12.5个周期(固定时间)

在14MHz和采样时间位1.5周期时 ? 转换时间:1μs (14个周期 cycles)

当ADCCLK=14MHz和1.5周期的采样时间:

TCONV = 1.5 + 12.5 = 14周期 = 14×(1 / (14 × 1000000)) = 1μs

其采样周期一览表:

涉及到采样周期、这里来看看转换序列:

最多达16个转换通道且可以采样不同的顺序排列,不同的采样时间和过采样的可能性。

例如:- 转换通道:1、2、8、4、7、3、11
- 不同的采样时间;
- Oversampling of channel 7。

3、初始化ADC1的参数、设置ADC1的工作模式和规则序列的相关信息;

大家通过打开"stm32f10.adc.h"可以看到:

typedefstruct{uint32_tADC_Mode;//设置ADC模式-->独立模式FunctionalStateADC_ScanConvMode;//设置是否开启扫描模式--->否FunctionalStateADC_ContinuousConvMode;//设置是否开启连续转换模式---->否uint32_tADC_ExternalTrigConv;//设置启动规则转换组转换模式---->软件触发uint32_tADC_DataAlign;//设置数据对齐方式----->右对齐uint8_tADC_NbrOfChannel;//设置规则序列的长度---->顺序进行规则转换的ADC通道数目1}ADC_InitTypeDef;

4、使能ADC并校准

注:在设置完了以上信息后,使能AD转换器,执行复位校准和AD校准(这两步校准一定要,否则数据将不准)

还有记住,每次进行校准之后都要等待校准结束,但是通过什么方式知道校准结束呢?

这里是通过获取校准状态来判断是否校准结束,相关的库函数请看代码

分别的库函数请看待会的代码。(请用比较老外的方式去看,也就是用英语啦,为什么呢?请看下文)

5、读取AD的值

当然,这里说读取AD值并不是那么的简单,以上我们只是准备好了AD,还没有设置相关的规则序列通道,采样顺序,以及采样周期,设置完之后启动AD转换就行了、然后才直接读取哈、、

相关的库函数请看代码、

voidAdc_Init(void){ADC_InitTypeDefADC_InitStructure;GPIO_InitTypeDefGPIO_InitStructure;/*EnableADC1andGPIOAclock*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA,ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);//12MHZ/*ConfigurePA.1(ADCChannel)asanaloginput-------------------------*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;GPIO_Init(GPIOA,&GPIO_InitStructure);//ADC_DeInit(ADC1);//在这里复位被我注释掉了、至于为什么,我待会会说/*ADC1configuration------------------------------------------------------*/ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//这里对应上面所讲的配置,在这里就不给出注释了ADC_InitStructure.ADC_ScanConvMode=DISABLE;ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel=1;ADC_Init(ADC1,&ADC_InitStructure);/*EnableADC1*///知道我为啥要在上面提醒大家要用老外的方式来看了吧、因为这里的注释都是用英文的//请不要以为我装逼,我这样做是有原因的、、原因我待会会说、你也会明白我最初的标题为何那样写ADC_Cmd(ADC1,ENABLE);/*EnableADC1resetcalibrationregister*/ADC_ResetCalibration(ADC1);/*ChecktheendofADC1resetcalibrationregister*/while(ADC_GetResetCalibrationStatus(ADC1));/*StartADC1calibration*/ADC_StartCalibration(ADC1);/*ChecktheendofADC1calibration*/while(ADC_GetCalibrationStatus(ADC1));}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭