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,双核各自独立运行。
|