硬汉嵌入式论坛

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

[STM32H7] 相同代码,为何h757 无法启动, H750启动正常

[复制链接]

9

主题

85

回帖

112

积分

初级会员

积分
112
发表于 2023-2-1 11:14:05 | 显示全部楼层 |阅读模式
本帖最后由 szjdb 于 2023-2-1 11:22 编辑

硬汉哥及众兄弟新年好!
最近自己做了块实验板,分别装了H750和H757 各一片。发现一个非常奇怪现象。 自己的测试程序,H750能正常启动,H757可正常下载代码到外部QSPI flash, 但KEIL下仿真,复位后无法执行到MAIN函数,仅停留在 SystemInit 启动函数。测试内核电压仅仅1V, 正常启动应该是1.2V.  
我是把757当做750使用,所以测试代码针对两个芯片未改一字,且两芯片内核供电都使用LDO, 硬件反复检查,确认没有问题。代码是放在外部QSPI FLASH的。我理解的启动过程,H7复位后执行 system_stm32h7xx.c 中的 void SystemInit (void) , 然后用内部时钟低速运行,加载C库等直到运行MAIN函数,重新配置PLL等参数,才全速运行。按理说运行到MAIN应该毫无难度呀。
但为何757启动失败呢?


还请众神不吝赐教!
多谢各位!

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2023-2-1 11:22:06 | 显示全部楼层
问题描述的不清晰,我们抓不到核心,核心问题是不是H757硬件没问题,就是下载程序到外部QSPI FlASH无法仿真运行?
回复

使用道具 举报

9

主题

85

回帖

112

积分

初级会员

积分
112
 楼主| 发表于 2023-2-1 11:32:23 | 显示全部楼层
多谢硬汉哥。
是的,757可下载代码到QSPI, 但无法启动。
忘了说一个情况,我还移植了网友的一个LTDC刷屏例子,代码都是下载到QSPI的,两块板又能正常下载仿真,显示也正常,所以确认硬件是相同的,无故障。但到我自己的代码就不行了。非常奇怪的是757无法运行到MAIN, 每次下载完代码连接到KEIL仿真,就停在SystemInit, 可单步运行,但运行完装载MAIN地址后,又跳回到 SystemInit ,及不知为何又复位了。
不知该往那个方向去查问题。

望不吝赐教!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2023-2-1 15:11:29 | 显示全部楼层
szjdb 发表于 2023-2-1 11:32
多谢硬汉哥。
是的,757可下载代码到QSPI, 但无法启动。
忘了说一个情况,我还移植了网友的一个LTDC刷屏 ...

你自己的程序问题,仅从你的描述,看不出问题来。

但是你说的仿真问题,这个是正常的 ,进入调试状态瞬间,芯片会运行一次,你的程序此时估计已经卡死了
回复

使用道具 举报

9

主题

85

回帖

112

积分

初级会员

积分
112
 楼主| 发表于 2023-2-1 15:57:35 | 显示全部楼层
多谢硬汉哥热心解答。
如此说来应该跟芯片有关吧? 因为相同代码启动750是没有问题的。在某种情况下,757不能完全当做750使用,必须替换 startup_stm32h750xx.s文件为startup_stm32h757xx.s , 我试试看。
回复

使用道具 举报

8

主题

157

回帖

181

积分

初级会员

积分
181
发表于 2023-2-1 20:17:51 | 显示全部楼层
eric2013 发表于 2023-2-1 15:11
你自己的程序问题,仅从你的描述,看不出问题来。

但是你说的仿真问题,这个是正常的 ,进入调试状态 ...

你真是好心劲,不知道是不是心态磨平摩麻了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2023-2-1 20:59:21 | 显示全部楼层
yunqi 发表于 2023-2-1 20:17
你真是好心劲,不知道是不是心态磨平摩麻了

技术类的问题,有时候还是喜欢和大家讨论下,很多时候我也能从大家哪里学习到很多东西
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2023-2-1 21:01:04 | 显示全部楼层
szjdb 发表于 2023-2-1 15:57
多谢硬汉哥热心解答。
如此说来应该跟芯片有关吧? 因为相同代码启动750是没有问题的。在某种情况下,757 ...

使用CubeMX可以方便的对比细节区别(有个比较选项),一般的应用应该区别不大。
回复

使用道具 举报

9

主题

85

回帖

112

积分

初级会员

积分
112
 楼主| 发表于 2023-2-2 16:08:46 | 显示全部楼层
多谢硬汉哥这么晚还在回复。
试了更换757.s 文件, 现象依旧。 我的代码还是在进入仿真时进入不了main函数。运行到main有什么条件吗?  目前main 和 RCC函数等是放到FLASH的,其他H7库是放到QSPI , 启动时的代码初始化了QSPI. 对比可以运行750和 757的工程,.S和启动文件都更换为相同版本,还是不行。甚至尝试将main 改为仅仅初始化时钟就开始while等待,也不行。好像此时QSPI里有代码就不行, 无法启动到main时如果中断,可以看到堆栈里面有scatterload 函数,难道是部分库被自动存放在QSPI, 而加载时QSPI还未初始化? 为何相同代码750完全没有问题?
非常非常古怪的问题。

还有什么方向可以查找?
还望不吝赐教,多谢了!
scatterload.jpg
回复

使用道具 举报

9

主题

85

回帖

112

积分

初级会员

积分
112
 楼主| 发表于 2023-2-2 17:44:12 | 显示全部楼层
补充下信息,我查了0X90005A7A 好像是跟启动解压缩有关,不知为何被分配到QSPI了。如图。 是不是此时QSPI还没有初始化? QSPI应该在哪里初始化才能避免这种问题?
多谢!
0x9005a7a-n.jpg
回复

使用道具 举报

9

主题

85

回帖

112

积分

初级会员

积分
112
 楼主| 发表于 2023-2-3 13:39:29 | 显示全部楼层
解决问题。就是把上面文件放回到FLASH即可。 看来757和750实际是两种核心。
再次多谢硬汉哥和兄弟们!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 21:12 , Processed in 0.337125 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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