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

STM32G0学习手册——FreeRTOS事件组

[复制链接]
STMCU小助手 发布时间:2022-10-27 20:01
1.创建好带有printf-stdarg.c的FreeRTOS的工程, A9 F$ Y8 L1 k
9 h9 S( Q, F+ r( a
2.修改main.c文件+ G/ \7 c8 K  U) [

! r6 O0 ~* V1 p  f& `8 z4 v
  1. /* USER CODE BEGIN Includes *// I" f) d" S4 R; p8 R

  2. - j) T9 X! U& E% W2 J- g; g- J
  3. #include "FreeRTOS.h") D' q. M0 J. v6 y  p( v9 U! @- Q/ t
  4. #include "task.h"
    . u+ J6 b3 `% T: X% P! r
  5. #include "queue.h"7 V* Q8 a7 V6 y, e! \& Z
  6. #include "semphr.h"
    $ s* t9 A" f2 S
  7. #include "event_groups.h"
    " K: x7 u( Z( N( }, }2 ]. D$ U
  8. #include <stdio.h>
    : T. F9 ~" {1 |$ X9 n6 A
  9. #include <string.h>6 j2 Q( o% R- t+ z

  10. ! W! Y+ Z  B7 A7 Z5 P# Y9 `
  11. /* USER CODE END Includes */6 f7 z7 b9 `: o: S

  12. : x/ }6 R( i. C6 I! s
  13. /* USER CODE BEGIN PV */
    : x" C7 K0 U' d9 m, `) M; F4 R
  14. static TaskHandle_t AppTask_Handle = NULL;
    ' A4 t+ c+ A# X( O" D
  15. static TaskHandle_t KEY1Task_Handle = NULL;
    0 H  [1 ]! \/ c4 R2 \/ x3 D
  16. static TaskHandle_t KEY2Task_Handle = NULL;
    ( F7 E6 }& R3 ^0 q8 O- Q2 E
  17. static TaskHandle_t LEDTask_Handle = NULL;
    ! X9 I( V  N4 V3 E8 U5 J

  18. # Y8 j1 l2 a. X( ~! T
  19. static EventGroupHandle_t KeyEventGroup_Handle = NULL;4 m/ e& G/ H( A/ s/ Y
  20. 7 O1 y& p! M) y
  21. static EventBits_t KeyEvent_Counting = 0;
    , g9 O/ D, L- H& k  }

  22. 2 S3 a9 \! q7 U- R5 Q0 e8 c
  23. extern int f_printf(const char *format, ...);
    ; l5 m: W" n% h5 A! A

  24. - w9 C7 w) S, I( Q& s
  25. /* USER CODE END PV */( L6 E( m4 a6 }6 |1 U( w. H
  26. 5 U- A  U+ u  m  B( D7 y
  27. /* Private function prototypes -----------------------------------------------*/2 w: ^) c+ D9 o( o( \6 g/ q  H7 j
  28. void SystemClock_Config(void);. y  N8 _8 C& }' D8 `6 h' [' T0 k
  29. /* USER CODE BEGIN PFP */; c5 M, G9 S  [( B1 A& k. |! a( b

  30. ( K/ x9 w* D7 p( r
  31. static void AppTaskCreate(void);
    - ~3 z. S+ g6 P8 s
  32. static void Key1TaaskCreate(void);4 L. m: o+ h2 f6 U
  33. static void Key2TaskCreate(void);( _- M) T5 P% @( q5 v! Q
  34. static void LedTaskCreate(void);
    " X, z4 M9 T& i: p4 `% j

  35. ! @6 k) b5 b# M) X, u* f+ C0 _/ @: G
  36. /* USER CODE END PFP */1 L4 D8 e  K6 C& X$ E; |$ F

  37. 7 J$ o5 P+ B, O6 k% \  x
  38. int main()
    6 y0 e7 {- [% ^, s! R) o1 V
  39. {
    ! }. r  `$ K4 Y9 x9 h
  40.   /*) X" b# w, C* G8 O% a! F
  41.    *
    ' a, z1 m* A( Q
  42.   */
    # T' M1 Y  U. X. W6 O' ~
  43.   /* USER CODE BEGIN WHILE *// ?: v3 G& y( ?( @' K) ]
  44.   UBaseType_t xReturn = xTaskCreate((TaskFunction_t)AppTaskCreate,9 Q6 E$ ^8 U* m. n# z
  45.                                     (const char *) "APPTASKCREATE",7 v. q' z/ [& _; Y7 ]
  46.                                     (uint16_t)     128," _; n8 g0 n" Y; ^& M/ `. s
  47.                                     (void *)       NULL,
    ( D3 N+ A( d( V7 o6 A
  48.                                     (UBaseType_t)  1,' z& K$ Y6 E  P6 _2 N8 b7 h
  49.                                     (TaskHandle_t*)&AppTask_Handle);
    ! v# c) B2 V% i+ `
  50.   if(xReturn != NULL)1 i5 N/ H  S; `  ]* o4 ^
  51.         {
    $ R$ T  T& ^% Q1 c! P4 ?) \4 m: ?
  52.                 f_printf("APPTASK CREATE PASS.\r\n");
    & k" t; x0 G1 O4 U! o. o1 H  s
  53.                 vTaskStartScheduler();8 E( {( p3 G6 l8 \% j' x) y
  54.         }
    " k/ o/ a( h, y5 P8 X2 Z
  55. # f% p6 B1 X( I- P4 q* o3 i7 r
  56.   while (1)
    . J5 O9 g& _" y2 m; d$ K
  57.   {* [2 m- f& I2 l  W; o) t3 ]0 _
  58.     /* USER CODE END WHILE */. [- ^- E% R5 S& L9 p
  59. $ D! S  e! O. ~1 l, U
  60.     /* USER CODE BEGIN 3 */# s* o' A" G  F; F
  61.   }; P' N* a% U3 s4 _8 l( g0 M1 [9 S
  62.   /* USER CODE END 3 */
    * R1 q3 F' t; ?$ L* Y! N/ }
  63. }
    1 `- j9 b% C' w

  64. 3 o+ L* N* V9 Z4 N6 c
  65. 8 i3 p' ?" I7 ?# c/ E5 p$ ?5 C
  66. /* USER CODE BEGIN 4 */2 x4 W2 q6 t5 U
  67. static void AppTaskCreate(void)) ^  f% O! D# }; K6 X! |* \( f, e5 \
  68. {
    , _* {2 o& D; ^( C
  69.         UBaseType_t xReturn = NULL;2 ?5 V- H2 Q( l  n2 U  A3 v
  70.         , l" |& N. z6 ^0 j8 x
  71.         while(1)/ S& A( j. z5 U0 Y" E2 Z
  72.         {               
    # l  Q8 Z: M: p; [, E
  73.                
    3 u& F  _/ |4 _' E
  74.       /* The event group must be created first, otherwise the task cannot be executed.*/# a; Z7 r0 G8 e6 F* [
  75.                 KeyEventGroup_Handle = xEventGroupCreate();0 M# ~% q- F( q% [  d

  76. ! J  J0 I/ s: [: a' _
  77.         xReturn = xTaskCreate((TaskFunction_t)Key1TaaskCreate,
    / A5 W+ I0 f( U( `
  78.                           (const char *)  "KEY1TASKCREATE",
    ( E2 l6 x! b5 B
  79.                           (uint16_t)      128,
    & X# [; I- E& k- B1 m
  80.                           (void *)        NULL,9 o9 n# V8 y# d( v$ Q* [
  81.                           (UBaseType_t)   3,
    ) i2 a4 @& g6 T: {: Z5 I
  82.                           (TaskHandle_t *)&KEY1Task_Handle);
    4 p8 x2 r  S, d. a2 ^* k2 y  R
  83.         if(xReturn != NULL)
    7 [6 A  u0 f$ h  \6 V" s
  84.                         f_printf("KEY1TASK CREATE PASS.\r\n");% q6 @0 {6 B9 @' ]; R
  85.                
    7 m  ]# R1 U! t9 c' v
  86.                 xReturn = xTaskCreate((TaskFunction_t)Key2TaskCreate,
    6 A$ k6 s' B, l) M" X4 [5 t" \
  87.                           (const char *)  "KEY2TASKCREATE",  f* U- S8 a& V" [) [  J
  88.                           (uint16_t)      128,
    / }5 v+ G3 s9 m& }! S3 [: L$ l+ J
  89.                           (void *)        NULL,, }7 C* m7 ]+ l- \8 V4 {
  90.                           (UBaseType_t)   4,
    - G1 ?. E* ^5 W  j& J# y
  91.                           (TaskHandle_t *)&KEY2Task_Handle);- ~2 D$ S1 ?; L% H/ l7 k: m1 S
  92.         if(xReturn != NULL)
    9 ?9 [1 ^+ A7 S3 @& C
  93.           f_printf("KEY2TASK CREATE PASS.\r\n");
    . j3 X# Z  k8 F: J1 _( i
  94.                 6 r6 T5 y1 R) J$ w
  95.                 xReturn = xTaskCreate((TaskFunction_t)LedTaskCreate,- O1 v8 F9 N* M- j* R3 r& d
  96.                           (const char *)  "LEDTASKCREATE",
    5 J' M: @# A' T! H5 D
  97.                           (uint16_t)      128,- D. U6 q4 \  D4 A9 U' o. A
  98.                           (void *)        NULL,
    , X( m! N' j7 w$ N( R! f' V  v
  99.                           (UBaseType_t)   1,+ C- _+ C6 G9 g+ z3 C
  100.                           (TaskHandle_t *)&LEDTask_Handle);8 O7 d2 n' M3 B0 {, u& u
  101.                
    & G  F) X  B% W. O1 K
  102.         if(KeyEventGroup_Handle != NULL)
    0 d% H. b5 X& M8 u6 ^4 l8 s" U
  103.                 {2 v. R; K1 k' ]+ k5 }4 X; H
  104.                         f_printf("KEY EVENTGROUP CREATE PASS.\r\n");
      a1 }7 i  V% B- d: L% U+ {! h( X  U
  105.                         vTaskDelete((TaskHandle_t)AppTask_Handle);& [  M$ D: k/ e
  106.                 }                / T% p! }$ l1 f0 X# O
  107.         }
    1 o/ Y* m9 s( f5 i
  108. }
    ( w- x: A. o( A2 a
  109. . H( V8 g6 l. x( _# i# }
  110. 9 _9 O! b2 I$ i  z0 i
  111. static void Key1TaaskCreate(void)* {/ Y) E2 k$ M
  112. {
    8 f8 s- a6 o8 F
  113.         while(1)
    * B0 s$ d, g/ T! X! w: i' m
  114.         {
    ' M/ G  C& l) t4 f' e3 k7 S
  115.                 if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0))
    ; x% e1 A! v. i4 K) h( E  j8 _
  116.                 {
    1 W: a8 i% F7 }
  117.                         vTaskDelay(40);
    ' g0 y3 ?5 V# @5 V
  118.                         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0))' V" F. e! V6 P- b5 s4 d
  119.                         {
    4 ]3 [# A! J8 ^+ `
  120.                                 xEventGroupSetBits(KeyEventGroup_Handle,0x01);
    8 c( F6 ~! U* Y9 c' C
  121.                         }0 Z' M" ~0 D1 R4 _
  122.                 }% {2 D: ^) x4 R  q0 H
  123.                 1 o1 V- B) C" J0 U2 T
  124.     vTaskDelay(100);: q( W" ?0 q: @8 x; i
  125.         }0 W) E" L/ Z6 i5 B- C2 J8 Z/ K' P
  126. }
    5 z1 T/ g# V( n& u% E% [  W
  127. static void Key2TaskCreate(void)' V) B/ U* y3 P% `; o! R4 f% b
  128. {
    3 r) q' u$ }0 B
  129.         while(1). X: r9 i0 y; u) k
  130.         {+ v4 ?1 S' [; \
  131.                 if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_12)==0)
    - q) p; P. o2 W0 z( N, f
  132.                 {
    ( F6 w3 b: x' [1 o, W2 F
  133.                         vTaskDelay(40);/ q; s' f: e! g  @* Z$ G
  134.                   if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_12)==0)
    . K# t/ j0 s$ `
  135.                         {
    5 G1 e- z% F% t* _/ E) T) L
  136.                                 xEventGroupSetBits(KeyEventGroup_Handle,0x2);) p2 i; d3 c( z/ V
  137.                         }
    4 e6 s& n: F; z9 q# X
  138.                 }* `) r$ c( x3 p8 d
  139.                 vTaskDelay(100);) ~$ M* T- k' d1 n" L
  140.         }
    & J4 c/ F" k4 z, X* O
  141. }
    * w2 ^2 Y* @7 {. F8 E
  142. 9 a+ v1 v  K% \: s" J( R
  143.   H! z2 L6 K$ S9 A4 V5 o/ x# w
  144. static void LedTaskCreate(void)$ U% ]% O( y8 e; ]& q& u
  145. {; V" \6 Y$ g/ p1 d0 ?
  146.         while(1)6 z) e. w* {# w3 X5 W
  147.         {
    7 u2 n; t* C+ C, C( U- {1 t
  148.                 KeyEvent_Counting = xEventGroupWaitBits ( KeyEventGroup_Handle, 0x1, pdTRUE, pdTRUE, 10);% r" R4 x# u( l9 N/ [
  149.                 . D3 z9 F2 i7 y- V  R
  150.                 if((KeyEvent_Counting & 0x01) == 0x01)6 s- H) h$ l. q9 m/ ]! R* q
  151.                 {
    # e3 Q8 G8 l" K7 V! u4 z5 X! R
  152.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);" @3 b: C. H% M
  153.                         vTaskDelay(200);
    1 Z0 K; _: p( ^, {+ l
  154.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);% M9 W* _6 `: J: K$ J* n+ q, W5 ]
  155.                 }
    / Z6 d! c  R! E
  156.                 KeyEvent_Counting = xEventGroupWaitBits ( KeyEventGroup_Handle, 0x2, pdTRUE, pdTRUE, 10);5 X# o/ b$ u' J; A4 u- ~2 @
  157.                 if((KeyEvent_Counting & 0x02)==0x02)' p1 X* s6 u/ M
  158.                 {
    9 M. l" c5 D+ V0 s
  159.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_RESET);
    + W' b8 T7 ~+ m5 R& {. q5 K
  160.                         vTaskDelay(200);
    % r1 R# B) K) e% r  a
  161.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
    * A( P0 |& m' j5 h) c) a% _) L
  162.                 }& X: ?; I1 S1 l
  163.                 KeyEvent_Counting = xEventGroupWaitBits ( KeyEventGroup_Handle, 0x3, pdTRUE, pdTRUE, 10);. u' d; }2 R0 X3 M/ i2 R3 Y  N
  164.                 if((KeyEvent_Counting &0x03)==0x03): u' g) L/ k& H' F
  165.                 {
    * ^; y- x8 {* G7 Z5 M
  166.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2|GPIO_PIN_1,GPIO_PIN_RESET);6 \5 [" ^; O: N) B+ _9 t9 ?
  167.                         vTaskDelay(200);
    9 ?6 o0 y1 O5 v+ ?( Q% A% j$ T1 w
  168.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2|GPIO_PIN_1,GPIO_PIN_SET);
    ( n! G, p3 R. r! s( E8 r
  169.                         xEventGroupClearBits(KeyEventGroup_Handle,0x03);& R0 W# G$ @! C7 M
  170.                 }
    - ?# G' c% z; @! s& v
  171.                
    $ Q0 W6 b7 }7 l+ w  y1 `8 K* a  O3 |, y
  172.                 vTaskDelay(50);
    , Q% v7 a* a8 P$ y2 Z
  173.         }
    7 v, ]) Z. h" D( [4 ?& ^- ^
  174. }
    ; ~- X! W* k& t3 {9 v0 J2 j- A, f
  175. ' b* V% Q, E- P* g( q
  176. /* USER CODE END 4 */
复制代码
% J9 }2 s2 f/ ^6 H7 O7 b, Q
& n: [; X9 K; Z5 B% s0 U
————————————————
  k* }  R) J" N" F& Z! A. F; }版权声明:SCCELE
; C, I0 h% F3 k3 U9 y9 H
! d9 J' X0 V. @* D
赞 收藏 评论0 发布时间:2022-10-27 20:01

举报

0个回答

所属标签

相似技术帖

官网相关资源

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