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

STM32G0学习手册——FreeRTOS事件组

[复制链接]
STMCU小助手 发布时间:2022-10-27 20:01
1.创建好带有printf-stdarg.c的FreeRTOS的工程  O- ?) ^8 N9 P5 A
3 ~5 }, X) F7 ~6 \$ ^( A' w
2.修改main.c文件
7 s( B4 P+ r( D5 p
& ^5 |" u# c. t6 ?9 O, s5 n( R
  1. /* USER CODE BEGIN Includes */
    - E1 j" l0 u9 _" h; }# ?% B

  2.   D' e$ k2 _& z4 t% t) w2 I
  3. #include "FreeRTOS.h"
    ! L% {' z6 \/ P* W2 q3 M; J# w
  4. #include "task.h"
    5 a3 W. b) n7 U0 b# K- z! z; S$ Q
  5. #include "queue.h"7 P1 W" E, ]* s* [
  6. #include "semphr.h"% @' `/ r9 Q2 _& X1 \
  7. #include "event_groups.h"
    & A4 _! ?, c5 i$ K* I( N1 |
  8. #include <stdio.h>  N" O- v% N( S# N. b; o  d
  9. #include <string.h>. \0 ^  ^, u# d: C4 Q9 t

  10. ! l4 i- @* |! u( r# N6 f. Y
  11. /* USER CODE END Includes */
    , d8 L( N. ]/ W$ X' F0 d# M
  12. 0 Y6 r' @, Q, l" ^! K' g
  13. /* USER CODE BEGIN PV */
    3 ^8 W0 F+ U4 B$ y: m5 L9 c
  14. static TaskHandle_t AppTask_Handle = NULL;" p* |5 Q1 J2 T  u% ]( i: {
  15. static TaskHandle_t KEY1Task_Handle = NULL;- m8 y# g# S/ C) J6 t
  16. static TaskHandle_t KEY2Task_Handle = NULL;  |& K8 t5 c# V
  17. static TaskHandle_t LEDTask_Handle = NULL;8 F' _5 _! q9 P3 U' O0 T
  18. 0 G% C- y5 j* E: d8 S4 O0 ^
  19. static EventGroupHandle_t KeyEventGroup_Handle = NULL;
    . f+ ~) |) m' R1 E; a
  20. 4 L! r/ H% E5 x2 G! b
  21. static EventBits_t KeyEvent_Counting = 0;, ]) @$ Z  u! N8 h8 w( x
  22. 4 S, _1 d" N2 \6 l; \8 A
  23. extern int f_printf(const char *format, ...);
    0 h, L* A3 ]. m# W/ G
  24. / \; v9 `% q1 k# t* }) x
  25. /* USER CODE END PV */
    # Y7 \+ y6 S6 @. q

  26. . l) X6 d5 A2 n. h' y& i
  27. /* Private function prototypes -----------------------------------------------*/
    ! |2 J9 ?! ]+ L5 {
  28. void SystemClock_Config(void);
    0 Q2 Q$ h: w+ L
  29. /* USER CODE BEGIN PFP */1 t, ?3 z) h$ C1 z; \

  30. " J& o  K- k) N. x2 [
  31. static void AppTaskCreate(void);  _/ Q' \. T* ~( I! c0 T5 T- B
  32. static void Key1TaaskCreate(void);  C% w& l5 |7 a
  33. static void Key2TaskCreate(void);8 k+ J0 Y; Y' N: X8 I
  34. static void LedTaskCreate(void);/ _5 _$ N- z" L, v( V- Y- ?0 k

  35. : ?+ a' Q. n5 Q# c8 j, G7 C
  36. /* USER CODE END PFP */
    ( l+ q+ u: n+ t$ X3 q2 D3 D
  37. , O! ?( W1 h5 `2 r
  38. int main()5 s! a/ n$ G) ^" K' Y
  39. {" O- M1 }6 U- K$ E$ C+ b
  40.   /*
    ) }6 y6 K, _6 }9 k# U3 ~( l; I( d
  41.    *
    2 J% |5 n/ _( K& H" i/ }
  42.   *// t' m) `7 H, h0 F" A' M' l) l
  43.   /* USER CODE BEGIN WHILE */% P, F3 k' F1 x6 O: C7 }
  44.   UBaseType_t xReturn = xTaskCreate((TaskFunction_t)AppTaskCreate,2 s3 }3 T1 i' L3 s8 A
  45.                                     (const char *) "APPTASKCREATE",
    3 D' U# j; s+ q+ p- m. ^
  46.                                     (uint16_t)     128,' r+ }1 \( J2 x+ ^4 z, c
  47.                                     (void *)       NULL,2 U! B, P; V$ Q
  48.                                     (UBaseType_t)  1,8 }; m0 }: J1 I. _4 H8 e
  49.                                     (TaskHandle_t*)&AppTask_Handle);% U% t9 r; G' ^" `6 d
  50.   if(xReturn != NULL)! c. x0 h8 z3 U
  51.         {. J0 ?1 r, U/ s7 H- t
  52.                 f_printf("APPTASK CREATE PASS.\r\n");5 B7 M4 {4 K+ j8 [
  53.                 vTaskStartScheduler();
    ! Y  M+ k4 Q/ d6 x7 l
  54.         }
    $ J) P: E( D3 v  }3 q, V

  55. 6 w4 |2 m" @4 Y, y9 Q4 k
  56.   while (1), K' @( ~+ z, j0 Q1 b; \
  57.   {
    7 _1 {# q* ^* @9 n( r
  58.     /* USER CODE END WHILE */
      V; W6 @" D' m# c

  59. ! x  l/ N) j* w! ?# N
  60.     /* USER CODE BEGIN 3 */  t* [% i% r7 y! M! Z* U6 L9 o
  61.   }, _2 O- W* P6 B" d0 v( G. w
  62.   /* USER CODE END 3 */
    6 x3 Y  U$ {" S
  63. }
    # ]! H2 ^! L$ l* M* b

  64. ( h/ f- x7 B1 C( s5 y: i, b7 x
  65. . d0 }3 A7 ?1 i" Y" s6 A0 g; f
  66. /* USER CODE BEGIN 4 */
    : y# L+ y8 l+ p# B3 u( z7 z% d
  67. static void AppTaskCreate(void)
    . c) j) P6 j% P$ Q7 k
  68. {2 i! s; T/ \/ z/ o
  69.         UBaseType_t xReturn = NULL;
    ' R1 z0 B( R5 A! ?: K$ w
  70.         
    & Y) T8 |" [# U' m: A4 ^3 Q2 H! Q
  71.         while(1)
    1 G6 }) Z2 [/ R3 X$ _
  72.         {               
    2 ?# l* j7 d9 l+ \: n8 z
  73.                
    6 _- G9 A8 N" c- C/ @) I! D2 R0 o
  74.       /* The event group must be created first, otherwise the task cannot be executed.*/; w% B- g2 D( O; p6 {
  75.                 KeyEventGroup_Handle = xEventGroupCreate();
    6 `/ N2 U; u8 u$ V. k  l$ n
  76. # I1 O2 k2 W7 `! Q
  77.         xReturn = xTaskCreate((TaskFunction_t)Key1TaaskCreate,
    9 g. Q3 B- p: t, Y( ]7 E# k
  78.                           (const char *)  "KEY1TASKCREATE",+ H1 h+ e* g8 w/ R7 ]! H& u6 B
  79.                           (uint16_t)      128,
    , W! i9 I/ O1 W; n) t" G
  80.                           (void *)        NULL,
    ; |' O1 E% F" [5 v. W& i( Y8 L
  81.                           (UBaseType_t)   3,; j  f. h) r$ B
  82.                           (TaskHandle_t *)&KEY1Task_Handle);8 j* r% j3 _0 u- U1 [
  83.         if(xReturn != NULL)# j/ H. _! G6 ^4 z( o5 f
  84.                         f_printf("KEY1TASK CREATE PASS.\r\n");
    : i. d' _% o7 m
  85.                 4 x4 [  v) t8 {1 c; z  N
  86.                 xReturn = xTaskCreate((TaskFunction_t)Key2TaskCreate,* y2 f7 d: m$ [( D5 k
  87.                           (const char *)  "KEY2TASKCREATE",7 p* X' Q2 f5 ~+ S
  88.                           (uint16_t)      128,; }3 X9 N5 F* z7 ^9 e4 m
  89.                           (void *)        NULL,9 s8 r/ e0 Q7 I& s7 N5 e
  90.                           (UBaseType_t)   4,% l- t6 `6 z7 w* Z# o3 E% U- i' F
  91.                           (TaskHandle_t *)&KEY2Task_Handle);
    , Y' Z. v6 u/ V: v: i
  92.         if(xReturn != NULL)
    8 f3 E5 f0 h$ a, O- Q0 M8 ^' ^/ M
  93.           f_printf("KEY2TASK CREATE PASS.\r\n");/ ]) p# b6 E1 r8 b9 q2 A
  94.                 4 y, ]( q3 A+ N1 w3 H
  95.                 xReturn = xTaskCreate((TaskFunction_t)LedTaskCreate,
    9 C! Y  c$ t8 E1 b$ T6 w
  96.                           (const char *)  "LEDTASKCREATE",1 f3 ?' u0 ?$ X: d2 a
  97.                           (uint16_t)      128,. |& h0 G$ K; ~& w6 |
  98.                           (void *)        NULL,4 W  u3 b" @5 M- S
  99.                           (UBaseType_t)   1,( l7 B/ f. |6 {, G' S
  100.                           (TaskHandle_t *)&LEDTask_Handle);$ {% S' L+ y* `8 G$ `
  101.                
    $ c' _; E/ @$ Z# o
  102.         if(KeyEventGroup_Handle != NULL)3 o& ~' }0 B0 }$ A
  103.                 {
    5 A# m! t$ F8 J) a4 [6 y+ K
  104.                         f_printf("KEY EVENTGROUP CREATE PASS.\r\n");* `/ v' q- u7 k9 C/ Q
  105.                         vTaskDelete((TaskHandle_t)AppTask_Handle);, G' f1 K9 L" v% k
  106.                 }                * q, s& g) u- b* V
  107.         }
    $ T8 `! G. f' N; M# x& R; k3 I# K; s
  108. }
    7 E" e: H& q: w9 ^0 C& p
  109. 1 k  K) @% P, g5 D9 M7 j
  110. : a" T6 w' @* K1 m: f8 K8 z
  111. static void Key1TaaskCreate(void)# N' I$ y5 F- [% t6 \! a
  112. {
    : [4 N2 f5 G- k" j1 f
  113.         while(1)
    % C, m4 J4 k/ f( |, ]
  114.         {$ u% @0 K0 _; I0 I
  115.                 if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0))
    & `: Y/ h% j% D* E) v+ b) n
  116.                 {3 h& F7 D: z; x5 ~: c! h
  117.                         vTaskDelay(40);
    8 k  u- s3 ]# @6 U, u% c% @  u- r
  118.                         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0))
    4 O; T/ k) w7 e1 K& |4 U1 p9 Q
  119.                         {
    ; o$ a% J8 _9 k) R# ^$ @
  120.                                 xEventGroupSetBits(KeyEventGroup_Handle,0x01);$ @( a# ~! `/ a0 g" G3 V# M
  121.                         }: B! h# ]& d7 \1 W4 U
  122.                 }) s& U6 Y8 S# a& _. z7 n; t
  123.                
    # }& r& g( b# d* M8 ~. y
  124.     vTaskDelay(100);6 A" ~  E" v0 L3 ]% u/ V
  125.         }; h, m/ W' H# G) K* e0 E
  126. }
    # h& V/ N, ?: `& I3 V7 B% y6 S
  127. static void Key2TaskCreate(void)
    : {9 i. `3 R% F! E* \8 Z
  128. {/ _% {) l5 }- I
  129.         while(1)& h: C0 ?: b6 V
  130.         {2 H2 |" l" g" E# W* |# s' G
  131.                 if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_12)==0)
    6 ]# X  [4 N, w
  132.                 {- L5 _/ `5 y% z3 h" P" }. U
  133.                         vTaskDelay(40);
    * C% v* f$ ^0 r! q9 ?# P
  134.                   if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_12)==0)
    . K5 D! V' g- R+ [( b9 s+ S
  135.                         {
    : B- h4 O3 Z( k! T) W9 M
  136.                                 xEventGroupSetBits(KeyEventGroup_Handle,0x2);
    * t0 w. K/ l* D3 N' i! c5 S
  137.                         }
    : O; K& p" Y0 m6 d  ^
  138.                 }
    2 h- i1 ~7 F9 A4 I! V, C" E
  139.                 vTaskDelay(100);9 d1 v- _. k5 c- Z& y) ?3 N
  140.         }4 J5 W) B) U' n* u
  141. }0 W% j  r8 A0 P

  142. & H1 ~) @$ c+ q
  143. $ d( h5 H* [+ C" f6 ?' C! Z" I
  144. static void LedTaskCreate(void)
    / ?1 h2 J) a  }
  145. {% a/ {, {* E+ M- l# ?" ?0 B
  146.         while(1)
    0 m0 o, j. Y$ m6 T# }
  147.         {
    & ?& p8 Y& v3 l- K( G
  148.                 KeyEvent_Counting = xEventGroupWaitBits ( KeyEventGroup_Handle, 0x1, pdTRUE, pdTRUE, 10);
    & K2 g6 l+ ?% b2 m5 ^( u0 k( ], G
  149.                 $ Z( F. i* y1 v* r2 Q) h
  150.                 if((KeyEvent_Counting & 0x01) == 0x01)
    ( m$ g% u) e: R4 ]: Z# S
  151.                 {
    ; b0 F! A8 |& k8 W* c- ?* Z! C# |" |
  152.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
    ) m! q+ _0 O& f, O, U0 H  G0 t
  153.                         vTaskDelay(200);1 W8 G! X# [( z8 x, i3 u
  154.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
    1 d% e9 [" P8 h& ?) d& j% o
  155.                 }, ^; l- i! T8 [. ]# b8 [" f. \
  156.                 KeyEvent_Counting = xEventGroupWaitBits ( KeyEventGroup_Handle, 0x2, pdTRUE, pdTRUE, 10);) x# Z* _4 g2 V3 k+ E0 @1 m
  157.                 if((KeyEvent_Counting & 0x02)==0x02)3 i4 v+ I  J7 a# E7 e+ N  @
  158.                 {
    1 U+ K/ E& t6 {+ o. O* d
  159.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_RESET);5 \  }1 C3 G; B/ ^& g+ B/ @
  160.                         vTaskDelay(200);$ T+ E' `& u3 p- w* s$ t
  161.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
    # s! P# I8 J! F; Y
  162.                 }) n# M4 C  x7 l# M4 k
  163.                 KeyEvent_Counting = xEventGroupWaitBits ( KeyEventGroup_Handle, 0x3, pdTRUE, pdTRUE, 10);; F( T( p0 _- B. k: f: w
  164.                 if((KeyEvent_Counting &0x03)==0x03)
    1 D  v6 l6 {4 {8 w& A& [
  165.                 {
    7 f2 r0 E) |- E( u* C* o; k
  166.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2|GPIO_PIN_1,GPIO_PIN_RESET);
    ' R. @* \  ]5 A6 F
  167.                         vTaskDelay(200);0 j# }- ?& b5 ~; Z" g5 u2 I
  168.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2|GPIO_PIN_1,GPIO_PIN_SET);
      f. d9 f+ P( o2 ?: l2 o& I  G
  169.                         xEventGroupClearBits(KeyEventGroup_Handle,0x03);
    ! v7 X4 N* u( }0 n0 h
  170.                 }, Y& A* @/ Q9 Q
  171.                 5 z2 D) N) C% Z: v: \1 Y+ j# g  _+ |
  172.                 vTaskDelay(50);
    7 O# b1 ^& c' d9 G& ^( }1 K& G/ `
  173.         }
    . b2 g, E+ _' H2 i9 i
  174. }7 N# v1 S& n+ @5 d/ L: [

  175. 0 d6 w0 `# A5 I4 H" |
  176. /* USER CODE END 4 */
复制代码
2 S( Q$ }  ]2 [+ x# E# u

; B5 F1 X1 m8 Z! ~/ m————————————————* F) B4 n2 u* B" w
版权声明:SCCELE
: |  i1 Q3 Z7 C% Y3 m( q. V7 O# `/ q
赞 收藏 评论0 发布时间:2022-10-27 20:01

举报

0个回答

所属标签

相似技术帖

官网相关资源

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