[经验] stm32h745双核通信的一个实验

damiaa   2023-11-28 20:44 楼主

                                                          stm32h745双核通信的一个实验

 

Hardware semaphore (HSEM)硬件信号量
硬件信号量块提供基于32(32位)寄存器的信号量。这些信号量可以用来确保在不同核之间运行的不同进程之间的同步。HSEM 提供了一种非阻塞机制,以原子方式锁定信号量。
信号量锁,通过两种方式提供:
2-step lock: 通过写入 COREID 和 PROCID 到信号量,然后读取 check
  1. step lock: 通过读取信号量中的 COREID。
当信号量被解锁时中断生成。
每个信号量可能在一条中断线上产生一个中断。
信号量清除保护。
当 COREID 和 PROCID 匹配时,信号量才被解锁。
每个 COREID 的全局信号量清除
主要功能 HSEM 包括以下功能:
•32位(32位)信号量
•8位 PROCID
•4位 COREID
•每个处理器一条中断线
•锁定指示
 
具体概念请看rm0399-stm32h745755-and-stm32h747757-advanced-armbased-32bit-mcus-stmicroelectronics 第11章节
实验

         A,打开上次的双核点灯的例子,进入配置页面

202759whnitw03uu7hwyp8.png


B,点击System Core进去,配置NVIC1为关闭(不用配),配置NVIC2如下:
202759fmdantsnjjvhkcnt.png
202759czj8t0098849gg46.png

 

C,m4核的main.c中加入:

 main函数前加入

   int notifReceived;

   void HAL_HSEM_FreeCallback(uint32_t SemMask){

       notifReceived=1;

       HAL_HSEM_ActivateNotification(__HAL_HSEM_SEMID_TO_MASK(HSEM_ID_0));

   }

     

main函数中:       

 MX_GPIO_Init();//这里是自动加入的

/* USER CODE BEGIN 2 */

HAL_HSEM_ActivateNotification(__HAL_HSEM_SEMID_TO_MASK(HSEM_ID_0));

/* USER CODE END 2 */

 

/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1)

{

   if(notifReceived == 1)

   {

   notifReceived=0;

   HAL_GPIO_WritePin(LD1_GPIO_Port, LD1_Pin, GPIO_PIN_SET);  

   HAL_Delay(500);

   HAL_GPIO_WritePin(LD1_GPIO_Port, LD1_Pin, GPIO_PIN_RESET);

   HAL_Delay(500);

}

/* USER CODE END WHILE */

 

/* USER CODE BEGIN 3 */

}

 

m7核的main.c改动如下:

while (1)

{

   HAL_HSEM_FastTake(HSEM_ID_0);

   for(int i=0;i<10;i++){

   HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);

   HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_SET);

   HAL_Delay(200);

   HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);

   HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);

   HAL_Delay(200);

}

HAL_HSEM_Release(HSEM_ID_0,0);

/* USER CODE END WHILE */

 

/* USER CODE BEGIN 3 */

}

各自编译,调试,然后就发现m7核点亮的ld2和ld3闪烁10次后,m4核点的ld1闪烁一次。这样就实现了m7和m4之间的通信。
 
本帖最后由 damiaa 于 2023-11-28 20:48 编辑

回复评论 (6)

2

 

点赞  2023-11-28 20:45

STM32H743参考手册中文版  STM32h745的只看到英文版的。

STM32H743参考手册中文版.pdf (36.02 MB)
(下载次数: 29, 2023-11-28 20:51 上传)

 

点赞  2023-11-28 20:52

HSEM这个是基于什么通信?类似串口吗?

点赞  2023-11-29 17:04
引用: wangerxian 发表于 2023-11-29 17:04 HSEM这个是基于什么通信?类似串口吗?

是stm32h7 双核芯片里面搞的一个硬件信号量 专门给两个核之间通信用的。

点赞  2023-11-30 09:20
引用: damiaa 发表于 2023-11-30 09:20 是stm32h7 双核芯片里面搞的一个硬件信号量 专门给两个核之间通信用的。

感觉有点意思,不过这个通信程序ST应该已经封装好了吧。

点赞  2023-11-30 10:38
引用: wangerxian 发表于 2023-11-30 10:38 感觉有点意思,不过这个通信程序ST应该已经封装好了吧。

是啊。会用就行。

点赞  2023-11-30 12:24
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复