ZBLOG

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位void Delay_us(uint32_t xus) { SysTick->LOAD = 72 * xus; //设置定时器重装值 SysTick->VAL = 0x00; //清空当前计数值 SysTick->CTRL = 0x00000005; //设置时钟源为HCLK,启...

根据你提供的代码,使用SysTick定时器进行延时。在正常情况下,while循环会等待计数器达到0,然后退出。如果卡在while循环中无法退出,可能是以下原因之一:

  1. 定时器未正确配置:请确保已正确配置SysTick定时器相关寄存器(LOAD、VAL和CTRL)的值。特别注意设置加载值(LOAD)是否符合预期。

  2. 中断优先级问题:SysTick定时器使用了系统的中断服务例程,如果其他中断优先级较高或未正确配置优先级,可能导致中断嵌套问题。请检查并调整其他中断的优先级。

  3. 系统主频设置错误:SysTick定时器的计数频率取决于系统主频的设置。确认系统主频是否与实际相匹配,并检查是否正确初始化了系统时钟。

  4. 使用了阻塞操作:如果在延时函数内部执行了需要等待的操作(例如IO读写或者其他长时间处理),那么while循环将无法退出。确保延时函数内部没有类似阻塞操作。

  5. 其他硬件故障:在极少数情况下,硬件故障可能导致计数器无法正常工作。请仔细检查硬件连接和电路元件,并确保没有其他硬件问题。

为了确定具体原因,可以通过调试工具、打印输出或逐行调试来验证代码的正确性。同时也建议参考开发板或芯片手册,确认相关寄存器和定时器配置是否正确。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=14859

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?