芯片型号是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[0]>>8; tempLow = temp[0]; HAL_UART_Transmit(&huart1,&tempHigh,1,10); HAL_UART_Transmit(&huart1,&tempLow,1,10); tempHigh = temp[1]>>8; tempLow = temp[1]; 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 |
刚好有这个板子。。。做了个工程,开了4个ADC 通道, PA0 PA1 内部温度和内部参考电压通道。。
测试结果
整个工程。。
我不知道cube的ADC是怎么样的,但是我来分析的话,有以下几点:
1、你是怎么触发ADC采集的,定时器触发ADC采集,还是软件触发ADC采集,如果只开启ADC的DMA功能,而没有开始转换的话,值是不会保存到temp中的.
2、cube库中有个函数叫CALLBACK函数,你必须要等到dma接收完成后,才开始串口打印吧,可以在串口接收callback函数中,定义一个标志位,当置位,才开始串口传输。
非常感谢你,试用你的工程,的确可以,参考你的程序,发现是回调函数标志问题,只不过这个为什么这么添加就不太有头绪,刚学用STM32。
正如你所说的,的确要在HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)增加标志,当标志位满足,默认为转换完毕,串口才开始发送转换数据。否则的话会卡在HAL_ADC_Start_DMA这个函数中。
如果不是楼上DEMO有比较,自己真不知道为什么还要再那里加个标志位。。。
你应该多看看,HAL库里例程。。。
cubeMx的确有好多地方需要注意...