|
本人用stm32CubeMX构建了stm32f407vet6程序,其中用TIM2启动ADC,通过DMA传送AD值。再用Keil开发应用程序,有用while语句等待指定时长的步骤,具体是在定时器中计数,达到设定值就结束等待,程序如下: Sec=0; while(Sec<xx); 现在奇怪的是只要在while语句前用HAL_ADC_Start_DMA函数启动了DMA,则while就无法结束了,明明Sec在定时器中正常计数了,而且通过开发工具也确认其值超过了指定值,但while就是无法结束,程序也无法往下运行。用各种方法都试了,包括用无限for循环在其中判断Sec,结果一样。而只要不调用HAL_ADC_Start_DMA或在while语句之后调用就没问题,请问这是什么缘故?很怀疑是编译器或芯片有bug,不知然否。 |
使用CUB进行调试或者下载固件时候均出现下面的报错,使用的工具是J-LINK,尝试重新给工具上电,重启IDE,重启电脑,更新配置均是一样问题点,请问这个是为什么呢
keil有什么调试方法可以追踪链表被破坏的地方吗
STM32H743使用Keil V6(AC6)编译FreeRTOS报错__forceinline未定义及CMSIS-RTOS2配置错误,如何解决?
STM32L010F4P6的ADC多通道采集,采用扫描+DMA的方式,采集到不同通道的值会一起变化
STM32U385的PB1引脚设置推挽输出,外部接电阻上拉时,断掉MCU的电源,MCU仍然运行的问题
CubeMX lwip支持的phy芯片型号只支持一个吗?
stm32n657的TIM8定时器
stm32 usb hid设备能发数据给PC,但不能接收PC的数据!!!
无法通过 SPI 读取 TCD1304数据
MotorControl Workbench 6.4.1 生成 FOC 项目代码后运行死机。
微信公众号
手机版
问题已解决,应把AD的连续转换模式禁用。
Sec定义前加volatile 试试?
也可以顺便说说你使用的各种方法,这样避免别人重提你试过的方法。
另外,建议你将sec定义为 volatile. 假设没有这样定义的话。
还有就是,是否有中断优先级方面的问题。比方DMA中断发生了又没处理而频繁进入,TIMER中断却无法响应?
还有,代码优化等级别太高。
与HAL_ADC_Start_DMA相关的一个怪异问题
那个Sec已经定义为volatile了。定时器中断肯定没问题,都能跟踪进去,Sec也一直在正常计数。没使用代码优化。
如您愿意,我可以把源代码都发给您。
加了,没用。