你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32WL55中开启双核的使用经验分享

[复制链接]
攻城狮Melo 发布时间:2024-5-25 15:13
今天在测试ST的STM32WL55评估版时,意外的发现其不仅仅是一块具有无线通讯能力的芯片,还具有双核,同时装载M4和M0+的内核。4 l7 W% n0 f% G7 w& B! l
( h$ \$ V5 _$ b) _; N- [1 A5 J
因为手上发现只有WL55是双核的,下次尝试试用一下其他芯片试试。
5 Z; e- H+ l2 y5 [1 W
) k; i6 d  n& {8 j 微信图片_20240525151256.png
0 H6 E- n/ k) e; [6 X4 c1 t6 |% M
& _4 C: X' P% {它可以使用协处理器来使用双核。这种双核架构使得微控制器能够同时运行多个任务,提高系统的灵活性和性能。每个内核都具有独立的存储器、外设和时钟域,它们可以独立地运行和执行任务,也可以通过共享资源进行通信和同步。
9 K# O" t9 n, u
# u1 ~: X  g. f# m. Y. s7 a
STM32WL 系列提供了多核调度器(MCS)功能,可以动态地管理主内核和辅助内核之间的任务调度和切换,以优化系统性能和功耗。8 f! c4 h. t/ Z0 M4 {) M+ n3 N

/ X1 J3 D# d0 X4 N* @* {% ? 微信图片_20240525151253.png " Q9 e' [" x7 l: t/ ~$ d
! `. a  v* k! a4 d
我们在使用CubeMX生成WL的代码的时候可以发现,有一个双核视图。
: B, f) K( K$ W
. h& J$ K% r8 `0 _) ?8 a- C
微信图片_20240525151251.png * i* ~9 k* X8 m
8 \" I: L: }5 @  }
微信图片_20240525151241.png
; c8 |7 @8 v0 E; }3 s
, A7 s* q9 b8 |% W4 g& u& H
我们发现其CubeMX界面中可以把不同的内容分配给不同的核心。9 X, e5 M. G0 Q" |

! u" U* [6 b- h% f2 e
创建任务的时候可以选择单核或者多核。
7 \5 D9 e9 F8 }# k/ @2 h
5 }, W- a( h; j# F
微信图片_20240525151238.png
$ c* `! i* |6 E$ Z6 }$ _  r5 T3 d8 ?6 C# C& y0 h3 z! p
如官网的介绍,每个CPU享有单独的时钟域和外设。/ v6 C; k, j: {4 r. n" }$ _
% a. F7 i8 y7 J3 b
微信图片_20240525151235.png ' Y; l# A& E2 V5 d; M% M
& N% t9 W  m1 x. |$ _
从官网的原理图中得知,评估版中有三个LED灯,对应着PB15/9/11。这三个LED作为板载LED,我们将尝试利用双核的特性来尝试同时闪烁。( Z: W! A# R( M6 P
9 t! Z9 u1 V: j% y5 X( n
微信图片_20240525151232.png / Q9 c9 ^0 I; G6 b' I- j) A

8 L0 }+ _, r  a; j2 Y- {7 c将LED的三个IO初始化。
- |6 d0 L. N" K7 Z9 E+ l* K: J4 |( a, S
还有一点非常重要,我们需要开启STM32的IPCC.这也是之后要使用无线的条件。, u# ^) H  s3 _& |& B
: Y" J& Z8 g# x5 i
微信图片_20240525151229.png 1 `' d3 n, u9 l* D  f) j3 l: ~+ e: p6 W7 s

' ]# j# o$ Q' O9 K) w- V* M. w5 |9 w  ]IPCC(Inter-Processor Communication Controller)是STM32WL系列微控制器中的一个功能模块,用于实现双核(Dual-Core)之间的通信。
5 `$ D; H! u  A" l9 T5 K  `1 m, @9 a! F6 `9 {5 F7 w

" W. P( j# y+ X9 g- FIPCC允许主核和副核之间进行通信和数据交换。
; t! l4 ?7 s; E2 j% S$ r& W
4 F) l$ S9 O$ ?% _# B5 }' Y2 j

0 l* d/ X, K4 B$ g  p) r 微信图片_20240525151226.png , P& {3 _' q. I4 j$ s9 x$ m
$ m+ [- X! y3 O5 s, v; B3 ~' [: z8 z
创建工程后发现其任务由两个核组成,我们尝试在其中分别添加代码。
6 g3 @2 R* g6 J; R
4 C- K/ d9 n9 V6 K/ z/ {4 M7 L
后面的烧录问题卡了我四个多小时,单独写篇文章来描述一下这个烧录的问题。
$ L+ O* Y# {$ M7 x& n+ X6 @6 L/ f# l( a7 ~8 b: _+ a
我们在两个工程的main函数中分别添加LED的代码。( i$ i$ K7 h! i
  1. while (1): w( o- p2 p# P
  2.   {  r4 X4 q7 ]1 B& Q6 D) l0 H" _
  3.     /* USER CODE END WHILE */
    * p" z# h" c; X- T
  4. * f" ?7 s) V3 u' I! ?# f0 `
  5.     /* USER CODE BEGIN 3 */0 Q' G  t+ B  r
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);4 F2 X. P" v9 s  q
  7.     HAL_Delay(500);+ u# k- z0 P* x' T/ P7 k
  8.   }
复制代码
2 D: d/ j8 C. H7 p4 S
在第二个核的main函数中也添加LED的代码。% {( P& x$ x+ {8 F
  1. while (1)
      Y# \% L: \1 N  m9 n# M
  2.   {
    7 k! k; }, y- _. p3 d+ q8 L0 H
  3.     /* USER CODE END WHILE */+ {% t6 |* b4 F5 M% Q

  4. & E+ v0 F6 j! |/ \( C+ X/ I
  5.     /* USER CODE BEGIN 3 */
    8 o; Z* W2 [5 k' r) _
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
    9 o. {' R3 a0 |1 E1 S
  7.     HAL_Delay(500);  ]& k1 B  |9 A6 F+ _7 `0 x
  8.   }
复制代码
" K5 T& \' e+ r7 Z4 U$ `
9 O+ }/ j1 ^7 @, S
* \" z/ t( B9 o. Y9 n0 x
转载自 :电路小白7 s! n) C' _* C+ h) i4 F
如有侵权请联系删除5 S: c1 {1 T/ o0 v0 s

% E3 L  ?0 b) X: ?/ I5 g) p6 z6 _! n2 P7 K1 x
6 D' v( c/ _) e( x; j/ K. u% G
收藏 评论0 发布时间:2024-5-25 15:13

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版