您的位置 首页 解答

STM32学习笔记之ADC

一、基础知识118个通道,可测16个外部和2个内部信号源,可设置成单侧、连续、扫描、间断模式执行212位精度3扫描模式,通道0到通道n的自

一、基础知识

1.18个通道,可测16个外部和2个内部信号源,可设置成单侧、接连、扫描、接连形式履行

2.12位精度

3.扫描形式,通道0到通道n的主动转化

4.自校准

5.按通道装备采样时刻

6.接连形式?

7.ADC形式?

8.供电要求2.4~3.6V

9.输入规模0~3.6V

二、功用描绘

1.通道挑选:

STM32的每个ADC模块经过内部的模仿多路开关,能够切换到不同的输入通道并进行转化。在恣意多个通道上以恣意次序进行的一系列转化构成成组转化。例如,能够如下次序完结转化:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。

有2种区分转化组的方法:规矩通道组和注入通道组。一般规矩通道组中能够组织最多16个通道,而注入通道组能够组织最多4个通道。

在履行规矩通道组扫描转化时,如有破例处理则可启用注入通道组的转化。规矩转化和注入转化均有外部触发选项,规矩通道转化期间有DMA恳求发生,而注入转化则无DMA恳求,需要用查询或中止的方法保存转化的数据。

一个不太恰当的比方是:规矩通道组的转化好比是程序的正常履行,而注入通道组的转化则好比是程序正常履行之外的一个中止处理程序。 规矩组由多达16个转化组成。规矩通道和它们的转化次序在ADC_SQRx寄存器中挑选。规矩组中转化的总数写入ADC_SQR1寄存器的L[3:0]位中。
注入组由多达4个转化组成。注入通道和它们的转化次序在ADC_JSQR寄存器中挑选。注入组里的转化总数目写入ADC_JSQR寄存器的L[1:0]位中。
假如规矩转化现已在运转,为了在注入转化后保证同步,一切的ADC(主和从)的规矩转化被中止,并在注入转化完毕时同步康复,见图示。

2.单次转化形式:

单次转化形式里,ADC 只履行一次转化。

3.接连转化形式:

在接连转化形式中,当前面ADC 转化一完毕立刻就发动另一次转化。

4.扫描形式:

此形式用来扫描一组模仿通道。

5.注入形式办理:

(1)触发注入。详见参考手册

(2)主动注入。假如设置了 JAUTO 位,在规矩组通道之后,注入组通道被主动转化。这能够用
来转化在ADC_SQRx 和ADC_JSQR 寄存器中设置的多至20 个转化序列。
在此形式里,有必要制止注入通道的外部触发。

6.接连形式:

(1)规矩组
此形式经过设置 ADC_CR1 寄存器上的DISCEN 位激活。它能够用来履行一个短序列的n 次转化(n<=8),此转化是ADC_SQRx 寄存器所挑选的转化序列的一部分。N 由ADC_CR1 寄存器的DISCNUM[2:0]位给出。一个外部触发信号能够发动ADC_SQRx 寄存器中描绘的下一轮 n 次转化,直到此序列一切的转化完结停止。总的序列长度由ADC_SQR1 寄存器的L[3:0]界说。
举例:
n=3,被转化的通道 = 0, 1, 2, 3, 6, 7, 9, 10
榜首次触发:转化的序列为 0,1,2
第2次触发:转化的序列为 3,6,7
第三次触发:转化的序列为 9,10,并发生EOC 事情
第四次触发:转化的序列 0,1,2
留意: 当一规矩组以接连形式转化时,转化序列完毕后不主动从头开端。当一切子组被转化完结,下一次触发发动榜首个子组的转化。在上面的比如中,第四次触发从头转化榜首子组的通道 0,1 和2。

(2)注入组

此形式经过设置 ADC_CR1 寄存器的JDISCEN 位激活。在一个外部触发事情后,给形式按序转化ADC_JSQR 寄存器中挑选的序列。
一个外部触发信号能够发动ADC_JSQR 寄存器挑选的下一个通道序列的转化,直到序列中一切的转化完结停止。总的序列长度ADC_JSQR 寄存器的JL[1:0]位界说。
比如:
n=1,被转化的通道 = 1,2,3
榜首次触发:通道1 被转化
第2次触发:通道2 被转化
第三次触发:通道3 被转化,而且发生EOC 和JEOC 事情
第四次触发:通道1 被转化
留意:1 当完结一切注入通道转化,下个触发发动第1 个注入通道的转化。在上述比如中,第四个触发从头转化第1 个注入通道1。
2 不能一起运用主动注入和接连形式。3 有必要防止一起为规矩和注入组设置接连形式。接连形式只能作用于一组转化。

7.双ADC形式

8.数据对齐
ADC_CR2 寄存器中的ALIGN位挑选转化后数据贮存的对齐方法。数据能够左对齐或右对齐,如图146 和图147 所示。
注入组通道转化的数据值现已减去了在ADC_JOFRx 寄存器中界说的偏移量,因而成果能够是一个负值。SEXT 位是扩展的符号值。
关于规矩组通道,不需减去偏移值,因而只要12 个位有用。
数据右对齐:
注入组
SEXT SEXT SEXT SEXT D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
规矩组
0 0 0 0 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
数据左对齐:

注入组
SEXT D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0
规矩组
D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0

三、 程序设计与软件装备

1.

void ADC_Config(void)
{
ADC_InitTypeDef ADC_InitStructure;//界说ADC初始化结构体变量
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1和ADC2作业在独立形式
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //使能扫描
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//ADC转化作业在接连形式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//由软件操控转化
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//转化数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1;//转化通道数目为1
ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC
ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_28Cycles5);
//ADC1挑选通道14,规矩组采样次序(1~16),采样时刻239.5个周期
ADC_DMACmd(ADC1, ENABLE);//使能ADC1模块DMA
ADC_Cmd(ADC1, ENABLE);//使能ADC1
ADC_ResetCalibration(ADC1); //重置ADC1校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1));//等候ADC1校准重置完结
ADC_StartCalibration(ADC1);//开端ADC1校准
while(ADC_GetCalibrationStatus(ADC1));//等候ADC1校准完结
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1软件开端转化
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/256548.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部