硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1232|回复: 5
收起左侧

[其它] 遇到一个奇怪的死机问题,一连接jlink程序就运行,不连接,单独上电不运行

[复制链接]

23

主题

72

回帖

141

积分

初级会员

积分
141
发表于 2024-8-1 22:14:58 | 显示全部楼层 |阅读模式
今天在STM32F7上面调试网络交换芯片,遇到一个很奇怪的死机问题,现象:
1,jlink调试运行程序运行正常;
2,拔掉jlink,重新上电程序就死了。但是只要连接上jlink,用JLNIK RTT点一下连接,程序就运行,这时候jlink并没有发送复位;
3,把网络初始化代码屏蔽,下载进去就可以随便正常上下电运行。排查到网络初始化时候每次运行到交换芯片复位管脚,拉低 hal_delay(20ms) 再拉高hal_delay(50ms)这里不在执行了,把这个复位逻辑移动到网络初始化外部,再屏蔽掉网络初始化,依然死机,但是把复位逻辑的hal_delay(xx)屏蔽掉,又能正常运行。
4,然后恢复之前代码,把网络初始化中的复位代码,再屏蔽,还是死机。
5,结论,感觉跟这个复位交换芯片的代码逻辑有关,又好像没关系,找不到方向了。

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-8-2 00:52:33 | 显示全部楼层
这一条“jlink调试运行程序运行正常;” 实际上已经说明了,你的程序里面大概率存在有外设的延迟时间没有正常运行的问题。

你后面的现象更是印证了这点。可以考虑板子上电运行后,延迟2秒再访问交换芯片,并且硬件复位后,再软件复位下这个芯片试试。
回复

使用道具 举报

23

主题

72

回帖

141

积分

初级会员

积分
141
 楼主| 发表于 2024-8-2 08:46:35 | 显示全部楼层
eric2013 发表于 2024-8-2 00:52
这一条“jlink调试运行程序运行正常;” 实际上已经说明了,你的程序里面大概率存在有外设的延迟时间没有正 ...

但是有一个现象不是很理解 ,我单把复位逻辑那段代码,移到网络初始化外部,还是死机,网络初始化这时已经屏蔽掉的,这时候程序并没有访问交换机芯片,也没有初始化MCU的eth mac,只是简单的拉了一个交换机reset管脚执行复位,为啥也会死机呢,还有就是我连jlink rtt只要点连接程序就会运行,这个点连接时候swd也不会复位芯片,为啥程序就能运行呢?求指点
回复

使用道具 举报

23

主题

72

回帖

141

积分

初级会员

积分
141
 楼主| 发表于 2024-8-2 11:21:54 | 显示全部楼层
结贴,问题出在HAL_Delay上面,之前移植V7里面的bsp_dwt,把Hal_Delay 用bsp_delay_us重新定义了。发现这个delay好像没有jlink连接时就会卡死。用HAL 库的就正常了
回复

使用道具 举报

23

主题

72

回帖

141

积分

初级会员

积分
141
 楼主| 发表于 2024-8-2 11:22:00 | 显示全部楼层
结贴,问题出在HAL_Delay上面,之前移植V7里面的bsp_dwt,把Hal_Delay 用bsp_delay_us重新定义了。发现这个delay好像没有jlink连接时就会卡死。用HAL 库的就正常了
回复

使用道具 举报

23

主题

72

回帖

141

积分

初级会员

积分
141
 楼主| 发表于 2024-8-2 12:04:09 | 显示全部楼层
找到问题了,时F7 dwt需要解锁
如下配置即可
  CoreDebug->DEMCR|= CoreDebug_DEMCR_TRCENA_Msk;
  DWT->LAR = 0xC5ACCE55;
  // Clear CYCCNT
  DWT->CYCCNT = 0;
  // CYCCNT counter enable
  DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-29 03:01 , Processed in 0.561177 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表