4. STM32MP157 Cortex-M4开发实验说明

本章节为概括性总结Cortex-M4程序的运行方式,除了在新建工程章节中会再详细描述 如何使用STM32CubeIDE运行M4内核之外,在其他的章节中并不再重复讲述如何运行M4程序。 请结合实际工程阅读本章关于STM32CubeIDE相关内容。

4.1. 实验说明

由于STM32MP157芯片没有能够下载Cortex-M4内核固件的内部flash, STM32MP157的Cortex-m4内核并不能够单独地工作,需要在A7内核的引导下将 Cortex-M4固件加载到SRAM中使得M4内核正常工作,而当我们需要调试程序时, 这样的方式就显得很繁琐,因此STM32MP157还提供了一种工程模式, 使得我们能够使用stlink或jlink将程序加载到SRAM中运行,方便得调试程序, 使用这种方式的弊端就是每当我们复位重启时,板子上的程序就会丢失。 在做学习时推荐工程模式用来stlink或jlink进行代码调试。

4.2. 在linux中引导Cortex-M4内核启动

在linux中引导Cortex-M4内核启动,需要我们先将Cortex-M4的固件上传到板子上, 这里我们使用板子上的虚拟网口以及MobaXterm软件上传Cortex-M4固件。

使用数据线将板子上的USB转串口以及OTG与电脑的USB进行连接。

image0

根据开发板上的丝印设置好启动自己板子上的启动方式。打开MobaXterm进行连接, 选择CH340所在的串口号,并将波特率设置为115200,如图所示

new image1

插电,开机。串口上会打印板子启动相关的消息。

new image2

在板子上使用ifconfig查看网络信息。可发现存在usb0的网卡。

image2

启动板子之后电脑上会提示新增加了一个虚拟网口,如下图所示

image1

在我们的电脑上测试网络的连通性。

image3

当我们的电脑能够ping通192.168.7.1时,我们就可以使用MobaXterm的ssh去连接板子了。

image4

输入root即可登录

image5

在窗口的左边选择 /lib/firmware/目录,将我们工程的xxx.elf固件文件上传到该目录下即可。当然也不一定 要使用这种方式,只要能够将固件文件上传到/lib/firmware/目录下即可。

image6

最后在终端上执行以下两条命令,便可使用Cortex-M4内核启动led.elf固件了。

1
2
3
4
5
 #加载led.elf固件
 echo led.elf > /sys/class/remoteproc/remoteproc0/firmware

 #启动Cortex-M内核
 echo start > /sys/class/remoteproc/remoteproc0/state

在串口的终端中执行,可看到打印信息,若在ssh终端中执行并不会显示打印信息。

image7

4.3. 使用工程模式调试代码

STM32MP157支持多种启动模式,可通过拨码开关设置不同的启动模式。除了这些模式以外将拨码开关拨到001,上电将进入工程模式,如下所示

image8

在上电之前使用stlink连接板子与电脑,如下所示

image9

需要在STM32CubeIDE工程上进行debug设置,选择菜单栏上的 Run->Debug Configurations…

image10

双击“STM32 Cortex-M C/C++ Application”便会自动生成 以下xxx_CM4 Debug文件, 在窗口的右面已经包含了我们工程编译生成的xxx.elf文件

image11

按照以下配置设置调试器即可。

image12

选择菜单栏上的Run->Run即可使得M4内核运行起来,同时也可以选择进入debug模式对程序进行调试。

image13