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

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

[复制链接]
攻城狮Melo 发布时间:2024-5-25 15:13
今天在测试ST的STM32WL55评估版时,意外的发现其不仅仅是一块具有无线通讯能力的芯片,还具有双核,同时装载M4和M0+的内核。
- }! D) V& b, {# H6 F
9 a* q, e4 W" q$ H2 z$ f# B! y4 Q8 j
因为手上发现只有WL55是双核的,下次尝试试用一下其他芯片试试。
; q/ y0 g7 @5 d, A
6 N; |5 Y( {9 b4 { 微信图片_20240525151256.png ' r3 ]4 ?5 C# K

/ t$ W1 M! g* k/ j: j它可以使用协处理器来使用双核。这种双核架构使得微控制器能够同时运行多个任务,提高系统的灵活性和性能。每个内核都具有独立的存储器、外设和时钟域,它们可以独立地运行和执行任务,也可以通过共享资源进行通信和同步。" U2 w4 d* c0 H  R6 _& ?3 P

# _' C+ }- K% u7 {! o2 O
STM32WL 系列提供了多核调度器(MCS)功能,可以动态地管理主内核和辅助内核之间的任务调度和切换,以优化系统性能和功耗。
" r  t5 I5 t1 @7 P9 h0 a2 S
# e. E- G" I$ k& [5 D 微信图片_20240525151253.png
# m! O/ |1 G$ E6 K+ t) E
: v# b- ?4 h. \0 [3 {
我们在使用CubeMX生成WL的代码的时候可以发现,有一个双核视图。
. L9 |8 f) E0 b; f/ P; h, X7 {
$ A2 ~* d; ~5 i: s# J4 z6 p. U
微信图片_20240525151251.png . k. a" c6 ]6 ^  z/ T# n; G8 K
! r! K1 _7 w, Y1 N- p
微信图片_20240525151241.png
, r  b  p3 I* ~( r4 a3 r8 d
' d$ c0 o  I% O$ M2 L
我们发现其CubeMX界面中可以把不同的内容分配给不同的核心。
3 u/ |; M2 q5 Y. M9 y, i3 B4 _; s
创建任务的时候可以选择单核或者多核。$ Z: y7 w5 p0 L. s. |  M; E

6 f) X" {! U  q0 O) }: }' _" A
微信图片_20240525151238.png
8 V$ A* N' n. X4 |  W+ U$ j- n0 d- K7 w
如官网的介绍,每个CPU享有单独的时钟域和外设。
, T- m" G+ S% N3 a( {$ _* R1 H" n( u8 R3 ~" }% g
微信图片_20240525151235.png
+ q9 S1 x# ^* S  a2 @
! U+ H3 I5 G) S
从官网的原理图中得知,评估版中有三个LED灯,对应着PB15/9/11。这三个LED作为板载LED,我们将尝试利用双核的特性来尝试同时闪烁。+ r, v6 e# D5 w8 M9 P! D+ i- O( l

* {1 Y8 a* x, z8 u+ G# } 微信图片_20240525151232.png
0 X" {  `5 m: G' j3 c% t( l& q

! y/ p* l) o2 ^5 p; e将LED的三个IO初始化。' U" V. K4 w5 X, p; S% b. o

* x& V+ d' o" F, D5 n6 f; F$ ^
还有一点非常重要,我们需要开启STM32的IPCC.这也是之后要使用无线的条件。
! K  W. `* F; j+ Z& C
* q0 A+ R- ]6 S0 a' _ 微信图片_20240525151229.png
; O; T! U3 Y& u1 @) n5 H2 N0 E& X" y
" r$ Y# M2 M# ?% z
IPCC(Inter-Processor Communication Controller)是STM32WL系列微控制器中的一个功能模块,用于实现双核(Dual-Core)之间的通信。
% r4 }  s- r9 b; n) c& w0 ~) }# Q. x5 x8 \
: v* u! d; B& F* P
IPCC允许主核和副核之间进行通信和数据交换。
5 o* a+ W' o; W' M0 H1 s  t9 }7 Z, P' C+ N7 ]+ J
6 R0 K7 G' u& o/ E
微信图片_20240525151226.png 2 X9 X; r2 f& L' N/ i5 f( c
& n* V$ @% D  L! X8 g1 K! f
创建工程后发现其任务由两个核组成,我们尝试在其中分别添加代码。7 V2 r% u5 I0 w5 f3 X
  p0 f9 ^) a2 e; k' d/ W8 ]; r4 b& o
后面的烧录问题卡了我四个多小时,单独写篇文章来描述一下这个烧录的问题。
- b7 M) o' i4 x8 _7 D  b  d) W7 z' t, z, l
我们在两个工程的main函数中分别添加LED的代码。
% ?$ Y+ o7 a/ O' \: _
  1. while (1)
    ! r; O* C- F+ |% L2 a0 G  W* Q. |
  2.   {
    $ g- t9 P, f' ~6 j) O
  3.     /* USER CODE END WHILE */
    ) J3 C* L* z2 J2 P5 Q7 z

  4. : ]" \1 D9 w. s5 u+ k
  5.     /* USER CODE BEGIN 3 */% Y# Y/ v' y8 ^& C3 Z
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);
    % ?/ Y6 K3 ]" ^- g3 u* }
  7.     HAL_Delay(500);
    0 p9 l( a( x" V
  8.   }
复制代码
; h6 ^8 e$ M4 ~9 n2 r! \
在第二个核的main函数中也添加LED的代码。! P; f5 u6 b2 |
  1. while (1)9 Q+ G3 i3 I9 `, S! |8 X) d
  2.   {
    $ Q4 X& l. c  l. p- X0 A3 d* f
  3.     /* USER CODE END WHILE */% `- I" [( l/ c: N6 W1 I# A

  4. / M- J# g1 O$ W% P* x; F) s1 h! t0 u
  5.     /* USER CODE BEGIN 3 */
    ! J4 i- g8 Z3 E) K$ Q
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
    - u% v1 K& P$ _7 t8 A
  7.     HAL_Delay(500);( c# \/ H0 b" u7 E
  8.   }
复制代码

) c2 O# k5 \/ q2 C- {5 |# a! K8 H6 ?. m7 Y
; x  Q4 L8 M1 N  z  L9 X2 x# M! n% e
转载自 :电路小白
. w! f; z4 L7 |- r/ ^( l1 w如有侵权请联系删除
5 j* a, {8 M! [

7 D0 ]8 v2 b7 O
, E  c, E7 {& j0 }  c, ?# A6 u& P! y; c& f' Z
收藏 评论0 发布时间:2024-5-25 15:13

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版