本帖最后由 STM新闻官 于 2024-11-26 15:11 编辑
01 引言
STM32MP13x 系列 MPU 是 STM32 Arm®Cortex® MPU 家族中的一部分,它拥有单核Cortex®-A7 核心,支持核心频率 650MHz~1GHz,不仅能够轻松运行 Linux 操作系统,还同时提供官方 HAL 库,用于支持基于 RTOS 或无 OS 的项目方案,即裸跑应用程序。
本应用文档将就以下几个部分简述如何在 STM32MP13 系列 MPU 上开始无 OS 项目的开发: • STM32MP13x Baremetal 开发环境简介 • STM32MP13x 工程的创建 • STM32MP13x 工程的在线调试 • 镜像烧录及从外部 Flash 启动
02 STM32MP13x Baremetal 开发环境简介
2.1 开发工具及环境STM32MP13x Baremetal 开发工具主要包括: 本文示例基于 STM32CubeIDE 开发调试工具。
2.2 STM32CubeMP13 开发包
STM32CubeMP13 开发包同步发布于 ST 官网 www.st.com 和 github.com,可通过如下方式下载:
1. ST 官网下载链接
2. Github 仓库链接
3. 通过 STM32CubeMx 软件下载
2.2.1. STM32CubeMP13 开发包总览STM32CubeMP13 开发包运行在 Arm® Cortex®-A7 处理器上,由以下三部分组成: • Level 0:驱动程序,包含 HAL、LL、BSP、CMSIS • Level 1:中间件,包含 Eclipse ThreadX(原 AzureRTOS),USB Host & Device 库 • Level 2:包含各种板级示例程序 除此之外,还包括一些工具助手等。
▲ 图 1 Baremetal 开发包源码框架
2.2.2. 源码目录结构
▲ 图 2 Baremetal 开发包源码目录
2.2.3. 开发包支持模块列表
已支持的 HAL drivers : • ADC, BSEC, CRC, CRYP (including SAES), DCMIPP, DDR, DFSDM, DMA,DTS, ETH, ETZPC, EXTI, FDCAN, FMC_NAND, GPIO, HASH, I2C, I2S, IWDG,LPTIM, LTDC, MCE, MDMA, PKA, PWR, XSPI (QSPI replaced with XSPI),RCC, RNG, RTC (including TAMP), SAI, SDMMC (including EMMC), SMARTCARD, SPDIFRX, SPI, TIM, UART, USART, USB
已支持的 LL drivers :
• ADC, DMA/DMAMUX, EXTI, ETZPC, GPIO, I2C, LPTIM, MDMA, PWR, RCC & BUS, RTC, SPI, TIM, USART
BSP 与 BSP 组件:
• 基于 HAL 封装了更高一级的 API,为 LED、按钮、相机、LCD、SD 卡和 COM 端口提供 API,包含了以下一些外围器件的驱动:GC2145, LAN8742, MCP23,x17RK043FN48H, STMIPID02
中间件程序:
• 包含一系列支持某种服务的库文件及接口文件,目前已支持:Eclipse ThreadX(原 AzureRTOS),STM32_USB_Device_Library,STM32_USB_Host_Library
项目工程:
• Examples:基于 HAL 接口的简单示例,没有中间件功能。
• Applications:较完整的工程应用实例,包含中间件功能。
• External_Loader: 烧录镜像及从外部存储器启动的应用示例。
• Template: 板级工程应用框架。
实用工具:
• Imageheader:用于添加 stm32 头,支持存储设备启动。
• Fonts:提供了一组用于显示的标准字体,包括 font8,font12,font16,font20,font24
03 STM32MP13x 工程的创建
STM32MP13x 工程创建,可通过以下两种方式: 1. 使用 STM32CubeMx 配置并生成项目框架代码,并基于该框架代码开发应用。 2. 导入 STM32CubeMP13 开发包示例工程代码,并基于该示例代码开发应用。
STM32CubeMX 是 STM32Cube 工具家族中的一员,它采用简单易用的图形界面,可以帮助开发者快速配置硬件和软件。可支持从 MCU/MPU 选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置等,并可生成适用的 C 代码项目。
本章节简述如何通过 STM32CubeMx 生成适用于 STM32MP13x 的裸跑应用框架。使用该方式无需提前下载 STM32CubeMP13 开发包,STM32CubeMx 可自动联网下载。 1. 打开 STM32CubeMX,点击 ACCESS TO MCU SELECTOR, 2. 在搜索框中输入 STM32MP13 相应料号,如:STM32MP135FAF7,双击打开配置窗口 3. 弹框选择 MP13 Bare Metal,将生成 bare metal 工程框架。 ▲ 图 4 STM32CubeMx 选择工程类型
4. 切换到 Project Manager 标签页,输入工程名称。 5. 在此页进行项目选项配置,可保持默认。
6. 回到 Pinout & Configuration 标签页。 7. 使能 RCC 和 DDR。 8. 配置各外设总线,配置方法与其他 STM32 MCU 相同(也可参考 Help -> Docs & Resources)
9. 切换到 Clock Configuration 标签页。 10. 若软件报告时钟错误,可点击 Yes 自动修复。 11. 输入 CPU、DDR、总线等的工作频率,系统会自动匹配合适参数。
12. 所有外设配置完成,即可点击 GENERATE CODE,开始生成工程代码。 13. 若第一次使用,软件将提示是否下载 STM32CubeMP13 开发包,可点击“yes”,软件自动联网下载前述 STM32CubeMP13 开发包。 14. 生成完成后,可直接点击 Open Project,将打开 STM32CubeIDE 工程。
▲ 图 8 STM32CubeMx 代码生成页面
▲ 图 9 STM32CubeMx 完成代码生成页面
▲ 图 10 STM32CubeMx 生成工程代码示例
15. 至此,工程框架已生成,可通过 STM32CubeIDE 进行用户代码的编辑、编译、调试。
3.2. 从 STM32CubeMP13 开发包导入工程 若已事先通过 ST 官方网站或 Github 下载了 STM32CubeMP13 软件开发包,也可导入开发包中的工程示例代码,从示例代码开始进行项目开发。
这里以 FSBLA_Sdmmc1 工程为例。 项目路径:\Projects\STM32MP135C-DK\Applications\FSBLA\FSBLA_Sdmmc1 1. 打开 STM32CubeIDE,导入 project 2. 点击 Files -> Import…
▲ 图 11 STM32CubeIDE 右键项目菜单
3. 选择 Existing Projects into Workspace
4. 点击 Next> ▲ 图 12 STM32CubeIDE 导入已存在项目
5.点击 Browse…,找到目录 \Projects\STM32MP135C-DK\Applications\FSBLA 6. 选中 FSBLA_Sdmmc1_A7 工程 7. 点击 Finish,导入 Project▲ 图 13 STM32CubeIDE 选择导入项目
8. 工程导入完成。
04 STM32MP13x 工程的在线调试
工程创建完成后,接下来本章节将介绍如何基于 STM32CubeIDE 进行工程编译及在线调试。
STM32MP135 内部包含 128KByte SYSRAM,若代码小于 128KByte,可直接运行于内部SYSRAM 中,适用于验证一些简单的外设实例。若代码大于 128KByte,则需要将程序运行于DDR 中。下面将分别阐述。
仍以前述导入的 FSBLA_Sdmmc1_A7 工程为例。 1. 首先,将开发板切换到工程模式 2. 连接 Type-C 电源 3. 连接 MicroUSB,这里板载已支持 ST-Link
4. 右键项目工程名称,选择 Build Project,完成编译。
5. 右键工程名称,选择 Debug As -> STM32 C/C++ Application ▲ 图 16 选择调试项目方法 1
6. 或点击 Debug 图标 7. 进入 Debug Configurations….
8. 进入调试配置菜单
9. 即可像 MCU 一样调试您的代码。
当代码量超过 SYSRAM(128KB)的大小时,需要将程序运行在 DDR。这里以 BSP_BasicTemplates 工程为例展示如何开发运行于 DDR 的用户程序、
1. 首先,按照前述方法导入项目工程
2. 打开 C/C++ Build 配置3. 在 Preprocessor 中添加 USE_DDR 宏定义
4. 修改链接文件,重命名为 “stm32mp13xx_a7_ddr.ld” 5. 修改 REGION_ALIAS 定义到 DDR 区域: 6. 重新编译后,目标文件将链接到 DDR ▲图 23 选择链接文件
7. 在调试之前需要先运行 DDR_Init 对 DDR 进行初始化 8. 按照前述方法导入 DDR_Init 工程,编译后全速运行一次,并保持开发板不掉电项目路径:\STM32MP135C-DK\Examples\DDR\DDR_Init
▲ 图 24 运行 DDR 初始化
9. 回到 BSP_BasicTemplates 工程。
10. 在 Debug configuration 对话框中,将 Startup 页面的 monitor reset 删除。
11. 点击 Debug 进入调试 12. 可以看到当前 main 函数的地址已经为 0xC000 开头的 DDR 位置
▲ 图 26 在 DDR 中调试工程
|