你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32MP135-DK】裸机开发

[复制链接]
andey 发布时间:2024-1-19 16:43
ST 提供了支持裸机开发环境,针对裸机开发还有专门的培训视频(【直播回放】轻松使用STM32MP13x-如MCU般在cortex A核上裸跑应用程序),培训视频中有详细的裸机开发调试的方法及如何做成可加载的SD卡启动镜像,我们参照培训视频的内容一步步熟悉理解针对STM32MP135开发板的调试方法,针对STM32MP135-DK开发的介绍可以参考该链接(https://wiki.stmicroelectronics.cn/stm32mpu/wiki/STM32MP135x-DK_-_hardware_description" R& h# {; U$ N& x0 y/ q

4 o3 u* I, [. G% }3 o
  • 裸机程序加载至SystemRAM 调试的方法' d, d: v: r% Q1 I9 E9 ]6 n
从ST 官网下载的软件包(https://www.st.com/en/embedded-software/stm32cubemp13.html),使用 STM32CubeIDE  导入STM32Cube_FW_MP13_V1.0.0\Projects\STM32MP135C-DK\Examples\UART\UART_Receive_Transmit_Console\STM32CubeIDE\工程编译OK后,将板子bootmode 设置成Engineering boot 模式,对应拨码如下:
2 x! e0 L9 Z3 g  I7 b
153_mode.png

# B8 z0 g* {7 E5 x8 R' U1 v* w# Y设置成Engineering boot 模式后,编译上面的工程直接debug 运行即可,发现程序已经按照熟悉的“MCU”调试方式运行起来,程序会在串口输出信息。
20240119-202906.gif

. `7 ]) W) V8 G4 V7 d; T
4 F; Q" k6 O- Q) s4 o
357.jpg
' t+ S2 }2 Y# K% S3 P& b, T$ E
这时debug 停住查看函数的调用栈信息,会发现栈内的LR返回地址为STM32MP135 片内的128K SystemRam 的地址空间,该空间还是比较紧凑的,调试个简单的程序可以在在SystemRAM中运行,大型的工程显然资源是不够的,正常MPU程序是运行在DDR中的,我们继续修改链接脚本让程序跑在DDR中这样就不会有资源的使用限制了。
20644.jpg

. y7 l6 M4 Y( j* \7 P" M1 ?
  • 配置工程在DDR中运行
    4 C" g0 v7 Z7 X% c
4 S5 P$ v: g+ Q+ S( R

3 x, Y$ L* ]7 F# w, X工程要运行在DDR中要保证DDR已经初始化好才可以,我们的工程是没有整个初始化处理的,我们可以加载软件包中的(STM32Cube_FW_MP13_V1.0.0\Projects\STM32MP135C-DK\Examples\DDR\DDR_Init\STM32CubeIDE)工程,按照之前的方法下载到SystemRam中运行初始化好DDR后,我们不给板子掉电重洗debug我们的工程即可。% q  M; [0 ~* m$ f

1 k4 P' |6 ~0 d2 q. N加载DDR 工程前我们需要修改工程的链接脚本,把程序编译链接到DDR空间,按照如下方式修改链接脚本即可。
  V. F* S  v; m" i$ o
32220.jpg
, ]7 y( K' n2 l% u
Debug config 下的startup 要删除这一句避免debug 触发cpu复位把DDR初始化处理reset 掉。

+ ~6 V: @' ]' b! I7 Z" T6 i% X
12350.jpg
预处理添加USE_DDR宏定义
19821.jpg
, A, |/ L, G2 F7 L
按照之前描述的先debug ddr_init 工程后断开ddr_init ,在denug 我们的测试工程验证,这时发现工程已经链接到0xc0xxx的DDR的地址空间了,程序已经加载到DDR中运行。
ddr_uart.jpg
1 Q! s" r8 U& D& ?% P' T
  • DDR镜像加载运行. A7 [# z$ B% U+ l0 s3 D$ K" w
我们上述的实验都是在Engineering boot 模式 运行,而且只能调试运行,断电重启后也不能正常运行,实际产品这种方法肯定是不行,ST支持做成image 文件从SD卡或者NOR FLASH启动,我们按照ST的说明将镜像加载到SD卡运行。" b# v8 m* J& u6 G6 V% ?
ST 从SD卡启动的程序需要在bin文件前追加512 byte 的header 才能被正常启动,对应的image header 的说明如下(https://wiki.stmicroelectronics.cn/stm32mpu/wiki/STM32_header_for_binary_files),ST 的软件包里提供了工具用于打包编译后的镜像文件,对应的脚本为postbuild_STM32MP13.sh  脚本使用方法如下:. S6 I% `( F: O! I$ w: e
  1. In STM32CubeIDE project you need to add the following line in the "Post-build steps" command in project Properties -> C/C++ Build -> Settings -> Build Steps :7 X  q$ ^5 P7 ]3 J! |( ^% H* @
  2. # D7 F5 y. x% X; \2 d/ ?# ?" @: B' @
  3.   ../[../]ImageHeader/postbuild_STM32MP15.sh  "${gnu_tools_for_stm32_compiler_path}" "${BuildArtifactFileBaseName}"7 O7 E& G( U  ^$ g! F
  4. or: s$ M6 s  x. z/ G1 |7 f4 W1 k& H
  5.   ../[../]ImageHeader/postbuild_STM32MP13.sh  "${gnu_tools_for_stm32_compiler_path}" "${BuildArtifactFileBaseName}"
复制代码

0 ^" N$ R1 t: G3 d; P( b+ P  |+ @" ~* n0 ]( i" @3 T5 B1 ]8 i
按照上面的说明在project Properties -> C/C++ Build -> Settings -> Build Steps : 追加Post-build steps 执行该脚本。
  1.   ../../../../../../../Utilities/ImageHeader/postbuild_STM32MP13.sh  "${gnu_tools_for_stm32_compiler_path}" "${BuildArtifactFileBaseName}"
复制代码

1 f, T3 p  r1 Q: h
post_build.jpg
: B1 M7 q& V/ h* ~" R8 K

/ f1 R) h1 x0 F添加命令后console 会有如下log 信息输出header 信息及,在编译路径下也会有对应的.stm32文件其在bin文件上携带了header信息。
header.jpg % ~: u5 @1 j/ u" n
3 f+ A, i# S" r! [% s6 s% I, ]
编译好了app 程序镜像就可以打包生成SD卡可以启动的镜像文件了,ST 提供了External_Loader 工具用于打包镜像文件。我们将编译好的携带header 信息的UART_Receive_Transmit_Console_A7.stm32文件拷贝至\stm32-mp135\STM32Cube_FW_MP13_V1.0.0\Projects\STM32MP135C-DK\External_Loader\SD_Ext_Loader 路径下。
8 R5 q1 o) q+ Q: X4 s: o同时修改该路径下的FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv 文件更新要下载的app文件+ R9 O( Y& H9 N' U, z$ k( I
uart_stm32.jpg
  v' {" ~# E1 P* X4 {8 B
- X/ K$ `. O0 E6 J7 n5 s' q3 C( S
一切就绪我们将板子的启动模式切换为 下载模式,对应拨码如下:
mode0000.jpg

  Y, u; u* i% T! M0 C9 C' h8 u. r( c+ g! d& k- r+ D9 m
我们通过  STM32CubeProgrammer  通过uart 将镜像下载至sd卡,下载前要将SD卡格式化下避免镜像制作启动失败。
20240119-220555.gif

- v+ I! j# x7 N6 u5 _5 N! kSD卡启动镜像制作完成后,我们将板子的启动模式切换为SD卡启动。
mode_sd.jpg
; L, K) N  l& z' a% t* I$ O

/ ]1 G5 o7 a' @6 l/ z
切换后板子启动正常,此时断电重启后程序也是能够正常运行,至此我们的基于SD卡启动加载至DDR运行的验证已经ok了。
1 m4 ?9 z5 J3 @/ d
$ z# h' m9 \3 V: o& _

8 g- _4 L2 o* |' ?

& o8 ^, T+ I7 d7 w
/* 资料分割线 */
' N* p- }2 u! I" x
STM32MP13x-ST新一代通用工业级MPU,超高性价比.pdf (3.44 MB, 下载次数: 25)
收藏 评论3 发布时间:2024-1-19 16:43

举报

3个回答
STMCU-管管 回答时间:2024-2-4 10:44:18
感谢分享和资料整理
1 q  A8 e  @$ [; ]
h12121 回答时间:2024-2-4 13:03:24
STM32Header编译出错又遇到過嗎
$ T5 c$ W8 {0 W. {. R: H: W
y369369 回答时间:2024-2-4 13:05:08

h12121 发表于 2024-2-4 13:03
STM32Header编译出错又遇到過嗎

坛子里有解决方法

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版