发新帖我要提问
12
返回列表
打印
[STM32F1]

STM32F103 AD采样结果不正确

[复制链接]
楼主: wenfen
手机看帖
扫描二维码
随时随地手机跟帖
21
juventus9554| | 2019-11-10 17:06 | 只看该作者 回帖奖励 |倒序浏览
ADC_ConvertedValue[]只能定义成uint16_t,不能定义成uint32_t

使用特权

评论回复
22
wenfen|  楼主 | 2019-11-10 17:09 | 只看该作者
ADC_ConvertedValue[] 可以定义成uint32_t,但是我现在定义的就是uint16_t

使用特权

评论回复
23
zwll| | 2019-11-10 17:12 | 只看该作者
定义成uint32_t 在DMA条件下STM32会把相邻2次ADC放在uint32_t的高16位和低16位

使用特权

评论回复
24
wenfen|  楼主 | 2019-11-10 17:15 | 只看该作者
我试了定义成uint32_t也不可以

使用特权

评论回复
25
kangzj| | 2019-11-10 17:18 | 只看该作者
值得注意的一点是初始化时要先初始化DMA然后初始化ADC。

使用特权

评论回复
26
zwll| | 2019-11-10 17:49 | 只看该作者
DMA已经自动把数据处理好了,你在DMA中断里还去处理

使用特权

评论回复
27
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采样的数据。
缓冲区可以直接使用

使用特权

评论回复
28
wenfen|  楼主 | 2019-11-10 18:09 | 只看该作者
真的可以了,太感谢你了。我以前先初始化ADC再初始化DMA没有问题,只不过芯片型号不一样。真的非常感谢你。

使用特权

评论回复
29
wenfen|  楼主 | 2019-11-10 18:12 | 只看该作者
我先初始化DMA再初始化ADC就可以了,还是非常感谢你,论坛里有你们这样的热心人真是太好了

使用特权

评论回复
30
八层楼| | 2019-12-9 15:44 | 只看该作者
楼主是如何配置的寄存器啊

使用特权

评论回复
31
观海| | 2019-12-9 15:54 | 只看该作者
应该没有影响啊

使用特权

评论回复
32
guanjiaer| | 2019-12-9 15:56 | 只看该作者
恭喜楼主解决问题

使用特权

评论回复
33
heimaojingzhang| | 2019-12-9 16:01 | 只看该作者
我也学习了 呵呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则