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

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

[复制链接]
攻城狮Melo 发布时间:2024-5-25 15:13
今天在测试ST的STM32WL55评估版时,意外的发现其不仅仅是一块具有无线通讯能力的芯片,还具有双核,同时装载M4和M0+的内核。
0 f' O2 o" m$ I3 b. D, K# i) k0 i0 O  T$ m! r; F
因为手上发现只有WL55是双核的,下次尝试试用一下其他芯片试试。; r4 ]& |4 R  g% s! V
1 e( S; U, ?( c; b7 x
微信图片_20240525151256.png * I3 a3 U( f# {) J3 v+ [% l
0 f4 `+ c; ^& m$ K6 k3 D" G7 a9 Y: P
它可以使用协处理器来使用双核。这种双核架构使得微控制器能够同时运行多个任务,提高系统的灵活性和性能。每个内核都具有独立的存储器、外设和时钟域,它们可以独立地运行和执行任务,也可以通过共享资源进行通信和同步。, p' c3 s& e2 Q- X6 h) \

7 V" w; G7 [' j- x8 z$ q
STM32WL 系列提供了多核调度器(MCS)功能,可以动态地管理主内核和辅助内核之间的任务调度和切换,以优化系统性能和功耗。
8 Y- c& {% y& Q& F* ~
" @1 b. ]! S6 C! E 微信图片_20240525151253.png
* J& Y/ i% F! l) E8 n

% R0 i$ J" \4 u, \我们在使用CubeMX生成WL的代码的时候可以发现,有一个双核视图。
5 ~  |( x9 c0 H2 F+ h. _8 r! Q9 ^% f+ p' Q7 p* Z8 \
微信图片_20240525151251.png . G: A+ r0 I$ D

+ O% n7 g( L, ^ 微信图片_20240525151241.png
" k$ d) F/ t* v7 o
4 M2 ~4 N% m5 S+ A5 t
我们发现其CubeMX界面中可以把不同的内容分配给不同的核心。
' {- s+ b9 @; H- [: P0 C8 d. u
: j! j6 Q% ^7 ?9 b
创建任务的时候可以选择单核或者多核。9 o5 G% e3 u* M. {. k/ g  B, E9 E
- u3 \0 \1 r& ]+ u+ r0 @* v8 X, X9 [
微信图片_20240525151238.png
. ~$ B0 J$ t1 }! |; c. j5 U  |
" X$ {1 Z; W0 T8 |* g! y5 ~3 G8 A如官网的介绍,每个CPU享有单独的时钟域和外设。
8 p0 N0 I# h4 H# t2 P. T. R
3 c- A; M# u4 D4 y; A) p 微信图片_20240525151235.png
$ k% Q0 b  e( o2 K# _! k6 o- }

3 A) A3 }) n7 Z9 F8 R从官网的原理图中得知,评估版中有三个LED灯,对应着PB15/9/11。这三个LED作为板载LED,我们将尝试利用双核的特性来尝试同时闪烁。1 T5 b$ i" [7 E" R

/ J& p1 J: @2 b, X* t 微信图片_20240525151232.png
9 t( U. J, V' L) ^

, B' w1 m/ A+ ?. V将LED的三个IO初始化。
( C4 I! B& s% A' ]& g' J! I# U
1 b+ Q, M! t1 U  ?' d
还有一点非常重要,我们需要开启STM32的IPCC.这也是之后要使用无线的条件。
3 u# T7 J2 C3 c0 b& ~: ]1 H
0 ^8 g: \) s5 q8 l# q* C 微信图片_20240525151229.png # t; ~2 Z& [0 `0 _: r
. P& ~% L9 @0 `! |5 v1 V; u
IPCC(Inter-Processor Communication Controller)是STM32WL系列微控制器中的一个功能模块,用于实现双核(Dual-Core)之间的通信。
& T% X" g6 E6 R- Q
" ~2 n- j; f/ ^( A1 a
, X+ @& i8 w, G3 K, b/ y
IPCC允许主核和副核之间进行通信和数据交换。$ m  [4 _8 @) e+ V
" Q/ ^6 d( x# V6 G/ e

# M, Z7 D6 E( G) c( ^' } 微信图片_20240525151226.png 7 P2 j" d. P$ |: a

; ~9 x! T/ B7 w9 V8 T8 d创建工程后发现其任务由两个核组成,我们尝试在其中分别添加代码。
! t1 X4 w+ I  |7 D  b
2 T4 r9 X* J) z
后面的烧录问题卡了我四个多小时,单独写篇文章来描述一下这个烧录的问题。$ f( B" u2 @8 D8 f

0 S8 M4 l6 k7 E7 g  g" {" w; Z
我们在两个工程的main函数中分别添加LED的代码。
1 E2 H5 _* w" D! x
  1. while (1)
    0 W) s# g( w. F8 `7 Z4 |
  2.   {
    ) j: h. }" k2 m# P9 V4 \# d
  3.     /* USER CODE END WHILE */
      |; g8 z& D3 k2 u3 I/ K, c& A. f; d

  4. 6 ]5 H" z) A5 d. o) K
  5.     /* USER CODE BEGIN 3 */
    8 E; D9 x6 o# f- s
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);
    * X) C4 G( G9 ~( q
  7.     HAL_Delay(500);
    + o: W! h3 o" N  D$ a2 S; W- A
  8.   }
复制代码

3 b4 a2 S- \( c, d# @在第二个核的main函数中也添加LED的代码。2 I( i% p' y4 ^: x6 h$ T0 w
  1. while (1)
      B! I. q& n. ^$ Q4 n
  2.   {
    / _( k7 R9 n! t3 h- @, T9 R
  3.     /* USER CODE END WHILE */
    % v7 b3 h9 y( K. K$ o0 {
  4. 7 ?6 t& X; P- }" a* ^  v7 [1 u5 R
  5.     /* USER CODE BEGIN 3 */4 t$ y7 X% ^( v0 |* W
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);& d- Z$ O1 i1 b7 @0 F# x8 \
  7.     HAL_Delay(500);
    - @7 K7 l9 p5 ~  B5 d" m
  8.   }
复制代码
5 N( ]1 q7 A/ C+ \1 b' M( l
: u. k' Y! T1 d9 M. B) v. N: v
' P3 Q3 Q1 C5 W# i0 M
转载自 :电路小白
' x( B" F" _9 r/ Q! F9 W3 c如有侵权请联系删除: b9 R: n0 \% L0 e" s* _* k7 n  e4 C
$ g" R$ p& \, C7 Z+ O7 m+ Y
4 U& a$ i5 E7 @# f6 D$ a- }, l

8 _- _. r/ R: W6 Q
收藏 评论0 发布时间:2024-5-25 15:13

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版