网站首页 > 文章精选 正文
调试的时候正常,但是断电后再次上电就不能正常运行,然后用jlink的Start Application功能后又正常了。
问题详细描述
项目中需要模拟曲轴和凸轮轴信号给ECU使用,选用的是S9KEAZ64芯片,利用定时器翻转IO,以便模拟两个轴的信号。开发调试的时候一切正常,但是断电后再次上电发现只有一个轴有信号,另一个轴的GPIO 没有电平翻转,使用jlink的Start Application功能后又正常了。
问题具体分析
1、尝试再次刷写程序,刷写后正常,然后再次断电复位,问题复现。
2、断电后用jflash工具connect一下,然后disconnect,发现两个IO的信号都正常,于是怀疑是复位的问题,手动把RESET引脚拉低复位,复位后,问题存在。
3、最后,我们怀疑是硬件电路导致的。刚开始上电,IO电平被钳住了,于是把串联在IO上面的电阻拆掉,发现问题依然存在,然后我利用板子上的另外两个GPIO的测试点来模拟,发现断电重启没有这个现象,于是怀疑原来使用的GPIO是否还有其他功能,如在用jflash工具调试的时候,还是通过SWD发送了一些命令,这些命令使得芯片进入某种模式,进入这个模式后,对应的GPIO就能正常操作了。
4、观察硬件电路:
发现PTB4有一个功能是NMI不可屏蔽中断,而且这个IO的默认功能就是NMI功能而不是GPIO:
这个就相当于SWD JTAG类似的引脚,我们需要先使能复用?才能正常使用这个IO,在网上搜索S9KEAZ64的NMI,在这里
https://blog.csdn.net/bjxdbz/article/details/109909037找到了答案:需要先屏蔽NMI中断,才能正常使用PTB4的GPIO功能:
于是在main函数最前面加上相关代码:SIM_SOPT0 &= ~(1<<1);// 屏蔽NMI中断,这样PTB4才能作为GPIO使用
再次编译下载,一切正常。
问题解决方案
首先检查代码中有哪些初始化操作没有完成,如有什么断开了,但是没有中断服务函数。
然后排查硬件问题,在开发板上面验证相关功能,或者把IO独立出来,排除硬件问题。
在使用特殊GPIO的时候,比如SWD JTAG NMI相关的GPIO,一定要先使能其复用?功能。
总结和建议
遇到问题先冷静思考下,否则在问题解决后,再来回想自己的解决过程,发现很多过程都是没有依据的。
猜你喜欢
- 2025-07-14 Cortex-M3内核进阶之注解 startup.s 文件
- 2025-07-14 【教程】一文搞懂STM32启动文件(stm32f4启动文件区别)
- 2025-07-14 如何使用GCC手动编译stm32程序(stm32 gcc printf)
- 2025-07-14 BB是报警的声音(bb响报警应该设置多少)
- 2025-07-14 深度长文:STM32是如何软硬件结合,编译后怎么样一步步运行起来
- 2025-07-14 年轻的朋友速来看教你一招电脑蓝屏详解
- 2025-07-14 电脑蓝屏代码大全和解决方法(电脑蓝屏代码大全及解决方案)
- 2025-07-14 电脑蓝屏代码大全(电脑蓝屏代码大全图表)
- 2025-07-14 BIOS报警声解译(bios报警声音大全)
- 2025-07-14 读取时间的速度(读取速度和什么有关)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)
- fmt.println (52)