我们在学习一门技术的时候,应该对它的理论部分有所了解,然后才能在实践中进一步加深理解,进而掌握。对于stm32来说,我认为学习的时候应该先仔细阅读相关的参考手册,然后再动手实践,这样才能理解得更加透彻,掌握得更加牢固!
今天记录一下我学习stm32的ADC部分的了解。
1.介绍
小结:stm32的ADC有18个通道(16个外部通道+2个内部通道),有单次、连续、扫描和间断四种模式,ADC的结果可以左对齐和右对齐的方式存储在16位的数据寄存器中(一般我们都是使用右对齐的方式)
2、特征
3、框图
框图应该是最重要的部分了,理解了框图,对这个外设的理解就比较透彻了。
①模拟至数字转换器中有两个通道,一个是注入通道,一个是规则通道,对应的转换结果也是存储到注入通道数据寄存器和规则通道数据寄存器中(都是16位的);
②注入通道数据寄存器有4个,规则通道数据寄存器只有1个,规则通道最多可以转化16个通道的数据,而结果都是存储在一个规则通道数据寄存器中,为了避免数据丢失,可以采用DMA搬运数据,提高效率。
③触发注入通道开始转化的外部触发信号有8种,如图所示,其中TIM8_CH4及其重映射只存在于大容量的产品中。
④类似于注入通道,触发规则通道的外部触发信号也有8种,如图所示,其中TIM8_TRGO及其重映射也只存在于大容量产品中。
⑤以上的两点只针对ADC1和ADC2,ADC3的触发信号有所不同,如图所示:
⑥转换的过程如图,ADCx_IN0~ADCx_IN15共16个外部通道,通过GPIO端口将模拟量传达到模拟至数字转化器中的注入通道或者规则通道,另外还有两个内部通道温度传感器和VREFINT
,同样也可以将模拟量传送到模拟至数字转化器中的注入通道或者规则通道,注入通道最多可以转换4个通道的模拟量,转换结果存储到注入通道数据寄存器中,转换完成后会产生JEOC标志位,规则通道最多可以转换16个通道,转换结果存储到规则通道数据寄存器中,转换完成后会产生EOC标志位。
4、功能描述
ADC_CR2寄存器上的ADON位是控制控制ADC开始和停止转换的,开始转换的时候需要设置两次,第一次是将ADC唤醒,延时一段时间(tSTAB),再次设置该位就可以进行转换了,清除该位就可以停止转换并且将ADC至于断电模式。时序图如下:
单次转换模式和连续转换模式是相反的,单次转换启动一次或者触发一次,只能转换一次,连续转换模式是启动或者触发一次就会连续转换,每次转换完成后就会将EOC或JEOC置位(如果设置了中断还会产生中断),然后继续下一次转换。
扫描模式就是对规则组或者注入组所选中的所有通道进行扫描转换,即同一组每一个通道转换完成后就会转换下一个下一个通道,如果CONT位置位(连续转换模式),转换到同一组的最后一个通道后不会停止转换,而是从头继续开始转换。如果设置了DMA位的话,每次转换完成后,在每次EOC后,DMA自动把规则组通道的转换数据传输到SRAM中,而注入通道转换的数据还是保存在ADC_JDRx寄存器中。
触发注入:清除ADC_CR1寄存器的JAUTO位,并且设置SCAN位,即可使用触发注入功能:首先启动规则通道的转换(外部触发或者设置ADON位来启动),如果在规则通道转换期间产生一个外部注入触发,当前的转换就会被复位,注入通道序列被以单次扫描方式进行转换。注入通道转换完成后,恢复上次被中断的规则组通道转换。如果是注入组转换期间产生一个规则事件,并不能打断注入组通道的转换,会等到注入组转换完成后执行规则序列的转换。
自动注入:设置JAUTO位,并且必须禁止注入通道的外部触发。这样在规则组转换完成后,注入组通道就会被自动转换,如果设置了CONT位,规则通道至注入通道的转换序列被连续执行。对于ADC时钟预分频系数位4至8时,当规则转换至注入序列或者注入转换切换到规则序列时,会自动插入1个ADC时钟间隔。当ADC时钟预分频系数为2时,则有2个ADC时钟间隔的延迟。