FoNg0716 发表于 2016-4-20 19:09:21

关于STM32的多路ADC+DMA采集的问题

芯片型号是STM32F401RET
我在cubeMx生成的代码,设置如下图,file:///C:\Users\windows8\AppData\Roaming\Tencent\Users\344055076\QQ\WinTemp\RichOle\GSHE0%AQER0BJHLRI_T}LFI.png我是想在串口中看ADC的值但是我开启这个语句HAL_ADC_Start_DMA(&hadc1,temp,2);,串口就打印不出来了,在线调试,发现应该卡在这个函数里面了。

我的读取程序如下:

HAL_ADC_Start_DMA(&hadc1,temp,2);

tempHigh = temp>>8;
tempLow = temp;
HAL_UART_Transmit(&huart1,&tempHigh,1,10);
HAL_UART_Transmit(&huart1,&tempLow,1,10);

tempHigh = temp>>8;
tempLow = temp;
HAL_UART_Transmit(&huart1,&tempHigh,1,10);
HAL_UART_Transmit(&huart1,&tempLow,1,10);


求助啊!!!!




file:///C:\Users\windows8\AppData\Roaming\Tencent\Users\344055076\QQ\WinTemp\RichOle\GSHE0%AQER0BJHLRI_T}LFI.png



Paderboy 发表于 2016-4-20 20:56:31

本帖最后由 Paderboy 于 2016-4-20 21:27 编辑

刚好有这个板子。。。做了个工程,开了4个ADC 通道, PA0 PA1 内部温度和内部参考电压通道。。
测试结果


整个工程。。

wuwovicky 发表于 2016-4-20 21:01:10

卡在哪个函数?
我不知道cube的ADC是怎么样的,但是我来分析的话,有以下几点:
1、你是怎么触发ADC采集的,定时器触发ADC采集,还是软件触发ADC采集,如果只开启ADC的DMA功能,而没有开始转换的话,值是不会保存到temp中的.
2、cube库中有个函数叫CALLBACK函数,你必须要等到dma接收完成后,才开始串口打印吧,可以在串口接收callback函数中,定义一个标志位,当置位,才开始串口传输。

FoNg0716 发表于 2016-4-21 09:18:20

Paderboy 发表于 2016-4-20 20:56
刚好有这个板子。。。做了个工程,开了4个ADC 通道, PA0 PA1 内部温度和内部参考电压通道。。
测试结果



非常感谢你,试用你的工程,的确可以,参考你的程序,发现是回调函数标志问题,只不过这个为什么这么添加就不太有头绪,刚学用STM32。

FoNg0716 发表于 2016-4-21 09:21:06

wuwovicky 发表于 2016-4-20 21:01
卡在哪个函数?
我不知道cube的ADC是怎么样的,但是我来分析的话,有以下几点:
1、你是怎么触发ADC采集的 ...

正如你所说的,的确要在HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)增加标志,当标志位满足,默认为转换完毕,串口才开始发送转换数据。否则的话会卡在HAL_ADC_Start_DMA这个函数中。
如果不是楼上DEMO有比较,自己真不知道为什么还要再那里加个标志位。。。

Paderboy 发表于 2016-4-21 10:25:16

FoNg0716 发表于 2016-4-21 09:18
非常感谢你,试用你的工程,的确可以,参考你的程序,发现是回调函数标志问题,只不过这个为什么这么添加 ...

你应该多看看,HAL库里例程。。。

power568 发表于 2016-4-21 14:15:44

学习学习了...
cubeMx的确有好多地方需要注意...

liaocongyan-273 发表于 2016-7-31 16:12:07

非常好 谢谢分享

lsyswh 发表于 2017-1-7 18:02:09

感谢分享:)

suanmulin 发表于 2018-2-26 14:39:37

感谢分享
页: [1] 2 3 4
查看完整版本: 关于STM32的多路ADC+DMA采集的问题