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

【经验分享】适用于 STM32F103C8 的 FreeRTOS,STM32的多任务同时进行

[复制链接]
STMCU小助手 发布时间:2022-6-21 13:05

( L" z4 Y1 L& z/ m5 e! [$ ` b7fab167dd363ff71e43e0e67266c046.png 9 t- F) o' e3 z. K0 H
. U+ i4 K6 [# e) j: i
概述:适用于 STM32F103C8 的 FreeRTOS
2 f1 L+ j1 N# ]' H' A( ~$ w4 {  k1 U( G3 y
STM32F103C 是一款ARM Cortex M3 处理器。我们可以在 Arduino IDE 中使用适用于 STM32F103C8 的 FreeRTOS。我们也可以使用 Keil,但这个过程相对冗长:我们需要将下载的文件下载并粘贴到 Keil 路径中,这里我们使用 Arduino IDE 的方式。1 Z# r6 a: C! p  |

; ~+ x! E! ~# k8 y# t) a5 L要了解 FreeRTOS 文档和方法定义,您可以查看FreeRTOS STM32F103C8。
7 p# G1 p% i, Y; A# j9 h
& K- X- K! h9 T0 r9 `什么是 FreeRTOS?( i) d. `: m. y6 I- a7 Z- v0 g# H4 A
# R% f. r! t" a# P2 z7 r
FreeRTOS 可能是一种免费的开源实时操作系统 (RTOS),可在包括 STM32 在内的许多流行微控制器上运行。
% D$ E( E1 U2 U8 g) }, a4 N) L) _- P- w/ o- t
操作系统可以是在计算系统期间管理其他软件和硬件资源的软件。通用操作系统通常在设计时关注用户体验。
6 w% ?1 {. ?8 Z6 |* x/ k* H, K+ @2 H4 E
例如,假设我们正在为手机操作系统开发一个应用程序。用户可能想要流式传输电影,因此我们可以将流式传输体验分为两个工作:工作1 从 Web 下载视频;工作2将每个视频块显示给用户。这些工作可能是等效工作的一部分程序,也就是同时进行的。在这种情况下,它们可以实现为并发运行的线程。
) |& R' N+ Z# d/ R: k
$ P% D8 W. \. j如果我们的处理器只有 1 个核心,我们的流应用程序可能需要在作业 1 和作业 2 之间快速跳转,以同时向用户提供下载和查看。
1 m; C/ `, h( C/ w- I" v
, g. n$ L# e/ F; c9 p a407c6066ad00a8c7c03424d87857d2c.png 9 n: D! u  O+ _: C2 Q6 W8 Q& \

- w7 K+ ]: q8 C  o. f了解 Arduino IDE 中的 STM32F103C8 如何捆绑 FreeRTOS 非常重要。虽然 FreeRTOS 是一个允许切换任务、调度等的底层软件框架,但我们不会直接调用 FreeRTOS。ARM 已经创建了 CMSIS-RTOS 库,它允许我们形成对底层 RTOS 的调用,从而提高了各种 ARM 处理器之间代码的可移植性。
8 U' q% J# {6 [! i5 i& B8 F$ A, I: g2 J9 E; z
如何在 Arduino IDE 下载安装 STM32F103C8 可使用的FreeRTOS?

  C% \' l' d0 L
: t- l, h* a7 S$ a第1步:8 G. K2 H3 r7 k
+ l- S7 M  a. b$ b$ E( N
在 Arduino IDE 中,首先转到 文件-> 首选项。复制下面的链接并按照下图粘贴到附加板管理器中。
+ m+ F$ q0 r' x3 r3 ?) U( k9 |; v( t- o* Y
65bc46da144842c14ed87081666f73af.jpg
( o0 y6 d9 J* E
2 }' |9 c, P" P# r) b, ~0 G第2步:
1 l( N- A+ b1 j/ {) b: n% _" L9 i) ]$ F1 y$ w) |1 Z5 R# W
现在我们需要下载 FreeRTOS 库文件。如需下载,请转到项目->加载库,然后单击管理库。# b. G! P# J# C0 |

" {. E# s7 E- ] AH9RE_RMFXB3](~LRL{{}XW.png ; _) d& l3 n; C5 o: I! r
: ^7 l! c" n3 w5 [; s% [
第 3 步:# u, B7 K* D" @# R& v
$ `! w# i* x0 U7 x6 D
现在,在搜索栏中输入 FreeRTOS,它会显示一些库文件,向下滚动并找到Richard Barry 的 STM32duino FreeRTOS。然后选择该库并单击安装。安装需要一些时间。安装后显示为INSTALLED。7 h6 e' Y) {0 n  Q& m) y
9 \) {7 W7 D2 P9 g7 r; n7 k1 G) D, o
$[Y%[89_P3)K$N9]M5372%Y.png
) l$ N- g* I" G( L
( G8 J- [/ @5 ?* [7 L; W1 U第4步:
( E$ b3 K/ z0 e4 i. I- W3 y% N( B( D: ~; N8 a1 ~& {
现在我们可以在 Arduino 使用 STM32F103C8 的 freeRTOS 库了。我们为板载 LED 和另一个单独的 LED 编写一个简单的闪烁程序。
& h  \" c; T& x% O' C/ @: G
+ y& q; K# c/ T" g) |+ _4 z准备配件- T. A9 H, z6 O
9 Y0 @1 I9 Z( g( _
本教程需要以下硬件。
$ |* o% b3 e# c6 o1 \# l  H) _3 W5 E; t- q, q2 o+ E" y* j/ R. n
1. STM32F103C板
5 k; l3 L4 S$ c$ X
% Z* m! v4 R) ^2 _& \2. FTDI
0 ?3 b; Q% H" ]- i+ U
6 u# {: c9 T. }5 S, v# M3. LED
% b2 k3 t- H; n5 m* p- f0 r$ d* O3 ^
- x  N: J$ g* `! X( s- h, i( r6 H7 v- `4. 跳线. Z# y$ q! }+ Z
, j# K6 |7 ^9 m2 O' M
5. 面包板
+ g5 Q/ e* e; M: R% g9 y/ U
9 M. V' Y% e* N" L% |8 }, [% A在这里,我将一个LED 连接到 PB11。0 W# v- {: }8 J1 K+ y3 y

/ Z+ k6 @/ U" y: r K5NZC]H8%_J`{CW_94FI_E0.png
3 p. d$ j7 [: F/ q5 h4 m
- K, n  M; L! {  F4 T, b5 ]如何使用 FreeRTOS 在 STM32F103C8 上运行两个不同的任务?
3 H2 N: C$ N* |' q7 a1 ?" @1 d- l: O2 }# r" N; f' y. h
使用两个 LED,并为这两个LED创建两个任务。一个 LED 每秒闪烁 1 次,另一个 LED 每200ms 闪烁一次。现在,让我们开始使用 FreeRTOS 编写这两个 LED 闪烁的代码。
9 ^/ [! \2 g2 |- c' Q% X; M0 j" x, D. }# N
下面是部分代码:/ L4 @% f; t: }* e( k$ @* Z

- k) c0 O# j+ l; E/ c8 C! k7 a# f
  1. static void task1(void * pvParameters) {
    7 ^" B$ X+ {7 z; S; f" P
  2. + l. h& I1 v: a& v' C# z
  3.   for (; ; ) {+ `5 R- W- w5 O. ^0 S* |  O  [4 |

  4. $ V; a4 z- A! j7 X/ c  U
  5.     vTaskDelay(1000);
    : S3 i# a+ X. P$ S% I; g, ~
  6. 9 @  ?3 L2 p: }% @! T& K
  7.     digitalWrite(BOARD_LED_PIN, HIGH);
    $ M5 M5 C: D% \% |
  8. 9 ^8 @" c% G$ Y, m6 O
  9.     vTaskDelay(1000);
    + J3 Y7 c! p) D0 A; Y5 i9 m
  10. 6 k# w+ p" S- ?4 r
  11.     digitalWrite(BOARD_LED_PIN, LOW);
    / u5 x5 Q5 a& w! q6 Z- |5 F

  12. 9 H' X* L+ |4 M
  13.   }
    0 Q2 }  \' _6 S
  14. 8 w# y; P( K. H' L7 Q
  15. }/ r* r3 w* O" g5 S, t  T0 B

  16. 2 s: k. P' d4 x* t0 R7 i
  17. static void task2(void * pvParameters) {
    " V. F4 o+ J0 e7 f

  18. 6 ], n1 u, A! v* `  z
  19.    for (; ; ) {1 d5 i+ Z3 }8 ^

  20. 5 S, j' M! G3 |7 W/ r- v
  21.     vTaskDelay(200);
    1 D& C5 n% T, s7 I: |; c7 V8 ~

  22. : h1 ~9 J4 N3 A' \5 o$ _
  23.     digitalWrite(LED_PIN, HIGH);
    8 V4 o8 i, k' {% _# ^6 p
  24. $ h% u% @% k  y( `
  25.     vTaskDelay(200);( X8 P2 m3 ?9 d0 [# Q

  26. . k+ Y. I  s5 c7 V
  27.     digitalWrite(LED_PIN, LOW);9 j6 |) T6 v2 T/ f3 C) y0 {
  28.   r' g0 G$ d3 R0 S) d" |" O
  29.   }4 }0 v6 ^9 h/ v" l+ G
  30. 5 E8 }% v) |, k* h" G
  31. }
复制代码

6 x3 K% [7 w% d上传代码后,即可看到结果。
' E2 s; d: J+ P. o4 @( ^  n4 p$ K. N( _

9 K5 a3 C+ E: M# X/ W7 n& N
收藏 评论0 发布时间:2022-6-21 13:05

举报

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