STM32F4 系列一般都有 3 个 ADC,这些 ADC 可以独立使用,也可以使用双重/三重模式(提高采样率)。
STM32F4 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它有 19 个通道,可测量 16 个外部源、2 个内部源和 Vbat 通道的信号。 ADC 的最大的转换速率为 2.4Mhz,也就是转换时间为 0.41us(在 ADCCLK=36M,采样周期为 3 个 ADC 时钟下得到),不要让 ADC 的时钟超过 36M,否则将导致结果准确度下降。
ADC 的转换分为 2 个通道组:规则通道组和注入通道组。规则通道相当于你正常运行的程序,而注入通道呢,就相当于中断。注入通道的转换可以打断规则通道的转换, 在注入通道被转换完成之后,规则通道才得以继续转换。 ADC 的规则规则通道组最多包含 16 个转换,而注入通道组最多包含 4 个通道
规则通道组:规则通道和它的转换顺序在ADC_SQRx寄存器中选择,规则组转换的总数应写入ADC_SQR1寄存器的L[3:0]中
注入通道组:注入组和它的转换顺序在ADC_JSQR寄存器中选择,注入组里转化的总数应写入ADC_JSQR寄存器的L[1:0]中
单个ADC框图:
ADC单次转换模式
ADC 在单次转换模式下,只执行一次转换,该模式可以通过 ADC_CR2 寄存器的 ADON 位(只适用于规则通道)启动,也可以通过外部触发启动(适用于规则通道和注入通道),这时 CONT 位为 0。1.将ADC_CR2寄存器中的SWSTART位置1(仅适合于规则通道)
2.将JSWSTART位置1(适合于注入通道)
3.外部触发(适用于规则通道或注入通道)
一旦所选择的通道转换完成
以规则通道为例,转换结果(12位,x对齐)将被存在 16位ADC_DR 寄存器中,EOC(转换结束)标志将被置位,若置位了 EOCIE,则会产生中断。然后 ADC 将停止,直到下次启动
以注入通道为例,转换数据(12位,x对齐)存储在 16位ADC_JDR1寄存器中,JEOC(注入转换结束)标志被置位,若置位了JEOCIE,则会产生中断。然后 ADC 将停止,直到下次启动
ADC连续转换模式
在连续转换模式下,ADC结束一个转换后立即启动一个新的转换,CONT位为1时,可通过外部触发或将ADC_CR2寄存器中的SWSTART位置1来启动此模式(仅适用于规则通道)
每次转换之后,如果转换了规则通道组:上次转换的数据存储在16位ADC_DR寄存器中,EOC(转换结束)标志置位,若置位了 EOCIE,则会产生中断。
无法连续转换注入通道。连续模式唯一的例外情况是,注入通道配置为在规则通道之后自动转换(使用JAUTO位)
ADC扫描模式(适用于扫描一组模拟通道)
通过将ADC_CR1寄存器中的SCAN位置1来选择扫描模式:ADC会扫描在ADC_SQRx寄存器(对于规则通道)或ADC_JSQR寄存器(对于注入通道)中选择的所有通道,为组中的每一个通道都执行一次转换。每次转换结束后,会自动转换该组中的
下一个通道。如果将CONT位置1,规则通道转换不会在组中最后一个所选通道出停止,而是重新从第一个所选通道继续…
如果将DMA位置1,则在每次规则通道转换之后,均使用直接存储器访问(DMA)控制器将转换自规则通道组的数据(存储在ADC_CR寄存器中)传输到SRAM
在以下情况中,ADC_SR寄存器中的EOC位置1:
- 如果EOCS位清零,在每个规则组序列转换结束时
- 如果EOCS位置1,在每个规则通道转换结束时
从注入通道转换的数据始终存储在ADC_JDRx寄存器中
ADC 中断
当模拟看门狗状态位和溢出状态位分别置 1 时,规则组和注入组在转换结束时可能会产生中 断。可以使用单独的中断使能位以实现灵活性。
ADC_SR 寄存器中存在另外两个标志,但这两个标志不存在中断相关性:
● JSTRT(开始转换注入组的通道)
● STRT(开始转换规则组的通道)
ADC 时钟配置