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

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

[复制链接]
攻城狮Melo 发布时间:2024-5-25 15:13
今天在测试ST的STM32WL55评估版时,意外的发现其不仅仅是一块具有无线通讯能力的芯片,还具有双核,同时装载M4和M0+的内核。; y; r! t6 E" S

& N( }% ^; [! F% D( `
因为手上发现只有WL55是双核的,下次尝试试用一下其他芯片试试。
9 i7 `1 U8 [7 `" z4 ]" @; f  N( H5 W6 }, s6 m7 c1 H' }
微信图片_20240525151256.png
4 H3 p9 B3 O/ @% G% S5 \) D/ |. ~3 C. H& _; L/ k% k
它可以使用协处理器来使用双核。这种双核架构使得微控制器能够同时运行多个任务,提高系统的灵活性和性能。每个内核都具有独立的存储器、外设和时钟域,它们可以独立地运行和执行任务,也可以通过共享资源进行通信和同步。
$ F/ V/ V. Y6 x, y# u
  M7 f8 n$ y' M8 p$ M
STM32WL 系列提供了多核调度器(MCS)功能,可以动态地管理主内核和辅助内核之间的任务调度和切换,以优化系统性能和功耗。. [% x5 h% K  D# n- d- X, _* e

! S. _4 l; r; @4 g! }0 ^- \' { 微信图片_20240525151253.png
7 T) J" K5 H9 v1 {3 k
7 Z. h+ U; f/ F, k: k0 b3 x
我们在使用CubeMX生成WL的代码的时候可以发现,有一个双核视图。, \' C! j" _5 ~& M0 |

2 h$ z& k- C. W, W
微信图片_20240525151251.png
" \; s9 B/ c. v3 X2 O
) Z2 o$ Q# K: I3 J 微信图片_20240525151241.png 3 [; A+ N9 m0 ^+ c: a. J7 D) W

$ H3 j, i, y; c- u; R" y1 `# l/ \我们发现其CubeMX界面中可以把不同的内容分配给不同的核心。
! D: F, |' G( a: _  C; O
- ^( h$ o; e  t3 z& [3 w2 \! v4 L. E
创建任务的时候可以选择单核或者多核。6 w. G) J; N6 X# T  `4 d

  l8 ~  M+ K2 V
微信图片_20240525151238.png
4 F' ?+ d7 c* j3 d4 X" q2 y7 Q
: q  y6 t- I% R0 `如官网的介绍,每个CPU享有单独的时钟域和外设。; C  d5 ?2 K- a8 ^; a& J/ J* B( U
$ b5 e5 p+ e, u% D
微信图片_20240525151235.png " u( G1 B/ _' y$ n* ~  @
; c' @3 k# E# O8 i: R
从官网的原理图中得知,评估版中有三个LED灯,对应着PB15/9/11。这三个LED作为板载LED,我们将尝试利用双核的特性来尝试同时闪烁。: x8 B# p1 T, \, C7 i& \
4 Z7 b5 n, y$ O1 L& w
微信图片_20240525151232.png - O% g8 `! G0 j$ z& Q' y" J
# n0 x/ z9 x  D6 G; c. n( G; x
将LED的三个IO初始化。
/ P, w5 _4 X$ t& c+ F; I+ I
$ l8 f3 D* x3 S
还有一点非常重要,我们需要开启STM32的IPCC.这也是之后要使用无线的条件。
' T5 u9 U8 p0 j$ G& d
( E( \% |! S/ A5 | 微信图片_20240525151229.png
& t& E+ b( G& f9 D, m- v
9 Q# y; E5 G$ T: ^' d2 V
IPCC(Inter-Processor Communication Controller)是STM32WL系列微控制器中的一个功能模块,用于实现双核(Dual-Core)之间的通信。
  o$ [! E# c8 K' M( G! k9 ]: }' {8 `4 J/ t. u7 t* u* p
: G5 v: l- _# ^8 ~" V
IPCC允许主核和副核之间进行通信和数据交换。
8 Z2 h6 ]& p2 L5 k/ h$ d# ]" y0 q4 K" N8 K( z+ W$ K0 R) }
: ?. w3 N: ?/ i3 Z1 n+ p. B
微信图片_20240525151226.png 7 o3 S/ a5 }' a2 N8 s% n

* {: ~- Q; b! D$ F( K* ]6 U( J创建工程后发现其任务由两个核组成,我们尝试在其中分别添加代码。
& K- F/ H( M' q+ c+ q! ?0 d+ M' Z1 Q8 ?3 }  x
后面的烧录问题卡了我四个多小时,单独写篇文章来描述一下这个烧录的问题。
+ e! C) E+ I7 o2 e' C
5 B( C- L, F! w( }
我们在两个工程的main函数中分别添加LED的代码。. a9 k6 @6 O2 p/ L, C$ H) N! o' m
  1. while (1)
    1 a9 K! ~. }/ \: A7 w
  2.   {% ]$ `$ Y# i( m  |
  3.     /* USER CODE END WHILE */# T3 ^& ]3 j) e

  4. 2 C: z& T3 S) {; V7 N$ v
  5.     /* USER CODE BEGIN 3 */
    $ x1 E" J; O: H" o
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);! r; T! v9 `1 B4 `6 ]/ [( T4 }: ]) T1 j* m
  7.     HAL_Delay(500);
    ; I: ^# d. p. j. H9 m
  8.   }
复制代码

: f  `5 h+ U/ L& G. b在第二个核的main函数中也添加LED的代码。
+ g5 ?4 X: _: s, {, m
  1. while (1)
    $ {: F" `2 Y, z0 M5 j# O, }; _6 ?
  2.   {
    5 b8 N6 A: Q# m& [+ G
  3.     /* USER CODE END WHILE */: |* m3 L9 w8 R  y" {$ p3 q7 ]
  4. ' s3 U  a7 Y' ^7 n/ g
  5.     /* USER CODE BEGIN 3 */! t- G. l8 p1 U* j
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
    5 s4 k) n) K9 A1 v) h( `
  7.     HAL_Delay(500);
    4 V% C0 P" F9 [: C
  8.   }
复制代码
3 d( M3 M' F, a7 Y

8 H$ s# {0 ~( e6 a# y( A3 V
2 ~  G* Y) F4 j6 @4 e6 d( z5 `% K
转载自 :电路小白
# Q' X4 W& U+ N如有侵权请联系删除
2 P& W& W. b7 P: @4 c6 M+ D5 ^

7 T  D0 A1 }8 @& t+ [# W- L9 x" M% H! @: ^' i* _

1 t3 ]- R! @3 X/ h* a
收藏 评论0 发布时间:2024-5-25 15:13

举报

0个回答

所属标签

相似技术帖

官网相关资源

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