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

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

[复制链接]
攻城狮Melo 发布时间:2024-5-25 15:13
今天在测试ST的STM32WL55评估版时,意外的发现其不仅仅是一块具有无线通讯能力的芯片,还具有双核,同时装载M4和M0+的内核。. ]8 V  ?6 O, @' g7 e
% G6 s4 }( S! `8 X6 K& O! z7 z
因为手上发现只有WL55是双核的,下次尝试试用一下其他芯片试试。, Q* a6 B! c8 G% R2 i2 q  u

& ~2 K0 Q5 t" F/ [2 u9 K 微信图片_20240525151256.png
% G& t' w& K0 z+ j0 H
' c% C0 b4 L3 M- S; r( D* N它可以使用协处理器来使用双核。这种双核架构使得微控制器能够同时运行多个任务,提高系统的灵活性和性能。每个内核都具有独立的存储器、外设和时钟域,它们可以独立地运行和执行任务,也可以通过共享资源进行通信和同步。+ ^* Z1 z  X7 D, B  h8 F
- w' ~* f6 A/ f; v- I; k1 I
STM32WL 系列提供了多核调度器(MCS)功能,可以动态地管理主内核和辅助内核之间的任务调度和切换,以优化系统性能和功耗。4 `" m4 n. J- E& J
" B3 d' n" U6 L, T+ K. @$ Q
微信图片_20240525151253.png
, d' \$ U# A. P# v

7 K" x, ?) t% @3 n我们在使用CubeMX生成WL的代码的时候可以发现,有一个双核视图。9 ~* @* j( m' q0 `# l9 J( v

* |0 N5 S: R) y* t; X& k) R" {
微信图片_20240525151251.png
4 u" q$ Q4 \  T8 Z+ K& l' g8 Y7 m! e
  O/ x/ Q8 x3 z0 O. [& M 微信图片_20240525151241.png
  a0 j) a" n; C" N
. }( w; N4 M3 W5 \" R4 g% H! o8 h
我们发现其CubeMX界面中可以把不同的内容分配给不同的核心。
) M! R) ]; d3 N8 m7 m, [; A
" r: c9 ?( e8 F7 h0 }# W3 h
创建任务的时候可以选择单核或者多核。  Y" e+ \% D7 c9 T9 ~  ^0 X
8 V! I. k4 w" e7 E
微信图片_20240525151238.png
2 I# s1 |3 W* Y8 \$ Y" q. e$ w$ p. U& \3 p5 s
如官网的介绍,每个CPU享有单独的时钟域和外设。
0 O, P+ X/ _6 c. u! J4 o
  [% m5 Y: q$ P+ v- \* q4 F8 c( _ 微信图片_20240525151235.png * U1 ^# J' M1 t8 Q& j  I
, v! }5 `, ]2 Y9 p6 ^2 r: N/ Y+ F5 v
从官网的原理图中得知,评估版中有三个LED灯,对应着PB15/9/11。这三个LED作为板载LED,我们将尝试利用双核的特性来尝试同时闪烁。
% N& b" s/ E- m: `
9 M0 F7 ^: k, X' b 微信图片_20240525151232.png ( \( L* k7 q. H
: g& U, ^  d$ |. \, O
将LED的三个IO初始化。' u) @! {, ^3 {

2 ]3 j, P( f6 Y( A2 x1 k8 S
还有一点非常重要,我们需要开启STM32的IPCC.这也是之后要使用无线的条件。
( V  B  b: {- I, ?' n( I
$ ]7 j) a4 f  }" B3 b 微信图片_20240525151229.png 2 G4 i/ ]' ?! L% F
1 ?4 a# k8 @# W4 d3 @- L
IPCC(Inter-Processor Communication Controller)是STM32WL系列微控制器中的一个功能模块,用于实现双核(Dual-Core)之间的通信。2 ?2 K0 z6 e, r

4 M  x- w! a$ ~$ L5 c, p) {$ o( L/ c
  j1 y: y( G* C5 x: k2 z; J8 ]: y
IPCC允许主核和副核之间进行通信和数据交换。9 g- T6 c! u7 b6 b1 x
- L& Z( t, V1 r  Y# N
; d% A  s$ C6 V$ j! _% _2 a, ~
微信图片_20240525151226.png 4 }: K2 Q2 G& O+ S# y
% K, Q9 l3 Q8 m
创建工程后发现其任务由两个核组成,我们尝试在其中分别添加代码。
' k. P# q2 I0 ]5 `" ]+ a; i9 ?, d3 E2 y1 y0 X5 D
后面的烧录问题卡了我四个多小时,单独写篇文章来描述一下这个烧录的问题。4 L! E( V' G, ]* O. K) t3 h- r9 q+ a
+ z4 l1 f5 z7 Y+ {! {9 {7 k
我们在两个工程的main函数中分别添加LED的代码。
0 N! h' P1 H1 ~+ A$ b
  1. while (1)
    + Y  I( f1 C2 V
  2.   {
    " W0 ^/ j9 E( c1 q. U; r8 a8 b
  3.     /* USER CODE END WHILE */6 H6 s2 U( u0 K

  4. 8 S& t7 I0 A' x- s0 x7 K$ G
  5.     /* USER CODE BEGIN 3 */6 S+ w( h$ ?, V+ k- l3 [  b: M0 A
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);
    - b, u7 ^$ q* }' u
  7.     HAL_Delay(500);
    0 T9 r+ C& e7 }- H
  8.   }
复制代码
! h. h# y( a4 J/ c3 q
在第二个核的main函数中也添加LED的代码。' O, o& Z% \  t" A/ `8 H9 H
  1. while (1)9 c" V5 a1 `: d3 Y) Y* I5 E
  2.   {4 w3 O$ Q3 o# y% T
  3.     /* USER CODE END WHILE */
      T' v) P* A; C! X
  4. $ S) F" E2 e3 H, a
  5.     /* USER CODE BEGIN 3 */: p1 }2 e* x/ l" S" u
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
    8 y& x  l6 ~' b
  7.     HAL_Delay(500);; a' v$ n4 S3 T% W3 J( F1 q& E
  8.   }
复制代码

1 \. [7 y) e+ J6 `
! r  m( G  R; N! n+ G* D
) R) }2 o2 ^; ]1 D& y
转载自 :电路小白* q& J& q6 i* e2 k9 i. {
如有侵权请联系删除
0 I( D; ^. J( z+ H0 P7 _7 g4 D" p

7 T8 s* o- j$ K6 L9 D$ _9 e( J! V5 ^' o  X3 v
" E* k3 t+ Z2 F* `
收藏 评论0 发布时间:2024-5-25 15:13

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版