STM32H7双核单片机的两个内核可以独立运行,也可以协同工作,核间提供了32个硬件semaphore(简称HSEM)用来控制双核之间或不同进程之间的同步。每个内核都有自己的片内SRAM和Flash存储空间,代码需要分别烧写到不同的地址空间中。外设是共享的,具体归属由时钟使能决定。
在实际应用中,通常会使用内部通信机制(IPC)来实现双核间的数据通信与信息同步。常见的同步方式包括基于信号量和中断。
应用优势
使用STM32H7双核单片机有以下几个优势:
提高执行效率:双核并行运行可以显著提升程序代码的执行效率和系统性能。 优化功耗:通过灵活选择不同内核及系统工作模式,可以有效优化和降低整体功耗。 加快开发进度:开发人员可以分工合作,分别开发不同内核的工程项目,从而加快开发进度。 降低成本:高集成度和丰富的外设可以大大降低BOM成本,并提升产品的稳定性。
STM32H7x5系列微控制器集成了工作频率高达480 MHz的Arm® Cortex®-M7内核(具有双精度浮点单元)以及工作频率高达240 MHz的Arm® Cortex®-M4内核(具有单精度浮点单元)的卓越性能,可选的扩展环境温度高达125 °C。 性能- 工作于480 MHz的fCPU频率(Cortex-M7)以及240 MHz的CPU频率(Cortex-M4)下,从闪存执行程序时,能够提供3224 CoreMark / 1327 DMIPS的性能,利用其L1缓存实现了零等待执行。
- L1缓存(16 KB的I-缓存 +16 KB的D-缓存)提高外部存储器的执行性能。
高能效- 多电源域架构可实现将不同的电源域配置为低功耗模式,进而优化功耗效率。
- 内置SMPS,用于降低电源电压。还可用于为外部电路供电,以及特定应用情况下结合LDO共同使用。
- USB调节器提供嵌入式物理接口层(PHY)。
- 在内核运行模式(外设外设关)和SMPS情况下,典型功耗为145 µA/MHz @VDD = 3.3 V和25 °C
- 低功耗待机模式下的典型功耗电流为2.43 µA
- 带RTC的VBAT模式(低功耗模式)下通常为460 nA
图形- LCD-TFT控制器接口支持双层图形
- Chrom-ART Accelerator™提高了图形内容创建速度,并为其他应用节省了MCU内核处理带宽
- JPEG硬件加速器,可进行快速JPEG编码和解码,从而减轻CPU编解码负荷
片内外设- 多达35个通信接口包括FD-CAN、USB 2.0高速/全速、以太网MAC、摄像头接口
- 可利用带有32位并行接口或双模Quad-SPI串行闪存接口的灵活存储控制器轻松扩展存储器容量
- 模拟外设:12位DAC,快速16位ADC
- 16位高精度定时器上的多个16位和32位定时器运行频率高达480 MHz
STM32H7x5产品提供1到2 MB的Flash存储器,具有以下结构的1 MB SRAM:192 KB的TCM RAM(包括64 KB的ITCM RAM和128 KB的DTCM RAM,用于时间关键型程序和数据),64 KB、288 KB或512 KB的用户SRAM,以及用于在最低功耗模式下保存数据的备份域4 KB SRAM。 时钟配置,配置为M7运行400MHz,M4运行200MHz 电源配置,直接SMPS 电源配置十分重要,如果遇到无法启动,stlink识别不到芯片,参考官方社区解决方法https://community.st.com/t5/stm3 ... i-disco/td-p/285042 Connect the BOOT0 pin to 3,3V.
Power on the board
Remove the 3,3V from the BOOT pin (but do not power off the board)
Reset the chip by using the reset pin (black button on the Nucleo Board)
GPIO配置初始化的核心
GPIO配置初始化的核心 串口配置 在M7核添加测试代码 while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
LD7_Toggle();
LD8_Toggle();
HAL_Delay(200);
printf("hello %d %f\n",i++,j);
j+=0.0234;
}
M4添加测试代码 while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
LD6_Toggle();
HAL_Delay(500);
}
双核启动的配置,生成的工程框架已经包含,M7部分
int32_t timeout;
/* USER CODE END Boot_Mode_Sequence_0 */
/* USER CODE BEGIN Boot_Mode_Sequence_1 */
/* Wait until CPU2 boots and enters in stop mode or timeout*/
timeout = 0xFFFF;
while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) != RESET) && (timeout-- > 0));
if ( timeout < 0 )
{
Error_Handler();
}
/* USER CODE END Boot_Mode_Sequence_1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN Boot_Mode_Sequence_2 */
/* When system initialization is finished, Cortex-M7 will release Cortex-M4 by means of
HSEM notification */
/*HW semaphore Clock enable*/
__HAL_RCC_HSEM_CLK_ENABLE();
/*Take HSEM */
HAL_HSEM_FastTake(HSEM_ID_0);
/*Release HSEM in order to notify the CPU2(CM4)*/
HAL_HSEM_Release(HSEM_ID_0,0);
/* wait until CPU2 wakes up from stop mode */
timeout = 0xFFFF;
while((__HAL_RCC_GET_FLAG(RCC_FLAG_D2CKRDY) == RESET) && (timeout-- > 0));
if ( timeout < 0 )
{
Error_Handler();
}
M4部分
/*HW semaphore Clock enable*/
__HAL_RCC_HSEM_CLK_ENABLE();
/* Activate HSEM notification for Cortex-M4*/
HAL_HSEM_ActivateNotification(__HAL_HSEM_SEMID_TO_MASK(HSEM_ID_0));
/*
Domain D2 goes to STOP mode (Cortex-M4 in deep-sleep) waiting for Cortex-M7 to
perform system initialization (system clock config, external memory configuration.. )
*/
HAL_PWREx_ClearPendingEvent();
HAL_PWREx_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFE, PWR_D2_DOMAIN);
/* Clear HSEM flag */
__HAL_HSEM_CLEAR_FLAG(__HAL_HSEM_SEMID_TO_MASK(HSEM_ID_0));
/* USER CODE END Boot_Mode_Sequence_1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
默认双核同时启动,启动后M7等待M4进入stop模式,M7初始化时钟、HAL,通过硬件信号量唤醒M4,M4醒来后初始化HAL,双核各自独立运行。
|