STM32的ADC及内部温度传感器的使用
ADC的用途范围可以说是非常的广泛~甚至是可以说差不多必不可少了~大部分单片机嵌入式系统ADC都基本要用到~包括牛人CZZ也一样!
STM32 自带1-3个ADC模块,采样精度达到了12位,比起当年使用的AVR单片机的10位来说,上了个小档次了~本测试程序采用了ADCDMA的中断方式,这 样CPU就可以把ADC的任务交给DMA这个勤劳肯干的部下了,当DMA完成了一次任务之后会产生中断,告诉CPU可以来查收结果了!DMA也是在嵌入式 系统中非常常用的,例如在LCD中,数据拷贝中等。。。在STM32F103RBT6中,ADC1和ADC2共用一组管脚
总体编程思路和顺序如下:
1. 初始化RCC相关,使得系统有时钟,功能模块如ADC、DMA有时钟。
2. GPIO相关初始化,比如常用的指示灯,ADC的管家要设置为输入等。
3. NVIC向量中断的配置,因为这里使用了DMA中断和中断服务程序编写(下例中暂不使用)
4. DMA配置(下例中暂不使用)
5. ADC初始化
以下是参考代码,使用ADC1的IN0脚
1 | void ADC_GPIO_Init() |
当使用内部温度传感器时,需要使能温度传感器通
ADC_TempSensorVrefintCmd(ENABLE);
温度传感器通道号是ADC_Channel_16,此通道的采样时间调到最大,来保证精度;
温度的计算公式如下:
V25、Avg_Slope的典型值分别为1.43、4.3mV/C
TEMP=(1.43-Vsense)/0.0043+25;