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

[复制链接]
1176|32
juventus9554 发表于 2019-11-10 17:06 | 显示全部楼层
ADC_ConvertedValue[]只能定义成uint16_t,不能定义成uint32_t
 楼主| wenfen 发表于 2019-11-10 17:09 | 显示全部楼层
ADC_ConvertedValue[] 可以定义成uint32_t,但是我现在定义的就是uint16_t
zwll 发表于 2019-11-10 17:12 | 显示全部楼层
定义成uint32_t 在DMA条件下STM32会把相邻2次ADC放在uint32_t的高16位和低16位
 楼主| wenfen 发表于 2019-11-10 17:15 | 显示全部楼层
我试了定义成uint32_t也不可以
kangzj 发表于 2019-11-10 17:18 | 显示全部楼层
值得注意的一点是初始化时要先初始化DMA然后初始化ADC。
zwll 发表于 2019-11-10 17:49 | 显示全部楼层
DMA已经自动把数据处理好了,你在DMA中断里还去处理
yinxiangh 发表于 2019-11-10 18:06 | 显示全部楼层

    // 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 发表于 2019-11-10 18:09 | 显示全部楼层
真的可以了,太感谢你了。我以前先初始化ADC再初始化DMA没有问题,只不过芯片型号不一样。真的非常感谢你。
 楼主| wenfen 发表于 2019-11-10 18:12 | 显示全部楼层
我先初始化DMA再初始化ADC就可以了,还是非常感谢你,论坛里有你们这样的热心人真是太好了
八层楼 发表于 2019-12-9 15:44 | 显示全部楼层
楼主是如何配置的寄存器啊
观海 发表于 2019-12-9 15:54 | 显示全部楼层
应该没有影响啊
guanjiaer 发表于 2019-12-9 15:56 | 显示全部楼层
恭喜楼主解决问题
heimaojingzhang 发表于 2019-12-9 16:01 | 显示全部楼层
我也学习了 呵呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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