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

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

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

+ t4 S7 R" e9 e, B$ ]5 i8 n
因为手上发现只有WL55是双核的,下次尝试试用一下其他芯片试试。
% ?" ]) q; Y* K4 v: Y' b( f2 J6 o) W/ S) s( z% |3 e
微信图片_20240525151256.png 0 W' o6 `: y: m; D: j
) P2 l! N8 G% I% S8 p7 t# E
它可以使用协处理器来使用双核。这种双核架构使得微控制器能够同时运行多个任务,提高系统的灵活性和性能。每个内核都具有独立的存储器、外设和时钟域,它们可以独立地运行和执行任务,也可以通过共享资源进行通信和同步。; @$ i! w6 E3 A) d1 m7 P

4 p/ D2 t0 O$ g% ^5 A" `4 b
STM32WL 系列提供了多核调度器(MCS)功能,可以动态地管理主内核和辅助内核之间的任务调度和切换,以优化系统性能和功耗。
( l/ K" x9 C. C6 h
8 Y& E- [" E$ W; w 微信图片_20240525151253.png 6 G& r( i- {% W4 f: y0 w2 w7 k
; n4 n& M3 A# @0 b; ?4 \
我们在使用CubeMX生成WL的代码的时候可以发现,有一个双核视图。) g8 e3 {/ u6 H' N3 t* n6 s: D

' ]6 V' Q7 [- F; q3 R
微信图片_20240525151251.png 2 }" E4 D2 O' t
! s4 s* |  U: A9 {
微信图片_20240525151241.png . G' z4 K0 ]- P; C

- W: y: Q; t# i& z我们发现其CubeMX界面中可以把不同的内容分配给不同的核心。
/ h+ [8 |3 e8 S1 ]4 S
! H. R0 \" U, P; a' `
创建任务的时候可以选择单核或者多核。6 H7 g1 Z) C9 ?6 |* l
( z* t* B5 v; S# K6 @0 ^! X7 l
微信图片_20240525151238.png 1 h6 Y1 F& M1 v+ n  b

% m' W2 ^/ t) Y7 ]3 d" L5 T7 ?( l0 e如官网的介绍,每个CPU享有单独的时钟域和外设。$ H5 N5 l" c& l* f  u

+ O6 _0 Q; b( C: u 微信图片_20240525151235.png
0 [% k" l$ }7 [2 m* A
! U* t. a: w* M- b' g( k. Z% T
从官网的原理图中得知,评估版中有三个LED灯,对应着PB15/9/11。这三个LED作为板载LED,我们将尝试利用双核的特性来尝试同时闪烁。6 x6 T4 f( P7 r+ ]9 J
& Z8 e, ~6 @2 Q9 `$ {( M+ \* F7 z
微信图片_20240525151232.png   p: p8 j5 I3 a# m0 x& n+ O

! G+ @7 m# W! }& D" s  u) v) F将LED的三个IO初始化。
6 X9 A% t7 A9 m& K; t5 V4 c  X+ T' B8 Y8 U7 P
还有一点非常重要,我们需要开启STM32的IPCC.这也是之后要使用无线的条件。4 R; v/ Y6 @% o

0 q/ H3 w" u. z3 g4 O7 [- h5 \ 微信图片_20240525151229.png 4 E# I$ g/ S+ R5 e. W

9 V+ k; Y: W# w: Y* m& j* aIPCC(Inter-Processor Communication Controller)是STM32WL系列微控制器中的一个功能模块,用于实现双核(Dual-Core)之间的通信。: R' Q# {6 p% U+ }* C) D4 u
; W5 i) n  c4 e

/ J$ W. _9 Q; l; k; [" e/ @8 U. hIPCC允许主核和副核之间进行通信和数据交换。1 ]/ c4 e4 N6 H
$ O" B- }7 ]5 s: ^9 o

5 f8 A1 y, v4 a) _2 n) u6 o 微信图片_20240525151226.png
8 m, P- m; P/ O1 a

6 v; \; z( x, m9 T! G" ~! D% C创建工程后发现其任务由两个核组成,我们尝试在其中分别添加代码。" u" z$ Y) ]1 W# G5 p2 a& r3 |  d& P

4 N  ^3 g  F# N% {5 Q- n
后面的烧录问题卡了我四个多小时,单独写篇文章来描述一下这个烧录的问题。
4 M9 J+ N* Y% X1 t5 N! m7 V$ G
+ n3 q6 ^' x8 h" Y& T8 r
我们在两个工程的main函数中分别添加LED的代码。% o, ~, z5 F: D, i; L3 m
  1. while (1)! X4 q+ K( }, r/ O$ ]
  2.   {
    0 g9 L- ~5 D) t: u9 K* N- r5 e. H0 E
  3.     /* USER CODE END WHILE */# j0 [0 \% m2 a# C7 ?
  4. 7 [3 P; K4 u$ \/ X# H1 t. v+ z
  5.     /* USER CODE BEGIN 3 */
    % n4 W" j( K( G  G
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);
    & z1 b" u$ p' l4 |* p; v3 m% g
  7.     HAL_Delay(500);
    9 F* u8 p% x5 H
  8.   }
复制代码

7 [5 @( q/ e. Z- i' L6 m' f0 C在第二个核的main函数中也添加LED的代码。
& J2 u  r, |+ P3 F& q
  1. while (1)/ p1 F% g& P  g) T$ @* e- G
  2.   {
    - K* D! s' P; z
  3.     /* USER CODE END WHILE */( F  t& W* b" O; a3 w' A. d
  4. 2 ]$ Z1 ]5 W2 z! }
  5.     /* USER CODE BEGIN 3 */
    2 \5 A6 F2 b+ d3 _( ^9 @4 s
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
    ) I/ d# `% V) k' |8 q
  7.     HAL_Delay(500);3 X; D: V$ G6 M) Q0 \6 E
  8.   }
复制代码

/ _3 y$ \2 Y6 s( E
" T' _% ~1 ?! h$ C  t6 w
+ T# P+ v) `) ?. }
转载自 :电路小白" R: T. ?$ q! L: U
如有侵权请联系删除7 V( \' o% e9 W& k0 r
. X% I" t8 X. N

8 r' U* w; u, l' b
1 Q( Z( v( A5 m! ^3 w
收藏 评论0 发布时间:2024-5-25 15:13

举报

0个回答

所属标签

相似技术帖

官网相关资源

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