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

STM32F103 AD采样结果不正确

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

使用特权

评论回复
22
wenfen|  楼主 | 2021-11-13 19:26 | 只看该作者

ADC_ConvertedValue[] 可以定义成uint32_t,但是我现在定义的就是uint16_t

使用特权

评论回复
23
llljh| | 2021-11-13 19:28 | 只看该作者
定义成uint32_t 在DMA条件下STM32会把相邻2次ADC放在uint32_t的高16位和低16位

使用特权

评论回复
24
wenfen|  楼主 | 2021-11-13 19:35 | 只看该作者
我试了定义成uint32_t也不可以

使用特权

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

使用特权

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

使用特权

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

使用特权

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

使用特权

评论回复
29
wenfen|  楼主 | 2021-11-13 19:44 | 只看该作者

我先初始化DMA再初始化ADC就可以了,还是非常感谢你,论坛里有你们这样的热心人真是太好了

使用特权

评论回复
30
jlyuan| | 2021-11-13 19:46 | 只看该作者
楼主是如何配置的寄存器啊

使用特权

评论回复
31
zwll| | 2021-11-13 19:48 | 只看该作者
应该没有影响啊

使用特权

评论回复
32
stly| | 2021-11-13 19:51 | 只看该作者
恭喜楼主解决问题

使用特权

评论回复
33
木木guainv| | 2021-12-7 10:58 | 只看该作者
读取寄存器对吗

使用特权

评论回复
34
xiaoqizi| | 2021-12-7 11:01 | 只看该作者
直接接地看结果

使用特权

评论回复
35
tpgf| | 2021-12-7 11:02 | 只看该作者
使用的dma模式?

使用特权

评论回复
36
wowu| | 2021-12-7 11:02 | 只看该作者
端口电压是一个定值吗

使用特权

评论回复
37
wakayi| | 2021-12-7 11:06 | 只看该作者
读取数据有问题了?

使用特权

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

本版积分规则