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

【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! q$ d* d  N' {2 H! P9 u. g' K0 S5 ?
' r, i+ e$ D- R" ^1 G0 L4 V! x4 }
  • 裸机程序加载至SystemRAM 调试的方法! _1 ]7 {, f7 X% J- m
从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 模式,对应拨码如下:% ~9 s4 M: p7 E) e" @* i+ o/ W- i) f
153_mode.png

1 g0 h* ]1 d$ g  }3 E设置成Engineering boot 模式后,编译上面的工程直接debug 运行即可,发现程序已经按照熟悉的“MCU”调试方式运行起来,程序会在串口输出信息。
20240119-202906.gif

" b  H( t; k" o1 N! U4 C% ]
7 }* e, D$ B+ n$ U
357.jpg
) ?: [, S2 [& j* d$ W& p2 ]1 V
这时debug 停住查看函数的调用栈信息,会发现栈内的LR返回地址为STM32MP135 片内的128K SystemRam 的地址空间,该空间还是比较紧凑的,调试个简单的程序可以在在SystemRAM中运行,大型的工程显然资源是不够的,正常MPU程序是运行在DDR中的,我们继续修改链接脚本让程序跑在DDR中这样就不会有资源的使用限制了。
20644.jpg
% y# I) _6 S5 C0 p. n
  • 配置工程在DDR中运行* C: p+ X  M8 C; C- n5 u" Y5 w

! l6 d9 J4 F0 L( h9 j. {
$ A9 j8 H3 l. ~' @工程要运行在DDR中要保证DDR已经初始化好才可以,我们的工程是没有整个初始化处理的,我们可以加载软件包中的(STM32Cube_FW_MP13_V1.0.0\Projects\STM32MP135C-DK\Examples\DDR\DDR_Init\STM32CubeIDE)工程,按照之前的方法下载到SystemRam中运行初始化好DDR后,我们不给板子掉电重洗debug我们的工程即可。+ }1 v' y2 m/ d: `* j1 a
# G* h) \4 X  L; l* d
加载DDR 工程前我们需要修改工程的链接脚本,把程序编译链接到DDR空间,按照如下方式修改链接脚本即可。
4 C  A( ]  r+ d" t, q# K
32220.jpg
, k5 C$ s* Y2 ^
Debug config 下的startup 要删除这一句避免debug 触发cpu复位把DDR初始化处理reset 掉。

; J, A/ ]4 }, o' t. H6 ?$ _
12350.jpg
预处理添加USE_DDR宏定义
19821.jpg

9 F8 u& G2 G1 Z( X4 W" L
按照之前描述的先debug ddr_init 工程后断开ddr_init ,在denug 我们的测试工程验证,这时发现工程已经链接到0xc0xxx的DDR的地址空间了,程序已经加载到DDR中运行。
ddr_uart.jpg

0 z  q4 }. e' n$ e# W; ?
  • DDR镜像加载运行
    $ c  A/ m* U/ x% q8 L
我们上述的实验都是在Engineering boot 模式 运行,而且只能调试运行,断电重启后也不能正常运行,实际产品这种方法肯定是不行,ST支持做成image 文件从SD卡或者NOR FLASH启动,我们按照ST的说明将镜像加载到SD卡运行。+ c. B( ?& V; p( W( m0 ]/ `
ST 从SD卡启动的程序需要在bin文件前追加512 byte 的header 才能被正常启动,对应的image header 的说明如下(https://wiki.stmicroelectronics.cn/stm32mpu/wiki/STM32_header_for_binary_files),ST 的软件包里提供了工具用于打包编译后的镜像文件,对应的脚本为postbuild_STM32MP13.sh  脚本使用方法如下:2 j, S+ C3 ?0 C6 u+ Z2 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 :
    : S+ |5 V" K6 y9 x* d, Y

  2. $ T: C4 @( J2 G  s+ a" Q/ S
  3.   ../[../]ImageHeader/postbuild_STM32MP15.sh  "${gnu_tools_for_stm32_compiler_path}" "${BuildArtifactFileBaseName}"
    $ U( Z! \! Z# e9 U0 H9 l
  4. or# Z$ v+ c4 Y2 X
  5.   ../[../]ImageHeader/postbuild_STM32MP13.sh  "${gnu_tools_for_stm32_compiler_path}" "${BuildArtifactFileBaseName}"
复制代码

0 n, ]1 m* ^4 h
5 S! t- m0 @# K. Z) a- q% H按照上面的说明在project Properties -> C/C++ Build -> Settings -> Build Steps : 追加Post-build steps 执行该脚本。
  1.   ../../../../../../../Utilities/ImageHeader/postbuild_STM32MP13.sh  "${gnu_tools_for_stm32_compiler_path}" "${BuildArtifactFileBaseName}"
复制代码
8 K! ^; b7 y5 {4 P; s" D
post_build.jpg

6 u6 v8 e+ Z! v- X) k1 C$ Z: }+ A" A3 R
添加命令后console 会有如下log 信息输出header 信息及,在编译路径下也会有对应的.stm32文件其在bin文件上携带了header信息。
header.jpg
9 p! U/ B9 X6 D$ Q# G
4 D4 n1 p: W# C# `+ o3 m
编译好了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 路径下。5 [8 i9 F: v/ Z' f
同时修改该路径下的FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv 文件更新要下载的app文件
7 K: _4 y6 H2 T6 j3 S( y
uart_stm32.jpg

3 b' j  h; t* ?9 v7 ~+ D9 e5 ^/ O" M1 V0 C
一切就绪我们将板子的启动模式切换为 下载模式,对应拨码如下:
mode0000.jpg
# c0 G, N% {$ N- E* C) |: Y
3 P$ S( |1 y8 \! j: L% p
我们通过  STM32CubeProgrammer  通过uart 将镜像下载至sd卡,下载前要将SD卡格式化下避免镜像制作启动失败。
20240119-220555.gif
; H: e4 ?" S8 l9 n2 j$ R' ~9 e* B
SD卡启动镜像制作完成后,我们将板子的启动模式切换为SD卡启动。
mode_sd.jpg
& F) a6 i( S! ]' |, Y% A
. ~, [0 H" ]* l' C' }& `& i; x1 Y
切换后板子启动正常,此时断电重启后程序也是能够正常运行,至此我们的基于SD卡启动加载至DDR运行的验证已经ok了。
% o+ M' y8 {  z7 W
$ v$ D6 [1 E7 k0 n

' T$ r$ C0 {3 T- V! r: i

  K/ h0 p9 y# c
/* 资料分割线 */

0 [3 E% m* o' M- i! v
STM32MP13x-ST新一代通用工业级MPU,超高性价比.pdf (3.44 MB, 下载次数: 44)
收藏 评论3 发布时间:2024-1-19 16:43

举报

3个回答
STMCU-管管 回答时间:2024-2-4 10:44:18
感谢分享和资料整理
1 T3 i- z8 M) }
h12121 回答时间:2024-2-4 13:03:24
STM32Header编译出错又遇到過嗎& n" O7 g' @2 D+ U& k* F6 S, n
y369369 回答时间:2024-2-4 13:05:08

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

坛子里有解决方法

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版