极客秀
搜索

STM32中的多核多线程!STM32WL55中开启双核的使用及说明

之前在介绍FreeRTOS的时候,介绍过FreeRTOS得益于任务之间切换迅速,可以实现类似于多核的效果。
不过我们所使用的常规STM32通常都是单核芯片,它永远也不能实现真正的多核,不同的任务还是依旧会被其他任务的阻塞而阻塞。
而今天在测试ST的STM32WL55评估版时,意外的发现其不仅仅是一块具有无线通讯能力的芯片,还具有双核,同时装载M4和M0+的内核。
因为手上发现只有WL55是双核的,下次尝试试用一下其他芯片试试。

它可以使用协处理器来使用双核。 这种双核架构使得微控制器能够同时运行多个任务,提高系统的灵活性和性能。
每个内核都具有独立的存储器、外设和时钟域,它们可以 独立地运行和执行任务 ,也可以通过共享资源进行通信和同步。 STM32WL
系列提供了多核调度器(MCS)功能,可以动态地管理主内核和辅助内核之间的任务调度和切换,以优化系统性能和功耗。

我们在使用CubeMX生成WL的代码的时候可以发现,有一个双核视图。

我们发现其CubeMX界面中可以把不同的内容分配给不同的核心。

创建任务的时候可以选择单核或者多核。

如官网的介绍,每个CPU享有单独的时钟域和外设。

从官网的原理图中得知,评估版中有三个LED灯,对应着PB15/9/11。这三个LED作为板载LED,我们将尝试利用双核的特性来尝试同时闪烁。

将LED的三个IO初始化。 还有一点非常重要,我们需要开启STM32的IPCC.这也是之后要使用无线的条件。

IPCC(Inter-Processor Communication
Controller)是STM32WL系列微控制器中的一个功能模块,用于实现双核(Dual-Core)之间的通信。
IPCC允许主核和副核之间进行通信和数据交换。

创建工程后发现其任务由两个核组成,我们尝试在其中分别添加代码。 后面的烧录问题卡了我四个多小时,单独写篇文章来描述一下这个烧录的问题。
我们在两个工程的main函数中分别添加LED的代码。


  while (1)  {    /* USER CODE END WHILE */  
    /* USER CODE BEGIN 3 */    HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);    HAL_Delay(500);  }

在第二个核的main函数中也添加LED的代码。


  while (1)  {    /* USER CODE END WHILE */  
    /* USER CODE BEGIN 3 */    HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);    HAL_Delay(500);  }

之后我们烧录代码,这里再次吐槽一下,由于是第一次烧录双核的芯片,最简单的点灯差点给我送走了。

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容