adc 采样 通道

来源:互联网 发布:appserv linux 编辑:程序博客网 时间:2024/05/19 02:23



今天学习stm32的adc部分,adc1有18个通道,其中adc16和adc17是内部通道,分别接内部温度计和Vrefint。在做A/D转换的时候,16个多路通道可以分为两组:规则组和注入组。不知道大家怎么看,也许是我看的不够专注,反正我觉得stm32的参考手册真是晦涩难懂,就像躲猫猫一样。就规则组这个地方,看了好长时间才算看明白。

总结一下规则组的设置。规则组由16个转换组成,注意这里说的是转换,而不是指16个通道。具体来说就是在ADC_SQR1-----ADC_SQR3这三个寄存器中SQ1[4:0]至SQ16[4:0],而每一个转换可以是ADC的前16个通道中的任意一个通道,所以这几个都是用5位一组表示的。通过对任意一个转换设置相应的数据可以将这个转换设置成某一个通道。如往SQ1里面写3,那么ADCx_in3就开始工作。

规则组中转换的总数由ADC_SQR1寄存器的L[3:0]位确定。如:将9写入该寄存器的L中,那么规则组的转换数就是9,也就是SQ1,SQ2,SQ3.......SQ9。将想要进行转换的通道写进上面几个转换中,就可以实现对多个通道按照一定的规则进行转换。

而寄存器ADC_CR1的DISCNUM[2:0]则规定了一次外部触发时进行规则转换的通道的数目。

如果我想进行这样一次转换:将通道9,8,7,6,5,4,3,2,1,0这是个通道进行转换。

那么首先设置ADC_SQR1寄存器的L[3:0],应该写0X0A。

然后再开始写寄存器ADC_CR1的DISCNUM[2:0],一次外部触发启动几个转换就写几个。这里写入0X03。

第三在SQ1到SQ9中依次写入9,8,7,6,5,4,3,2,1,0。.

那么在第一次外部触发之后,通道9,8,7进行转换;

第二次触发之后,通道6,5,4进行转换;

第三次触发之后,通道3,2,1进行转换;

第四次触发之后,通道0,9,8进行转换。

自己的一点理解,如有不足,请各位多多指教。


0 0
原创粉丝点击