一、STM32H745IGT6 概述

        STM32H745IGT6 是意法半导体(STMicroelectronics)推出的 高性能双核微控制器,属于 STM32H7 系列。它基于 ARM Cortex - M7(主核)+ Cortex - M4(从核) 架构,主频高达 480 MHz,集成丰富的通信接口、高精度 ADC 和先进的定时器,适用于工业自动化、机器人、电力电子等复杂控制场景。

主要特性

  • 双核架构:Cortex - M7(FPU + DSP,支持双精度浮点运算)和 Cortex - M4(FPU + DSP,支持单精度浮点运算)。
  • 存储器:1 MB Flash、1 MB RAM(含 512 KB TCM),支持外部存储器扩展(FMC、QuadSPI)。
  • 外设:3×16 位 ADC(6.4 MSPS)、2×DAC、17× 定时器、丰富通信接口(以太网、USB、CAN FD、SPI、I2C 等)。
  • 封装:LQFP100(14×14 mm),适合空间受限的应用。
二、双核架构详解
1. 内核分工
  • Cortex - M7 内核(主核):
    • 负责复杂算法处理(如 FOC 电机控制、FFT 信号分析)。
    • 运行操作系统(如 FreeRTOS、ThreadX)或应用层代码。
    • 管理人机界面(HMI)、网络通信(如以太网、USB)。
  • Cortex - M4 内核(从核):
    • 处理实时任务(如 ADC 采样、PWM 输出)。
    • 执行低延迟控制环路(如电流环、快速保护机制)。
    • 作为协处理器减轻主核负担,提高系统响应速度。
2. 双核通信机制

STM32H745 提供多种双核通信方式:

通信方式 特点与适用场景
共享内存 - 直接访问共享 SRAM 区域(如 SRAM1/2/3)
- 需软件实现同步机制(如原子操作、互斥锁)
消息邮箱(Mailbox) - 硬件支持的邮箱机制,最多 16 个邮箱
- 用于轻量级消息传递(如状态通知、命令传递)
事件标志(Event Flag) - 硬件支持的事件标志寄存器
- 用于触发中断或唤醒内核(如 M4 唤醒 M7)
中断机制 - 通过 EXTI 或内核间中断(ICSR)触发
- 实现低延迟响应(如紧急故障处理)
DSP 共享资源 - 共享 ADC、DAC、定时器等外设
- 需软件协调访问时序
三、双核开发流程
1. 开发环境配置
  • 工具链:使用 STM32CubeIDE(v1.10.0 及以上)或 Keil MDK - ARM(v5.37 及以上)。
  • 调试器:支持 ST - LINK/V3 或 JTAG 调试器,可同时调试两个内核。
  • 固件库:使用 STM32Cube FW_H7 固件包(v1.11.0 及以上)。
2. 双核启动配置

双核启动有两种模式:

  1. 独立启动:M7 和 M4 分别从各自的 Flash 区域启动(默认模式)。
  2. 主从启动:M7 启动后唤醒并配置 M4(需修改启动代码)。
/* 主从启动模式示例(M7 代码) */
void CortexM4_Start(void) {
  /* 解锁 CPU2 访问 */
  HAL_FLASH_Unlock();
  __HAL_FLASH_CPU2_ACCESS_ENABLE();
  HAL_FLASH_Lock();
  
  /* 设置 M4 向量表地址 */
  *((uint32_t*)0xE0042000) = 0x08020000;  // M4 Flash 起始地址
  
  /* 清除 M4 复位状态 */
  SCB->AIRCR = 0x05FA0004;                 // VECTKEY + SYSRESETREQ
  while((SCB->AIRCR & 0x04) == 0);         // 等待复位完成
  
  /* 启动 M4 内核 */
  *((uint32_t*)0xE0042004) = 1;            // CPU2BOOT 位
}
3. 共享资源管理

使用原子操作和互斥锁保护共享资源:

/* 原子操作示例(Cortex - M7 和 Cortex - M4 均可访问) */
static volatile uint32_t shared_flag = 0;

/* M7 代码:设置标志 */
__atomic_store_n(&shared_flag, 1, __ATOMIC_SEQ_CST);

/* M4 代码:检查标志 */
if (__atomic_load_n(&shared_flag, __ATOMIC_SEQ_CST) == 1) {
  // 处理共享资源
  __atomic_store_n(&shared_flag, 0, __ATOMIC_SEQ_CST);
}
四、双核应用案例:高性能电机控制系统
1. 系统架构
[ADC采样] → [Cortex - M4:电流环控制] → [共享内存] → [Cortex - M7:速度环/FOC算法] → [PWM输出]
2. 任务分配
  • Cortex - M4

    • 每 100 μs 执行一次 ADC 采样(3 相电流 + DC 母线电压)。
    • 实现电流环 PI 控制(内环,高优先级)。
    • 通过共享内存传递数据给 M7。
  • Cortex - M7

    • 每 1 ms 执行一次速度环控制和 FOC 算法(外环)。
    • 处理通信任务(如以太网、CAN)和用户界面。
    • 更新 PWM 参数并发送到 M4。
3. 双核通信实现
/* 共享内存结构(定义在共享 SRAM 区域) */
typedef struct {
  float i_a, i_b, i_c;        // 三相电流
  float v_d, v_q;            // dq轴电压指令
  float speed, position;     // 电机速度和位置
  uint8_t fault_flag;        // 故障标志
  uint32_t timestamp;        // 时间戳
} MotorControlData;

MotorControlData __attribute__((section(".sram2"))) motor_data;

/* Cortex - M4 端代码(ISR 中执行) */
void TIM1_UP_IRQHandler(void) {
  /* 读取 ADC 采样值 */
  motor_data.i_a = ADC1->DR;
  motor_data.i_b = ADC2->DR;
  motor_data.i_c = ADC3->DR;
  
  /* 触发 M7 中断 */
  SCB->ICSR = SCB_ICSR_PENDSVSET_Msk;
}

/* Cortex - M7 端代码(PendSV 中断处理函数) */
void PendSV_Handler(void) {
  /* 读取 M4 采集的电流数据 */
  float i_a = motor_data.i_a;
  float i_b = motor_data.i_b;
  
  /* 执行 FOC 算法 */
  FOC_Algorithm(i_a, i_b, &motor_data.v_d, &motor_data.v_q);
  
  /* 更新 PWM 占空比(通过共享寄存器) */
  PWM_Update(motor_data.v_d, motor_data.v_q);
}
五、双核开发注意事项
  1. 内存分区

    • 将共享数据放在 SRAM1/2/3 区域(两核均可访问)。
    • TCM(紧密耦合内存)为内核私有:
      • I - TCM(64 KB)和 D - TCM(64 KB)供 M7 使用。
      • I - TCM(32 KB)和 D - TCM(32 KB)供 M4 使用。
  2. Cache 一致性

    • 若使用 D - Cache,需在访问共享内存前执行缓存同步:
      /* 刷新 D - Cache(Cortex - M7 代码) */
      SCB_CleanInvalidateDCache();
      
  3. 调试技巧

    • 使用 ST - LINK/V3 同时连接两个内核,实现双内核单步调试。
    • 在 CubeIDE 中配置双调试会话,分别监控 M7 和 M4 的运行状态。
  4. 启动时间优化

    • 独立启动模式下,M7 和 M4 可并行初始化,缩短系统启动时间。
六、资源分配与性能对比
资源 Cortex - M7 (主核) Cortex - M4 (从核)
Flash 地址 0x0800 0000 - 0x080F FFFF 0x0802 0000 - 0x080F FFFF
RAM 地址 0x2400 0000 - 0x240F FFFF 0x3000 0000 - 0x3001 FFFF
私有 TCM 128 KB (I + D) 64 KB (I + D)
浮点运算 双精度 FPU + DSP 单精度 FPU + DSP
Cache I - Cache (32 KB) + D - Cache (32 KB)
适用场景 复杂算法、网络通信、OS 实时控制、低延迟任务
七、总结

        STM32H745IGT6 的双核架构为高性能嵌入式系统提供了强大的处理能力,通过合理分配任务(如将实时控制交给 M4,复杂算法交给 M7),可显著提高系统响应速度和整体性能。在开发过程中,需特别注意共享资源的同步、内存分区和 Cache 管理,以充分发挥双核优势。无论是工业自动化、机器人控制还是电力电子应用,STM32H745 的双核设计都能提供灵活且高效的解决方案。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐