STM32MP157的M4核程序仿真
第一章 STM32MP1的M4核学习入门之ST-LINK的使用
STM32MP157的M4核程序仿真
前言
不含 MMU(Memory Management Unit)的 MCU, 比如比较常见的STM32103,407系列,主要用于一些对实时性要求较高的场景,比如航空航天、汽车电子等。 而带有 MMU 的 MPU,可以通过 MMU 来管理虚拟内存空间,从而可以支持诸如 Linux 的操作系统,打开操作系统的大门。
意法半导体(STMicroelectronics)稳固 公司首次以 STM32MP1 平台进入 MPU 市场。 该平台采用 MCU+MPU 的方案, 旨在为工业制造、 消费电子、 医疗保健、智能家居等多个市场领域提供高性能、硬实时、低功耗、更安全的解决方案。
一、STM32MP1是什么?
STM32MP1 系列芯片的一大特色就是芯片内部有 2 个 Cortex A7 核和 1 个 Cortex M4
核, 可以同时运行 Linux 和 RreeRTOS, 使用 Linux 操作系统进行图像显示和网络通信,使用 FreeRTOS 进行实时控制。
因此, 使用 M4 核是学习和使用这个芯片很重要的一个部分。 好在 ST 推出了 HAL 库的编程方式。 如果读者之前接触过传统 STM32, 可以很方便将之前的程序移植到STM32MP1上面使用。
本次实验使用的开发板是湃兔核PanGu开发板
二、M4调试
M4的调试方法有两种:工程模式(Engineering Mode)和产品模式(Production Mode)
工程模式:类似于STM32单片机烧录到RAM,适用于M4上电启动模式,无需加载A7核。因为烧写到RAM里面,所以掉电程序会丢失,一般用于调试。只需要一个ST-LINK仿真器。
产品模式:适用于A7启动模式,A7核需要先启动,引导M4核启动,程序加载在Flash,所以掉电不会丢失。需要ST-LINK ,USB转串口
建议使用工程调试模式
1.准备工作
1.1 一个学习用的开发stm3217的开发板
本次实验使用的开发板是湃兔核PanGu开发板,官网价330
1.2 ST-LINK仿真器
一般配套的仿真器比较贵,某宝上面20元一个,可以正常使用的那种。
如果要从A7核启动,另外还需要一个USB转串口,推荐使用 FTDI 的 USB 转串口模块(如 FT232 USB 转 TTL 模块)。 大约15元
1.3STM32CubeIDE 安装
STM32CubeIDE = STM32CubeMX + KEIL
STM32CubeIDE 安装比较简单,注意安装前都需要安装 java 环境。
STM32CubeIDE 特性如下:
集成 STM32CubeMX,可提供以下服务:
- STM32 MCU 和 MPU 的选择
- 引脚分配、 时钟、 外围设备和中间件配置
- 项目创建和初始化代码的生成
基于 Eclipse/CDT,并支持 Eclipse 插件, 使用 ARM GNU C/C++工具链和 GDB 调试器
其他高级调试功能,包括: - CPU 核心、 外设寄存器和内存视图
- 实时变量观看视图
- 系统分析和实时跟踪(SWV)
- CPU 故障分析工具
支持 ST-LINK( STMicroelectronics)和 J-Link( SEGGER)调试
支持从 Atollic TrueSTUDIO 和 System Workbench for STM32( SW4STM32)导入项目
多操作系统支持: Windows、 Linux 和 macOS( 仅支持 64 位版本)
2.启动模式
SW1 用来选择启动方式, 当开关拨到 ON 位置时, 对应引脚为高电平, 当开关拨到 OFF
位置时, 对应引脚为低电平。
2.1代码生成
1.新建工程
2.芯片选择
PanGu 板使用的芯片型号为 STM32MP157AAAx, 我们选择匹配的芯片型号即可。
3.工程名
设置好工程名称, 注意不要使用中文作为工程名。
4.Library 设置
操作 STM32MP1 资源需要使用到 HAL 库, HAL 库可以直接使用 STM32CubeIDE 进行获取。
5 时钟设置
工程初始化后, 会打开一个 ioc 文件的设置界面, 通过这个界面, 我们可以进行一些
配置, 首先进行时钟的配置。
时钟频率越高, 软件执行性能越好, 不过频率越高, 功耗也会越大。 所以在低功耗应用场景, 可以考虑适当降低运行频率。
6 LED IO 设置
7.Project 管理
勾选上为每个工程生成单独的 c 和 h 文件, 方便后面阅读代码。
8、生成代码
配置好 ioc 文件后,CTRL+S 保存 ioc 文件, 会提示是否需要生成代码。 直接选择 Yes, 进行
代码生成。 或者在菜单栏Project->Generate code稍等几秒, 代码会生成成功。在 001_LED_CM4 文件夹下, 即是 M4 核相关代码。
生成代码之后,一些驱动程序需要你自己去写,编译无错后就可以仿真
比如呼吸灯
// An LED
while (1)
{
HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_6);
HAL_Delay(500); //ms级延时,延时500ms
}
2.2 工程模式调试方法
单独仿真 Cortex-M4 使用”Engineeriing Mdoe”(工程模式)。 拨动开关 1 ,2关闭,3打开。
1.这个ST-LINK刚刚买回来的时候,杜邦线是没有给你连接好的,你需要自己参照开发板原理图去进行连接。首先你要去开发板原理图中搜索ST-LINK管脚定义的名字,比如SWCLK,结果如下图,开发板定义的名字是JTCK,
线路连接好后,同时你要安装商家提供配套的驱动程序。
2.STM32CubeIDE ST-LINK 更新
由于 STM32MP1 是新推出的芯片, 所以 ST-LINK 固件如果太旧可能会不支持, 需要对
ST-LINK 固件进行升级, 步骤如下: 打开STM32CubeIDE 软件,
单击”Open in update mode”进入升级模式, 如果提示无法进入升级模式, 请把
ST-LINK 和开发板断开,稍等一下, 然后重新插拔 ST-LINK USB 接口。
3.打开 STM32CubeIDE, 在菜单栏点击“ Run” ->“ Debug Configurations”
随后弹出设置框, 先选中图 1.6.3①处的“ STM32 Cortex-M C/C++ Application” ,然后点击左上角②
处的新建调试按钮“ New launch configuration” ,右边的配置视图窗口,③处会默认选择之前编译生成的
ELF 文件(需先编译工程) 。
然后切到“调试器”标签页,在“ Load Mode”单选框里选择“ thru JTAG/SWD link(Engineering mode)” ,
也就是工程模式, 调试探头选择默认的“ ST-LINK(OpenOCD)” , 最后点击“ Debug”开始调试,
随后重新编译,进入调试视图, 调试视图常用按钮如图
输出窗口有一些红色信息,这是正常信息,不要在意。
2.3产品模式调试方法
产品模式需要首先启动A7,然后引导加载M4,所以拨码开关一定要把第2位打开,1和3关闭-----这种模式是A7跑的Linux系统(出厂时, 已经在开发板中烧录好了一个 linux 系统 )从EMMC启动,然后加载M4。
1.串口连接开发板
USB串口的和开发板连接时,RXD接对应的TXD,同时你要安装商家提供配套的驱动
STM32CubeIDE 支持使用串口连接开发板, 进行命令行操作。 单击菜单栏图标可打开
终端。
2 USB 虚拟网络通信
PanGu 开发板有一个 USB OTG 接口, 默认固件配置为一个虚拟网络。 把这个接口与电
脑连接后, 电脑会出现一个”Remote NDIS Compatible Device”网络设备。 对齐进行
设置
将 IP 设置为“192.168.7.x” (x>2),笔者习惯设置为 192.168.7.60; 子网掩码
设置为”255.255.255.0”;默认网关设置为 192.168.7.2。
设置完成后, 打开电脑终端进行测试, 如设置成功提示如下:
设置失败, 则出现如下提示, 请仔细检查设置。
3.打开 Debug 配置界面进行设置:
新建一个 Debug 配置, 笔者这里命名为”001_LED_CM4_Linux”,用来和之前
Engineering Mode 使用的配置区分。
进行调试器设置:
调试器设置 Load Mode 选择“thru Linux(Production mode)” ,Connection
选 择 合 适 的 串 口 和 开 发 板 网 络 IP 。 如 使 用 USB 虚 拟 网 络 连 接 , IP 一 般 设 置
为”192.168.7.2”,使用以太网则根据实际情况设置。
注意: 不要同时连接 USB 网络和以太网, 有多个网络, STM32CubeIDE 不知道使用哪
个, 会报错。
连接成功后, STM32CubeIDE 状态栏会显示连接状态。 如下图所示
三、HAL库
如果你安装了STM32CubeIDE 安装 ,在 C:\Users\用户名\STM32Cube\Repository\STM32Cube_FW_MP1_V1.2.0\Drivers\STM32MP1xx_HAL_Driver 目 录 下 存 放 着 一 个 帮 助 文 档“STM32MP157Cxx_CM4 User Manual” 。 这个文档描述了如何使用 STM32MP 的 HAL
库。 下面以 GPIO 来介绍这个文档结构:
文档分为 Modules(模块)、 Data Structures(数据结构)、 Files(文件)、Directories(目录) 。 文档主要从这 4 个方式来介绍 HAL 库。在模块栏目下, 有各种外设模块, 比如此次需要使用到的 GPIO 模块。
GPIO 模块又分为 GPIO Exported Functions(公有函数, 供用户调用), Exported Types(公有类型)等。 供用户调用函数又分为“初始化函数” 、 “IO 操作函数” , 点击每
个函数, 都会写上详细的操作方式。 如 HAL_GPIO_TogglePin 介绍如下:
从文档我们可以得出, 如果需要翻转 LED, 可以使用如下代码:
HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_6);
四、总结:
以上就是今天要讲的内容,本文仅仅简单介绍了STM32CubeIDE 的使用,而HAL提供了大量能使我们快速便捷地处理数据的函数和方法。同时介绍了两种STM32MP157的两种调试方法。
本文地址:https://blog.csdn.net/AKhuhu/article/details/108163330
下一篇: 树莓派搭建openbmc