STM32之ADC
ADC是多少位的?
12位
ADC有多少个?
1个、2个或多至3个,视不同的器件而不同;每个又有多个通道。
关于通道的名堂:
10.3.3
通道选择
它们有什么区别:
还有其他的一些区别,这里暂不一一罗列。
ST为什么这么样来设计AD转换,肯定是有理由的,但是我不知道,因此,我也就难以深入地理解AD转换的各种模式。这也就是说,对于知识的理解,要把它放在其应用背景中去学习才能学得好。因此,其他相关知识积累得越多,这里学起来也就越快,这也就是所谓的“功底”问题。某人功底深厚,意味着他见多识广,遇到的事情多,能够很快找到处理某件事情的“原型”。当然,也有一些人抽象学习能力极强,就算找不到“原型”,他也能学得很好。基本上,这类人的科学素养更高一些,在工程师、工科类学生中并不多见。
闲话少说,下面来看怎么样来使用AD转换器?
以一段源程序为例分别来解读,同时进一步理解
STM32中有关符号的含义,相信以后再读库源程序,定能更上一层楼。
为看得清楚一些,以下代码用蓝色表示,而在这段代码的注释中插入的一些代码则用红色表示。从数据手册上摘录下来的内容则用黄底来表示(本来数据手册摘录部分用贴图是最好的,但是发表博文时贴图太痛苦了,,,偷点懒)。
通过前面一系列的设置,终于可以执行ADC_Init函数了。执行完了还不行,还要指定通道转换顺序,采样时间等,接下继续。
tmpreg2 = SQR3_SQ_Set << (5 * (Rank - 1));
SQR3的值如下:
//#define SQR3_SQ_Set
((uint32_t)0x0000001F)
之所以用5去乘,看下图中的表格:ADC_SQ3中SQ1~SQ6每个都是占5位。
这下理解了:如果这个Rank是1,那么tmpreg2这个变量第[4:0]这5位将会是11111(即SQR3_SQ_Set的初始值:0x0000001f),如果Rank是2,那么tmpreg2这个变量的第[9:5]将会是11111,即tmpreg2将等于:0x000003e0,依此类推。
*/
第四个参数是采样时间设定,代码如下:
ADCx->SMPR2 = tmpreg1;
接下来还有两件事要做,第一件是允许DMA传输
这两件事情都不麻烦,所以就不再分析了。
至此一次ADC转换配置完毕。很麻烦......也许功能强大的副产品就是麻烦吧,没有办法。
评论