
关于STM32Cubemx 6.15版本生成工程的文件编码的问题
如何解决用CubeMX生成代码时会将main.c文件中的汉字变成乱码的问题?
STM32CUBE MX无法安装,每次总是卡在最后一步
STM32F103C8T6使用CubeIDE烧录运行报硬件错误,相同代码MDK烧录却可以正常运行
STM32F103C8T6 TIM1 CH2输入捕获触发DMA的问题
STM32G474使用HRTIME完成两路180度移相问题
STM32G474RET6移相问题
CUBEMX界面汉化有吗?
STM32会存在单个IO口坏掉的情况吗?
STM32部署机器学习算法硬件至少要使用哪个系列的芯片?
不过,你确认下是否同时开启了ADC事件的中断和DMA传输中断,若都开启了是否都有相应的中断服务程序。
如果按CubeMx创建工程来的话,相应中断都会有基本的中断服务代码和预留回调接口,至少不用担心标志位的清零这些。
我担心的就是你并没有沿用相关代码而是自行组织的,自己又只写了部分服务代码。当然,自行组织中断服务程序
是完全可以,要注意写的中断服务代码弄完整,别只处理DMA传输中断却忘却了ADC转换中断。 当然,这只是些
提醒,你自己再慢慢排查确认。
看起来你是用了注入模式,可以用HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc) 回调函数。
不过要注意你是否是混合模式,如果是的话可以用 HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *AdcHandle)
试试看是否能执行。
这个官方库中有类似的例程可以参考。
为什么要在ISR里面执行while循环?
先别管这个问题,我程序对实时要求性不高,而且后续需要调用这个数组,不判断得话跑太快程序要出错。
[md]你呆在ISR里面都不出来,你让比他低优先级的任务怎么中断?比方说你的ADC有没有可能优先级比你这个低?
即便是必须要实时性,也可以做个大循环。在这里只需要设置一个标记就成了。
你的回调用错了,用HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);这是转换完成的中断
看回调函数不像是ADC的中断回调?
他应该是比较器中断了之后,触发ADC进行几次采集,采集完了再退出ISR。应该是ADC的优先级比这个低了。但这样操作其实很危险。ISR长期退不出。如果开了看门狗,分分钟歇菜。
[md]你说中断优先级这个问题其实我做的时候就考虑到了,但是为了以防万一,我刚才还是把while放大循环了试了下。不过还是卡死在while,处于busy状态,在ADC传输中断和DMA传输完成中断打得断点也没能进入
我为了省功耗。采用的比较器触发ADC_DMA采样。所以这个是比较器中断函数,在比较器里面进行ADC_DMA传输。但是传输之后DMA一直处于忙状态
[md]理解,你看一下你ADC和COMP的优先级分别是多少?