ADC模式介绍:
我开启了通道0、1、2以及内部温度读取通道一共四个通道:
如果想使用轮训方式并且不使用DMA的多通道采集,那么就要配置为 【单次模式+间断模式】,并且将Number Of Discontinuous Conversions为1,也就是每个通道分成了一个组,配置如下图:
代码如下:
我将通道0分别接到3.3V和GND上,4通道采集运行效果如下:
通过DMA实现多通道数据采集,要将连续模式和间断模式关闭;如果连续模式开启,那么通过DMA传输到的数组中,每个通道所采集到的值对应数组中的一个位置就是不固定的,例如你开启了IN0~IN3这四个通道,ADC_Value这是个大小为4的u16类型数组,你在第一次采集的时候IN0的数值通过DMA被放在ADC_Value[0],第二次采集的时候IN0采集到的数值就被放到了ADC_Value[1],这样的话就极不方便我们对每个通道的数据进行分析和提取。
配置如下如:
开启ADC中断:
开启DMA:
代码如下:
4个通道采集运行效果如下:
内部温度计算公式:
【Temperature = {(V25 - VSENSE) / Avg_Slope} + 25】
字段说明:
ADC值转电压值计算公式:【电压 = ADC采集到的值 * 3.3 / 4096】
看上图我采集到的值为1703,先转换为电压值:1703*3.3/4096≈1.37
转换为温度:(1.43 - 1.37)/ 4.3 + 25 ≈ 25.01℃
ends…