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

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

[复制链接]
攻城狮Melo 发布时间:2024-5-25 15:13
今天在测试ST的STM32WL55评估版时,意外的发现其不仅仅是一块具有无线通讯能力的芯片,还具有双核,同时装载M4和M0+的内核。
3 R0 ?1 z+ F7 }/ J. s6 {* N4 e8 }/ s+ T
因为手上发现只有WL55是双核的,下次尝试试用一下其他芯片试试。
* G3 B1 m; I6 Q5 z1 |6 |- Q  `
' @7 j6 }! o& }" i" z: u 微信图片_20240525151256.png + o9 s8 m; ]& G8 M

5 h  Z/ l5 ]% b9 K, T# Y9 I1 x它可以使用协处理器来使用双核。这种双核架构使得微控制器能够同时运行多个任务,提高系统的灵活性和性能。每个内核都具有独立的存储器、外设和时钟域,它们可以独立地运行和执行任务,也可以通过共享资源进行通信和同步。8 X$ I! \$ S3 O) ?  H
- {% Z9 \6 e$ `
STM32WL 系列提供了多核调度器(MCS)功能,可以动态地管理主内核和辅助内核之间的任务调度和切换,以优化系统性能和功耗。# d8 i3 j5 `/ N% q" m
6 r  ~* {- J+ c. }4 w
微信图片_20240525151253.png
7 l5 e. f" T: f
# l4 E) @) y4 A" o+ z
我们在使用CubeMX生成WL的代码的时候可以发现,有一个双核视图。
# M  b- g  x4 Q" q: y9 q/ s5 ?# J% F1 Q7 T3 ?/ L8 G
微信图片_20240525151251.png 0 W3 Z- Y# M2 l: Z3 m( R7 C1 c
, C! c5 ]) @1 W4 @& Z( v5 @
微信图片_20240525151241.png
) q7 |, R+ C4 [" q: I$ H7 @
% ]( u: r2 k% F9 d; ?
我们发现其CubeMX界面中可以把不同的内容分配给不同的核心。  Z) `6 S5 F# j6 U& T2 }
! k0 I5 g& f+ Q+ Y8 M% U% k2 g
创建任务的时候可以选择单核或者多核。
& q4 F" b, T' J8 l7 _" Y, b: C; \2 A7 `, |( T! P
微信图片_20240525151238.png
1 e# M3 D9 [8 U9 T. m' n% A+ E" _( \6 D' j4 D$ v& H1 D
如官网的介绍,每个CPU享有单独的时钟域和外设。
  T6 L9 `6 Q0 Y
; f/ e; T9 Z1 L. u; l 微信图片_20240525151235.png ! R$ R! o+ j( c* a

6 M( }0 Y* G7 I: i' i: }& B从官网的原理图中得知,评估版中有三个LED灯,对应着PB15/9/11。这三个LED作为板载LED,我们将尝试利用双核的特性来尝试同时闪烁。( m1 W6 ?# C, u6 X
! y1 z, A; S' H7 u9 W0 R9 ~- R1 r8 X
微信图片_20240525151232.png
* |9 N" @; I' V

! l5 D- b3 |! W6 r! x将LED的三个IO初始化。8 n9 G# A0 S; q. c# j9 G6 d

( L" }* o. j4 v* P
还有一点非常重要,我们需要开启STM32的IPCC.这也是之后要使用无线的条件。' `! V. t7 c, ~. F) R

5 p8 ~! }2 |9 V/ Q! A 微信图片_20240525151229.png % Z. b& F  i) Y/ l

8 ]7 k$ j; h( g' P- h/ {0 z7 j( i. pIPCC(Inter-Processor Communication Controller)是STM32WL系列微控制器中的一个功能模块,用于实现双核(Dual-Core)之间的通信。
  h! d6 X7 {4 m( s, G  T3 a5 }/ Q: j5 m/ Y" A: l4 g6 x) R. y. R
* L( ~/ h9 K* [9 W& Q$ M
IPCC允许主核和副核之间进行通信和数据交换。( G& \' F( K9 t; q: J

9 b* u- Y0 f8 a, l1 W$ `8 c

  s1 s9 L3 A6 j/ Q2 a 微信图片_20240525151226.png
; o7 n4 a7 |. L! C+ s. G

1 @3 J( b  e7 V, C/ s; y# U2 J创建工程后发现其任务由两个核组成,我们尝试在其中分别添加代码。9 `4 g- ~! F, H9 N# @. ^

- S3 q/ G, M6 A- r- y. V6 ~
后面的烧录问题卡了我四个多小时,单独写篇文章来描述一下这个烧录的问题。
6 i4 r* z! t$ ^! H4 j9 f
6 |3 l: ]" `; e2 P
我们在两个工程的main函数中分别添加LED的代码。
! C' n: {- `* b: a
  1. while (1)
    7 C7 R) \6 j! U! m5 @
  2.   {
    7 n4 C  g$ Y- Q+ b( J
  3.     /* USER CODE END WHILE */# {2 ], c% W# O( `

  4. 4 F+ l/ W/ {5 a, g9 i- m/ t+ n
  5.     /* USER CODE BEGIN 3 */* h2 ]) B+ q" m9 ]8 y2 o
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);$ T8 S2 Y7 R$ Q. b
  7.     HAL_Delay(500);( a: C4 V* \% O9 B3 E
  8.   }
复制代码
- X  b" Y- q9 C$ w% G- C& k3 B
在第二个核的main函数中也添加LED的代码。, q& Q0 L6 x" i. h; b" j& v$ d8 B
  1. while (1)
      |. D# B2 j5 R" k9 [+ T
  2.   {6 x3 n7 U% V4 t+ H
  3.     /* USER CODE END WHILE */7 p, Q  |; v/ r
  4. 3 c+ b# g, W4 G# [
  5.     /* USER CODE BEGIN 3 */
    5 _0 r! d" P. o8 P+ T4 Q
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
      w8 [  f, [. n7 Z/ A6 E! v/ W0 A& O
  7.     HAL_Delay(500);
    % l, Q/ E/ X3 W: I3 ~" E
  8.   }
复制代码
& u9 J( E! r" O. J. x' N
, Q+ _8 v" h  v# A4 ]" w

# w5 ?9 A2 e# x) I( w3 \3 p0 i转载自 :电路小白
5 c! F9 S+ {5 F" i  e$ k) G如有侵权请联系删除' F) n3 [, R& l1 O! }" |1 g
5 `3 L- G/ t. W2 i& X

* k  V6 u  s# F$ E/ m" `
! P2 r" [) }4 l  H+ P% {* K
收藏 评论0 发布时间:2024-5-25 15:13

举报

0个回答

所属标签

相似分享

官网相关资源

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