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 生成
hal库adc 多通道dma 读取不正常_第1张图片

你可能感兴趣的:(日常bug,单片机,stm32,arm)