硬汉嵌入式论坛

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

[STM32H7] 【求助】STM32H750 代码从外部SPI 搬运到ARM 并运行

[复制链接]

3

主题

23

回帖

32

积分

新手上路

积分
32
发表于 2024-8-15 17:10:21 | 显示全部楼层 |阅读模式
由于STM32H750 的内部flash 只有一个扇区并且擦除的过程中没法运行代码,但是板卡外面没有接QSPI flash ,只接了一片普通的SPI flash,将外部 SPI 的程序搬运到 内部RAM 的话,有以下几个疑问:搬运到那个区域了,
回复

使用道具 举报

3

主题

23

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2024-8-15 17:12:04 | 显示全部楼层
有以下几个疑问:
1. 搬运到那个区域 比较好?
回复

使用道具 举报

3

主题

23

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2024-8-15 17:17:37 | 显示全部楼层
1. 搬运到那个区域比较?

2. 运行的时候,外设重新配置是否有问题?
3. 这个思路有没有可行性?
回复

使用道具 举报

4

主题

120

回帖

132

积分

初级会员

积分
132
发表于 2024-8-15 17:31:54 | 显示全部楼层
好像得用threadx module,不然一般的方法,调用函数的位置这些不好搞
回复

使用道具 举报

4

主题

120

回帖

132

积分

初级会员

积分
132
发表于 2024-8-15 17:32:57 | 显示全部楼层
STM32H750 可以当初STM32H743用的,论坛里有方法
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-8-15 18:33:20 | 显示全部楼层
这个之前做过一个例子,可以参考

制作了一个通过BOOT复制APP程序到AXI SRAM运行的案例,适合H750,H7B0玩
https://www.armbbs.cn/forum.php? ... 2748&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

10

主题

52

回帖

82

积分

初级会员

积分
82
发表于 2024-8-16 09:37:45 | 显示全部楼层
是可以的,1、不过一个项目的话,需要把依赖的函数都放在RAM中,才能擦除flash。2、或者想硬汉哥的帖子,做成两个项目,需要的时候,复制到RAM中运行。3、我理解的是你要把程序放在RAM中运行,你可以建项目的时候该链接文件,改到RAM的地址,然后改到哪里你就复制到哪里
回复

使用道具 举报

3

主题

23

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2024-8-16 10:36:57 | 显示全部楼层
quanshimutou 发表于 2024-8-16 09:37
是可以的,1、不过一个项目的话,需要把依赖的函数都放在RAM中,才能擦除flash。2、或者想硬汉哥的帖子,做 ...

是的,修改IROM 和 IRAM 的地址,让编译器帮我链接,这样我就不用自己去写链接脚本。
回复

使用道具 举报

3

主题

23

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2024-8-16 10:42:14 | 显示全部楼层
eric2013 发表于 2024-8-15 18:33
这个之前做过一个例子,可以参考

制作了一个通过BOOT复制APP程序到AXI SRAM运行的案例,适合H750,H7B0 ...

感谢硬汉哥,还请教几个问题:
1. 如果我把程序放在0x20000000 区域,业务功能是需要用到DMA1,是DCMI 到一个buffer,只要我的buffer 的地址不在 0x20000000 区域,就没问题吧;
2. 程序放在 0x20000000,MPU 改怎么配置了?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-8-17 09:35:23 | 显示全部楼层
shan 发表于 2024-8-16 10:42
感谢硬汉哥,还请教几个问题:
1. 如果我把程序放在0x20000000 区域,业务功能是需要用到DMA1,是DCMI  ...

1.  没问题。
2、地址为0x2000 0000的DTCM,不要配置MPU/Cache,他的主频和CPU主频,Cache主频一样,不需要配置。
回复

使用道具 举报

3

主题

23

回帖

32

积分

新手上路

积分
32
 楼主| 发表于 2024-8-19 19:06:19 | 显示全部楼层
目前将APP 代码转换成 数字后编译到BOOT 程序里面,实现了跳转,之前我的BOOT 代码是用 AC6 编译编译的,硬汉哥的代码是AC5 编译的,换成AC6 失败了,还在找原因;
AC6 编译的代码,跳转APP 汇编代码如下:

跳转的位置是 SP 指针 + 0x10 地址的值
AC5 编译出来的汇编代码,类似下图:


还有就是,AC5 编译后的代码,__set_CONTROL(0); 语句这里是可以打断点的,但是AC6 编译出来的不行

接下来打算,先把从spi 读程序,搬运到0x20000000 里面运行跑通了,在看看用AC6 的话,这个代码要怎么写
(顺便问一句,有大佬用AC6 编译器实现了BOOT 程序吗 ?)

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-8-20 09:40:02 | 显示全部楼层
shan 发表于 2024-8-19 19:06
目前将APP 代码转换成 数字后编译到BOOT 程序里面,实现了跳转,之前我的BOOT 代码是用 AC6 编译编译的,硬 ...

AC6的话,估计是这个原因吧。

第3个

初步确诊MDK AC6的0级优化是个大坑,玩不顺手的话,慎用(2022-10-23)
https://www.armbbs.cn/forum.php? ... id=99584&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-29 05:12 , Processed in 0.939299 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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