前面的东西学过,自然就到了 ADC 了,STM32 的 AD 功能,那是相当的强大,可以设置的东西很多,所以要好好看看。正好,前面的学习对于库还是一知半解的,借此机会也多了解一些有关库的知识。 ADC 是多少位的? 12 位 ADC 有多少个? 1 个、2 个或多至 3 个,视不同的器件而不同;每个又有多个通道。 关于通道的名堂: 10.3.3 通道选择 有 16 个多路通道。可以把转换分成两组:规则的和注入的。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道 3、通道 8、通道 2、通道 2、通道 0、通道 2、通道 2、通道 15。 ● 规则组由多达 16 个转换组成。规则通道和它们的转换顺序在ADC_ SQRx寄存器中选择。规则组中转换的总数写入 ADC_ SQR1 寄存器的 L[3:0]位中。 ● 注入组由多达 4 个转换组成。注入通道和它们的转换顺序在ADC_ JSQR 寄存器中选择。注入组里的转换总数目必须写入 ADC_ JSQR 寄存器的 L[1:0]位中。 它们有什么区别: ● 不同的组转换后保存数据的地方不一样,产生的中断标志不一样。 ● 在扫描模式下,规则组会有能力把各通道数据通过 DMA 传给SRAM,而注入组的数据总是存在在 ADC_ JDRx 中。 还有其他的一些区别,这里暂不一一罗列。 ST 为什么这么样来设计AD 转换,肯定是有理由的,但是我不知道,因此,我也就难以深入地理解 AD 转换的各种模式。这也就是说,对于知识的理解,要把它放在其应用背景中去学习才能学得好。因此,其他相关知识积累得越多,这里学起来也就越快,这也就是所谓的“功底”问题。某人功底深厚,意味着他见多识广,遇到的事情多,能够很快找到处理某件事情的“原型”。当然,也有一些人抽象学习能力极强,就算找不到“原型”,他也能学得很好。基本上,这类人的科学素养更高一些,在工程师、工科类学生中并不多见。 闲话少说,下面来看怎么样来使用AD 转换器? 以一段源程序为例分别来解读,同时进一步理解STM32 中有关符号的含义,相信以后再读库源程序,定能更上一层楼。 /* ADC1 开始准备配置*/ ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; /*设置 ADC->CR1 的19:16,确定ADC 工作模式,一共有10 种工作模式 #define ADC_Mode_Independent ((uint32_t)0x00000000) 0000:独立模式 #define ADC_Mode_RegInjecSimult ((uint32_t)0x00010000) 0001:混合的同步规则...