摘要
本文是意法半导体(ST)用 STM32CubeIDE 跑 STM32H7 双核应用的分步指南:工程怎么配,Cortex®-M7 与 Cortex®-M4 怎么设。
引言
本文说明如何在 STM32CubeIDE 上跑 STM32H7 双核工程。STM32H7 双核把 Cortex®-M7 和 Cortex®-M4 放在同一颗片子上。工程是分层的:每个核各有子工程和二进制,构建与调试也分开配。
双核开发先要把启动与同步顺序搞清楚。一般由 Cortex®-M7 做系统初始化与资源设置,再把 Cortex®-M4 从复位或低功耗模式放出来。按这个顺序走,同步问题会少很多。
按下面步骤即可开发、构建并调试 STM32H7 双核应用。
1. 前置条件
本文假定已安装:
- STM32CubeIDE
- STM32CubeMX
- STM32CubeH7
- 一块用于测试的双核 STM32H7 板(本文使用 NUCLEO-H755ZI-Q)
2. 工程搭建
打开 STM32CubeMX,点击 [File] → [New project]。
点击 board selector,选择 NUCLEO-H755ZI-Q。
打开 `.ioc` 后,将 PF7 与 PF9 设为 GPIO outputs。
在 GPIO 菜单中,将 PF9 分配给 Arm® Cortex® M4,将 PF7 分配给 Arm® Cortex® M7。
在 project manager 中为工程命名,然后点击 [generate code]。
打开 STM32CubeIDE,打开已生成的工程。
为便于观察结果,在 CM7 与 CM4 代码中加入引脚翻转。
在 `CM7/Core/Src/main.c` 的 user code begin 3 下加入:
```c
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_7);
```
在 `CM4/Core/Src/main.c` 的 user begin code 3 中加入:
```c
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_9);
```
右键 CM4 工程 → debug as / debug configuration。
在 STM32 C/C++ application 下选择 CM4 工程,打开 startup 菜单并选择已有文件。点击 [edit],取消勾选 [Download],确定并 Apply。
在 debugger 菜单的 CTI 选项中勾选 [Allow other cores to halt this core] 与 [Signal halt events to other cores],然后 Apply。
接着配置 CM7 工程:
在 Startup 菜单点击 add,加入 CM4 工程,确定并 Apply。
在 debugger 菜单中,确保 CM7 与 CM4 的 GDB 端口号至少相差 4。
本文示例中 CM7 为 61234,CM4 为 61238。
勾选 CTI 相关选项。
配置完成后,点击 CM7 工程并运行。
编译器会先烧录 CM7 工程,再烧录 CM4 工程。
3. 结果
可用示波器或逻辑分析仪观察结果(本文使用逻辑分析仪)。将 PF7、PF9 接到逻辑分析仪并开始采集。
PF7 与 PF9 对应 CN9 的引脚 28 与 26。
逻辑分析仪显示 CM7 与 CM4 之间仅约 20 µs 延迟。
若生成工程时选用 LL 而非 HAL,并将翻转改为:
```c
GPIOF->ODR ^= (GPIO_PIN_7); /* cm7 */
GPIOF->ODR ^= (GPIO_PIN_9); /* cm4 */
```
使用 LL 时,延迟可降到约 12 µs。
结论
按上面步骤,可在 STM32CubeIDE 与 STM32CubeMX 下跑通 STM32H7 双核工程。内容覆盖环境搭建、双核调试器配置,以及启动顺序验证,方便分别调试 CM7 与 CM4。
来源:https://community.st.com/stm32-mcus-60/how-to-create-and-run-an-stm32h7-dual-core-basic-example-160437
参数以意法半导体官方最新资料为准。
141
