Hu Weijun
Hu Weijun
发布于 2025-05-07 / 6 阅读
0
0

STM32F407中的ADC采样

📍 字数:1000 ⏱️ 阅读时长:6分钟

这次课程的内容为STM32F407单片机的ADC采样,同样也是基于HAL库,直接用 STM32CubeMX 生成的代码,课程仅仅做简单的ADC采样。

1. CubeMX配置

打开CubeMX的时候,参考之前的实验,都选择打开SYS中的serial wire烧录模式,并且在RCC中的HSE选择外部晶振。

ADC通道配置关键步骤

硬件连接验证

✅ 根据原理图确认:

  • ADC1_IN0通道对应PA0引脚

  • 开发板已将PA0连接至可调电位器

CubeMX具体操作:

引脚配置

  • 左侧IO列表找到PA0

  • 下拉菜单选择ADC1_IN0

  • GPIO模式设为Analog(无上下拉)

ADC参数设置

参数项

推荐值

说明

Resolution

12-bit

最大精度

Data Alignment

Right alignment

方便数据读取

Scan Conversion

Disabled

单通道模式

Continuous Conv

Disabled

单次采样

在GPIO中,需要将PA0选择为模拟输入模式,也就是Analog mode的选项,然后不需要选择上拉或者下拉电阻。

ADC中GPIO引脚配置.png

同时也需要打开STM32单片机中的串口引脚,串口引脚的配置参考前面的文章。

《基于CubeMX的STM32F407串口学习》

2. ADC采样步骤

2.1 基础配置环节

🔧 硬件初始化

通过CubeMX自动生成的MX_ADC1_Init()函数已完成关键配置:

12位分辨率(最大量化值4095)

3.3V参考电压(VDDA接入电压)

通道参数(如采样时间、序列等)

💡 小提示:在CubeMX界面右击ADC引脚可快速配置通道参数。

2.2 ADC采样四步走

  1. 启动转换

调用HAL_ADC_Start(&hadc1)→ 此时ADC开始对指定通道进行信号采集

  1. 等待转换完成

HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
  • 使用HAL_MAX_DELAY实现阻塞式等待

  • 实际项目中建议改用中断/DMA提高效率

  1. 读取原始值

value = HAL_ADC_GetValue(&hadc1);

因此能获得12位精度的数字量(0~4095)

  1. 电压换算

float voltage = value * (3.3 / 4095.0f);

公式解析:

  • 4095对应12位ADC满量程值(2¹²-1)

  • 3.3V为STM32系列常用参考电压

采样注意事项

  • 对关键信号可多次采样取均值,类似滤波;

  • 确保ADC引脚已正确配置为模拟输入模式。


评论