[STM32F1] STM32F103 AD采样结果不正确

[复制链接]
juventus9554 发表于 2021-11-13 19:24 | 显示全部楼层
ADC_ConvertedValue[]只能定义成uint16_t,不能定义成uint32_t
 楼主| wenfen 发表于 2021-11-13 19:26 | 显示全部楼层

ADC_ConvertedValue[] 可以定义成uint32_t,但是我现在定义的就是uint16_t
llljh 发表于 2021-11-13 19:28 | 显示全部楼层
定义成uint32_t 在DMA条件下STM32会把相邻2次ADC放在uint32_t的高16位和低16位
 楼主| wenfen 发表于 2021-11-13 19:35 | 显示全部楼层
我试了定义成uint32_t也不可以
kangzj 发表于 2021-11-13 19:37 | 显示全部楼层
值得注意的一点是初始化时要先初始化DMA然后初始化ADC。
zwll 发表于 2021-11-13 19:39 | 显示全部楼层
DMA已经自动把数据处理好了,你在DMA中断里还去处理
yinxiangh 发表于 2021-11-13 19:41 | 显示全部楼层

    // try to start adc1
    HAL_ADC_Start(&hadc1);

    //try to satrt DMA for adc
    HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adc_dma_data, MAX_ADC_DMA_DATA * EM_ADC_TOTAL_NUM);     //MAX_ADC_DMA_DATA * EM_ADC_TOTAL_NUM
我这个是用的HAlf库,的确数据长度不是按照字节计算的,我这里使用的是循环采样,DMA也是
但是启动DMA后,ADC数据会自动被装入缓冲区,----不需要在中断里单独处理ADC采样的数据。
缓冲区可以直接使用
 楼主| wenfen 发表于 2021-11-13 19:43 | 显示全部楼层
真的可以了,太感谢你了。我以前先初始化ADC再初始化DMA没有问题,只不过芯片型号不一样。真的非常感谢你。
 楼主| wenfen 发表于 2021-11-13 19:44 | 显示全部楼层

我先初始化DMA再初始化ADC就可以了,还是非常感谢你,论坛里有你们这样的热心人真是太好了
jlyuan 发表于 2021-11-13 19:46 | 显示全部楼层
楼主是如何配置的寄存器啊
zwll 发表于 2021-11-13 19:48 | 显示全部楼层
应该没有影响啊
stly 发表于 2021-11-13 19:51 | 显示全部楼层
恭喜楼主解决问题
木木guainv 发表于 2021-12-7 10:58 | 显示全部楼层
读取寄存器对吗
xiaoqizi 发表于 2021-12-7 11:01 | 显示全部楼层
直接接地看结果
tpgf 发表于 2021-12-7 11:02 | 显示全部楼层
使用的dma模式?
wowu 发表于 2021-12-7 11:02 | 显示全部楼层
端口电压是一个定值吗
wakayi 发表于 2021-12-7 11:06 | 显示全部楼层
读取数据有问题了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部