一、准备工作
有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32+HAL】CUBEMX初始化配置
有关定时器触发ADC模式配置,详见【STM32+HAL】ADC采集波形实现
有关软件触发ADC模式配置,详见【STM32+HAL】三轴按键PS2摇杆
二、所用工具
1、芯片: STM32F407VET6
2、IDE: MDK-Keil软件
3、库文件:STM32F4xxHAL库
三、实现功能
串口打印电池电量值
四、接线
此接口是采样电池电压和系统 VCC 电压的。其中VM 是电池电压,VCC 是系统电压。 电池电压经过 1:10 分压,VCC 电压通过 1:1 分压。使用时候注意共GND。
VCC -> 5V (无法测量低于5V电量VM)
BAT -> PA1 (ADC1-IN1)
VM -> 电量正极
五、HAL库配置
1、开启ADC
实验发现误差较大,故将采样周期配置为480周期(最大)
2、开启串口
至此,HAL库配置完毕
六、keil填写代码
1、初始化
#define SAMP 20
uint16_t adc1[SAMP]={0};
double voltage = 0;
printf("Hello World\r\n");
HAL_Delay(300);
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)adc1,SAMP);
2、打印电量值
/* USER CODE BEGIN WHILE */
while (1)
{
for(int i=0;i<SAMP;i++)
{
voltage = adc1[i]*3.3*11/4096.0f;
printf("%.2f\r\n",voltage-0.12f); //0.12为电量偏差经验值
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
七、源码提供
资源【STM32+HAL】读取电池电量
八、结语
本人能力有限,代码未必是最优解,若有可改进之处望在评论区留言,采纳有赏~