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

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

[复制链接]
攻城狮Melo 发布时间:2024-5-25 15:13
今天在测试ST的STM32WL55评估版时,意外的发现其不仅仅是一块具有无线通讯能力的芯片,还具有双核,同时装载M4和M0+的内核。
4 q% i) }& H' e( n2 \4 y0 m% M! t/ {  z2 R
因为手上发现只有WL55是双核的,下次尝试试用一下其他芯片试试。, `+ }, b& L/ ?+ P! k# [8 c
) u8 Z3 p! V1 k4 l/ i& M# c
微信图片_20240525151256.png
. l1 X1 q. r6 [1 Y% E3 a7 J
+ X6 d% E3 C* b2 Z7 h: ^, n. Z  M% J它可以使用协处理器来使用双核。这种双核架构使得微控制器能够同时运行多个任务,提高系统的灵活性和性能。每个内核都具有独立的存储器、外设和时钟域,它们可以独立地运行和执行任务,也可以通过共享资源进行通信和同步。  m8 k3 u9 N+ \( W% {

6 N# P, T- Q+ L4 C
STM32WL 系列提供了多核调度器(MCS)功能,可以动态地管理主内核和辅助内核之间的任务调度和切换,以优化系统性能和功耗。
  U0 i5 {0 C. b7 ]% ^: z
2 A* V% G  _( W% n 微信图片_20240525151253.png ' S/ Q: u4 s  X4 q3 E
. C! N. f( N) n8 |) Y9 v8 `3 t+ [
我们在使用CubeMX生成WL的代码的时候可以发现,有一个双核视图。5 K. |. V9 v% t

+ d) m" s: I- J! e9 N! r8 D
微信图片_20240525151251.png + B. @! ^: S- j. ~2 b7 A2 j# q* b* B

7 o2 ^, E' a6 @1 f9 O" x 微信图片_20240525151241.png 1 m1 x: z* e$ f7 u

. r- E' `& Z* f0 s我们发现其CubeMX界面中可以把不同的内容分配给不同的核心。! X+ F4 [( v, R; Y# ^
4 s! G% s& ?8 {/ i# G
创建任务的时候可以选择单核或者多核。# r2 I. E# q5 U- c

2 l: u! v+ ]# @  z3 r+ M
微信图片_20240525151238.png
- p: \- U7 E* l7 r6 F% q3 p8 G, `6 \9 v1 G) t8 |
如官网的介绍,每个CPU享有单独的时钟域和外设。- O& V; q  t! `

" \+ R; u6 b' n! g$ Q% i 微信图片_20240525151235.png
7 ]0 g# M& C6 }% _8 u2 ~# G- U
4 H9 j/ U' H7 {+ W9 J( `
从官网的原理图中得知,评估版中有三个LED灯,对应着PB15/9/11。这三个LED作为板载LED,我们将尝试利用双核的特性来尝试同时闪烁。, Q" {& V5 t9 P* C3 u2 z5 f* P
9 w/ q+ r' m' m  f' c, q
微信图片_20240525151232.png 1 q. m3 r5 }4 s  _6 X% R! i

, Q7 }( }! Y& d" c& Y将LED的三个IO初始化。
- N, I% n, j+ y( s- k9 |
2 n& v  r) J6 e" p3 I0 W& \
还有一点非常重要,我们需要开启STM32的IPCC.这也是之后要使用无线的条件。4 @2 B& H8 N1 @* x! \) K  a( D

1 P% i6 h( W+ y4 U 微信图片_20240525151229.png
8 v( c1 ]( V+ A
" E: Y0 Y! ~" u2 A
IPCC(Inter-Processor Communication Controller)是STM32WL系列微控制器中的一个功能模块,用于实现双核(Dual-Core)之间的通信。: \. F/ s% m: b, d& C0 B$ |( W
6 ]0 |, I8 b* T1 o

7 ?# Y9 I. K8 dIPCC允许主核和副核之间进行通信和数据交换。
0 _; h9 F2 s# K" Q- [9 T- D
: E5 W" Z/ e' p$ z# y' u' G* ~8 i1 _
  k/ N1 x0 }3 P4 Y  O0 y' z7 ?8 u  U
微信图片_20240525151226.png . ?, L( C+ w( p1 F1 ?( O" M

4 Y& s2 o0 S; O, L- t$ c创建工程后发现其任务由两个核组成,我们尝试在其中分别添加代码。7 D) w& Y. s8 v" a! z3 G$ O( P

3 J% H& V0 h6 ?9 B+ d
后面的烧录问题卡了我四个多小时,单独写篇文章来描述一下这个烧录的问题。
" C5 |. j# l1 [- R7 |9 M
6 E! W/ |# A, t% ?1 i% v: ?; U  k
我们在两个工程的main函数中分别添加LED的代码。2 B& c5 U: y9 B6 `
  1. while (1)
    7 q6 l: O0 p! ?1 N! K6 S
  2.   {
    6 h& y! ^) j, K& e5 Q- F8 b
  3.     /* USER CODE END WHILE */3 W, M) p" k. O4 Z* c3 h/ H
  4. : U! m6 F! X' b7 X
  5.     /* USER CODE BEGIN 3 */3 I4 r* z8 w0 h( e3 N1 C
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);: l) Q. v# g8 I; r1 v
  7.     HAL_Delay(500);! z( ?8 _' d1 n- v, i; v+ D
  8.   }
复制代码

. J1 C9 Y# E- k3 S在第二个核的main函数中也添加LED的代码。$ m* ?9 _9 A8 y, x
  1. while (1)
    / x% p8 h. O, Y% ]% z' y; ?, @; c
  2.   {
    # n$ I; c2 ]! B: x; l/ V
  3.     /* USER CODE END WHILE */6 J2 e. {3 B8 C$ W1 y0 g6 j$ ~
  4. ; {  q6 ]# A  L
  5.     /* USER CODE BEGIN 3 */
    ' s3 j+ a' r' k- o" S
  6.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);6 x1 h( n; o0 A- ~
  7.     HAL_Delay(500);
    ) M8 L, d: [" G. f  G# f! |( c/ I; |6 j
  8.   }
复制代码

. p4 @" k% Z& o$ B
6 p8 \* F, D- M1 n
' l1 e+ {  p5 L0 \, C' f; o
转载自 :电路小白
7 R6 O2 K! R5 [8 H5 T如有侵权请联系删除
" Y3 }# C- r( `) O

% _: H5 t4 G" r% K: ]6 K8 u. B7 l9 e% `) }5 _* ~3 `9 A

2 i; i, s/ l' W8 Y; K$ t
收藏 评论0 发布时间:2024-5-25 15:13

举报

0个回答

所属标签

相似分享

官网相关资源

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