NXP的KEAZ64单片机上电不启动,第二次Debug恢复正常

问题描述

NXP的KEAZ64单片机上电不启动,需要用调试器进入Debug模式,且首次Debug中断不触发,第二次以后功能才恢复正常

首次Debug中断不触发,但reset引脚接地,中断功能恢复

问题排除

1. 供电

怀疑供电电路有问题,电压异常或者波动较大。

* 示波器观察供电是否有波动,电源是否能在短时间内达到稳定(大概5ms内),见第2步

* 供电电路如下,左端输入,右端输出3.3V,C4电容两端飞线,直流电源直供3.3V,单片机依旧无法启动

2. 复位电路

既然首次Debug,中断不触发时,按一下复位键就会正常,那会不会是复位引脚电平的问题,用示波器查看VCC(蓝色)reset(红色)引脚,看瞬时电平变化,如下图

 分析:大概3ms电压温度,依旧很正常,排除复位引脚问题

3. 晶振未启震

3.1 外部晶振未启震

晶振输出引脚飞线,用示波器捕获波形

分析:晶振在上电后,立刻开始工作,晶振应该没有问题

3.2 使用内部晶振

切换外部晶振为内部晶振(注意使用到的外设时钟全部需要重新修改)

分析:切换为内部晶振后,上电依旧无法启动;难道是引导加载出了问题,未从0x0开始,查看RAM配置

 

4. RAM分配,程序加载

Generate linker file配置如下:

 分析:m_interrupts地址为0x0,依旧正常;所有配置都没有问题,这就奇怪了,难道是MCU自己的问题。

5. 更换MCU

经过测试MCU没有问题,Debug模式都能调试,MCU不应该有问题。分析程序内容。

6. 程序调试

6.1 Debug单步调试

发现程序进入了NMI中断

 问题大概就是这里,然后分析为什么会进入NMI中断

6.2 进入NMI错误中断

NMI 是ARM Cortex-M 架构特殊的中断,NMI描述为:NMI功能在复位时启用,这意味着如果引脚上有“某物”将信号拉低(NMI处于低激活状态),处理器将持续触发NMI中断,并且不会启动

硬件原理图

 

   

分析

CH_5直接连GND了,而且电阻不大,直接将NMI引脚拉低了,经过测试,在未进入main()函数时,就会触发NIM中断,在main()函数中在设置屏蔽NMI中断已经来不及了;

直接在NMI中断处理函数中,屏蔽NMI中断,搞定!!!

 

posted @ 2023-09-08 16:12  硕果磊磊  阅读(342)  评论(0)    收藏  举报