
ST 提供了支持裸机开发环境,针对裸机开发还有专门的培训视频(【直播回放】轻松使用STM32MP13x-如MCU般在cortex A核上裸跑应用程序),培训视频中有详细的裸机开发调试的方法及如何做成可加载的SD卡启动镜像,我们参照培训视频的内容一步步熟悉理解针对STM32MP135开发板的调试方法,针对STM32MP135-DK开发的介绍可以参考该链接(https://wiki.stmicroelectronics.cn/stm32mpu/wiki/STM32MP135x-DK_-_hardware_description)
![]() 设置成Engineering boot 模式后,编译上面的工程直接debug 运行即可,发现程序已经按照熟悉的“MCU”调试方式运行起来,程序会在串口输出信息。 ![]() 3 w" W* z- I" _; J2 ^; y& g ![]() 这时debug 停住查看函数的调用栈信息,会发现栈内的LR返回地址为STM32MP135 片内的128K SystemRam 的地址空间,该空间还是比较紧凑的,调试个简单的程序可以在在SystemRAM中运行,大型的工程显然资源是不够的,正常MPU程序是运行在DDR中的,我们继续修改链接脚本让程序跑在DDR中这样就不会有资源的使用限制了。 ![]()
: A: b4 y- B* |) Z( k 工程要运行在DDR中要保证DDR已经初始化好才可以,我们的工程是没有整个初始化处理的,我们可以加载软件包中的(STM32Cube_FW_MP13_V1.0.0\Projects\STM32MP135C-DK\Examples\DDR\DDR_Init\STM32CubeIDE)工程,按照之前的方法下载到SystemRam中运行初始化好DDR后,我们不给板子掉电重洗debug我们的工程即可。 加载DDR 工程前我们需要修改工程的链接脚本,把程序编译链接到DDR空间,按照如下方式修改链接脚本即可。5 B2 r" |3 p3 n( o2 f ![]() Debug config 下的startup 要删除这一句避免debug 触发cpu复位把DDR初始化处理reset 掉。 ![]() ![]() 按照之前描述的先debug ddr_init 工程后断开ddr_init ,在denug 我们的测试工程验证,这时发现工程已经链接到0xc0xxx的DDR的地址空间了,程序已经加载到DDR中运行。 ![]()
ST 从SD卡启动的程序需要在bin文件前追加512 byte 的header 才能被正常启动,对应的image header 的说明如下(https://wiki.stmicroelectronics.cn/stm32mpu/wiki/STM32_header_for_binary_files),ST 的软件包里提供了工具用于打包编译后的镜像文件,对应的脚本为postbuild_STM32MP13.sh 脚本使用方法如下:3 A0 `9 S$ E/ D, M, d6 n; [
# v3 M+ g o3 o3 P" ]1 r 按照上面的说明在project Properties -> C/C++ Build -> Settings -> Build Steps : 追加Post-build steps 执行该脚本。
![]() 添加命令后console 会有如下log 信息输出header 信息及,在编译路径下也会有对应的.stm32文件其在bin文件上携带了header信息。 ![]() & M( |4 W% i2 k' B3 I6 E# @: ~ 同时修改该路径下的FlashLayout_OpenBL_ExtLoaderSDMMC_SerialBoot.tsv 文件更新要下载的app文件- ]" p) {8 C; R7 P6 O ![]() ' ]" w. y# T: A& z/ K2 N* Z 一切就绪我们将板子的启动模式切换为 下载模式,对应拨码如下: ![]() . ~& }6 N7 k* E. X( s 我们通过 STM32CubeProgrammer 通过uart 将镜像下载至sd卡,下载前要将SD卡格式化下避免镜像制作启动失败。 ![]() SD卡启动镜像制作完成后,我们将板子的启动模式切换为SD卡启动。 ![]() 8 T9 _* y: C% P# l 切换后板子启动正常,此时断电重启后程序也是能够正常运行,至此我们的基于SD卡启动加载至DDR运行的验证已经ok了。 # S% }: D8 g3 A9 U, Z& i) w0 W ![]() /* 资料分割线 */ $ o' H2 [ @% V. t! z, N# `4 c![]() |
拷打cubemx【002】——自定义还需基于芯片的工程
【STM32N6570-DK评测】摄像头video encoder
【STM32N6570-DK评测】3.CubeMX关于DCMIPP和CSI的BUG整理及摄像头使用
【实测教程】STM32CubeMX-STM32L4之研究(ADC)
【下载问题解决】关于ST官网下载软件问题解决
兔哥的初代M33【002】-H503Nucleo 内部flash操作
【STM32N6570-DK评测】开发环境及LED debug
TouchGFX应用移植自定义屏幕
拷打cubemx【001】——艰难的选型路
兔哥的杂谈【002】——如何性价比更高地去编译STM32
坛子里有解决方法