今天要做的是 ADC 的实验
平台 : STM32F429
开发工具: STM32CubeMx 版本号 5.0.0
实验目的: 实现 ADC1 13 通道 DMA 采集
一 : 简介
首先, 我们来看一下 STM32F44XX 参考手册里关于该芯片的 ADC 功能介绍
二: STM32CubeMx 配置
数据对齐方式 为 右对齐
使能 连续转换模式, DMA 连续请求
设置采样次数 为 3 个周期
配置 DMA
Mode 设置为 Circular 模式, 数据宽度设置为 Half Word 2 个字节
设置好之后, 点击 GENERATE CODE 生成代码
定义变量
- __IO uint16_t ADC_ConvertedValue[20];
- __IO float ADC_Volt;
启动 DMA 数据传输
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_ConvertedValue[0], 20);
读取 ADC 数据
- unsigned int i = 0, ADC_Value = 0;
- for(i = 0; i < 20; ++i)
- {
- ADC_Value += ADC_ConvertedValue[i];
- }
- ADC_Value = ADC_Value / 20;
- printf("ADC Value %d\r\n",ADC_Value);
- printf("vol %f\r\n", ADC_Value * 3.3 / 4096);
三 : 实验结果
串口输出结果
四: 实验中遇到的问题
1
最后一个参数一开始的时候写 1, 程序就出现了阻塞的现象. 我分析可能是因为 DMA 选择的是 Circular 模式, 会一直产生中断, 从而使得 CPU 都被中断抢占了, 因此将数据传输长度改为了 20, 每次对 20 个数据进行求均值计算, 然后测试没有问题.
2 关于采样周期
采样周期 是否是越大越精准呢? 我把采样周期改大了之后, 再进行测试, 实验有待验证
来源: http://www.bubuko.com/infodetail-3040893.html