hal库adc 多通道dma 读取不正常

记一次特别特别恶心的bug

最近有个stm32的项目在用rtthread,但是rtt的adc设备框架,只支持轮询,挺浪费时间,就打算直接用hal库的dma方式,结果按照网上查到的配置方式,读取一直不正常,一共5个通道

要么只有第一个有数据,而且数据不正确,直接接到3.3v只有不到250

要么全都是0,什么数据都没有

甚至明明就12位的adc,dma出来的数据居然有32位

单独建个工程,只开adc和dma,读数正常,但是原项目工程读数就是不正常
最后看了半天,发现是cubemx生成的main.c中,dma_init的顺序在adc_init之后,改到前面就一切正常

dma需要在adc之前初始化
  MX_DMA_Init();
  MX_ADC1_Init();

另外rtt中提供了板级初始化
INIT_BOARD_EXPORT
在项目工程中,原本打算通过rtt直接初始化,

INIT_BOARD_EXPORT(MX_DMA_Init);
INIT_BOARD_EXPORT(MX_ADC1_Init);

发现还是有问题,函数有执行,但是数据依旧无法读取,只能在用户init函数中重新调用

stm32 cubemx 生成
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值