一:STM32H755的知识分享:
1.1 概述:
STM32H7x5系列微控制器集成了工作频率高达480 MHz的Arm® Cortex®-M7内核(具有双精度浮点单元)以及工作频率高达240 MHz的Arm® Cortex®-M4内核(具有单精度浮点单元)的卓越性能,可选的扩展环境温度高达125 °C。
1.2 性能:
工作于480 MHz的fCPU频率(Cortex-M7)以及240 MHz的CPU频率(Cortex-M4)下,从闪存执行程序时,能够提供3224 CoreMark / 1327 DMIPS的性能,利用其L1缓存实现了零等待执行。
L1缓存(16 KB的I-缓存 +16 KB的D-缓存)提高外部存储器的执行性能。
1.3 安全性:
STM32H755 MCU包含以下额外安全特性:
加密/哈希硬件加速
STM32H755还支持安全固件安装(SFI)嵌入式安全服务,可在执行初始程序时执行安全验证并保护软件IP。
安全启动和安全固件升级(SBSFU)
1.4 高能效
多电源域架构可实现将不同的电源域配置为低功耗模式,进而优化功耗效率。
内置SMPS,用于降低电源电压。还可用于为外部电路供电,以及特定应用情况下结合LDO共同使用。
USB调节器提供嵌入式物理接口层(PHY)。
在内核运行模式(外设外设关)和SMPS情况下,典型功耗为145 µA/MHz @VDD = 3.3 V和25 °C
低功耗待机模式下的典型功耗电流为2.43 µA
带RTC的VBAT模式(低功耗模式)下通常为460 nA
二:硬件平台:
STM32cube MX 6.15.0版本
keil MDK5.38版本
三:STM32cube MX 软件配置:
3.1 中断向量的配置:
M7内核配置:
M4内核配置如下:
由于STM32H755内置了M7和M4内核,所以这里的配置很重要,而且即使我们想要单独使用M7,或者是M4的话,也需要使另外一个内核启动,否则单片机使不能正常运行的。
3.2 M7内核的串口配置:
这里我们配置串口3在M7内核启动,就只能选择M7内核就可以了,注意同一引脚在同一时刻只能被一种内核调用。否则会出现问题;
3.3 外部中断的配置:
这里我使能用户按键在M7内核调用;
四:软件代码编写:
MDK软件截图如下所示:
4.1 M7内核 串口3的数据回传功能:
static void MX_USART3_UART_Init(void) { /* USER CODE BEGIN USART3_Init 0 */ /* USER CODE END USART3_Init 0 */ /* USER CODE BEGIN USART3_Init 1 */ /* USER CODE END USART3_Init 1 */ huart3.Instance = USART3; huart3.Init.BaudRate = 115200; huart3.Init.WordLength = UART_WORDLENGTH_8B; huart3.Init.StopBits = UART_STOPBITS_1; huart3.Init.Parity = UART_PARITY_NONE; huart3.Init.Mode = UART_MODE_TX_RX; huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart3.Init.OverSampling = UART_OVERSAMPLING_16; huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1; huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; if (HAL_UART_Init(&huart3) != HAL_OK) { Error_Handler(); } if (HAL_UARTEx_SetTxFifoThreshold(&huart3, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK) { Error_Handler(); } if (HAL_UARTEx_SetRxFifoThreshold(&huart3, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK) { Error_Handler(); } if (HAL_UARTEx_DisableFifoMode(&huart3) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN USART3_Init 2 */ __HAL_UART_ENABLE_IT(&huart3,UART_IT_IDLE); HAL_UARTEx_ReceiveToIdle_IT(&huart3,RecBuffer3,reclength3); /* USER CODE END USART3_Init 2 */ }
串口中断回调函数如下所示:
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { if(huart->Instance==USART3) { //把收到的一包数据通过串口回传 HAL_UART_Transmit(&huart3,RecBuffer3,Size,0xff); //再次开启空闲中断接收,不然只会接收一次数据 HAL_UARTEx_ReceiveToIdle_IT(&huart3,RecBuffer3,reclength3); } }
4.2 M7内核的外部中断:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == GPIO_PIN_13) { HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_14); } }
直接翻转GPIO口就可以了。
4.3 M4内核:在主程序中使用hal_delay()实现翻转电平:
/* USER CODE BEGIN 3 */ HAL_Delay(100); HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0); } /* USER CODE END 3 */
4.4调试注意事项:
4.4.1程序卡死在启动阶段
电源配置问题:H755 支持 SMPS(开关电源)和 LDO(线性稳压器)两种供电模式。SMPS 效率更高,但必须确保芯片外围电路(特别是电感)的型号和参数完全符合数据手册要求。如果硬件焊接了错误的电感,可能导致内核供电异常,使得程序在初始化阶段就卡死。
务必检查 HAL_PWREx_ConfigSupply() 函数的返回值,并确认电源配置与你的硬件设计匹配。
时钟配置:H755 的时钟树比单核芯片复杂,有多个 APB 总线需要配置。需仔细检查 CubeMX 中的时钟配置,确保为两个核心设置的频率在芯片允许范围内。
4.4.2调试技巧。
双核同时调试:如果需要同时调试两个核心,在 keil或者STM32CubeIDE 的调试配置中,通常需要先分别启动 M7 和 M4 的调试会话(但先不运行),然后同时选择这两个调试线程再一起运行。有时需要勾选 halt all cores 之类的选项来同步两个核心的调试状态。
单独测试:在初期,可以尝试先只编写一个核心(比如 M7)的简单点灯程序,确保该核心能独立正常运行。然后再逐步添加另一个核心的功能和通信逻辑。
4.4.3固件更新考量
如果你的项目需要安全固件升级(SBSFU),常见的方案是让 M7 上的安全引导程序负责对整个镜像文件(包含 M7 和 M4 的应用程序代码)进行校验,验证通过后再跳转到应用程序并释放 M4 核心
五:演示视频如下所示: