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

STM32G0学习手册——FreeRTOS软件定时器

[复制链接]
STMCU小助手 发布时间:2022-10-27 19:56
1.创建好带有printf-stdarg.c的FreeRTOS的工程
0 d3 O* L9 @' e% l$ k# E
* z+ J+ O3 F3 P2 u7 [: O, r. z2.修改main.c文件6 q& _! w5 e) ]9 b) F. r
( |9 l6 V7 F3 t5 t  z
  1. /* USER CODE BEGIN Includes */! K/ Y& y: m5 Z/ i0 P  N, s

  2. 9 l. i6 Z. k- W  j; Y
  3. #include "FreeRTOS.h"
    % s& X- h4 W8 t' |- l7 w6 T( a! z
  4. #include "task.h"
    # T5 _; M( w6 l3 w7 u% d4 Z% |
  5. #include "timers.h"! Z' |8 }6 G/ E' _7 K" b) `& _5 D
  6. #include <stdio.h>* w* h, R; G! L0 j
  7. #include <string.h>* k5 u% g7 m4 z  X" j
  8. 1 x4 q' E0 V( o9 k( [: @
  9. /* USER CODE END Includes */
    " O3 g' ~9 _1 O# I/ q" ^4 o) V
  10. /* USER CODE BEGIN PV */8 g* S- ]- j. q- j% P/ j
  11. static TaskHandle_t AppTask_Handle = NULL;- l, x" S+ A! |* H7 `
  12. static TimerHandle_t  Timer1_Handle = NULL;5 ~1 t7 V" f- H3 k( N  C
  13. 5 A5 |/ \5 m, Y% ^) Y6 ]
  14. extern int f_printf(const char *format, ...);2 G1 l0 `5 J/ o0 T8 J7 C$ V! E

  15. . a1 A# {8 `5 J' n& a  R$ R2 k
  16. /* USER CODE END PV */6 o/ S- s* F% t1 K
  17. & F( c) T* L2 e0 Z& w
  18. /* Private function prototypes -----------------------------------------------*/
    2 b7 i1 s% V9 d9 ~: P# K4 Y7 e
  19. void SystemClock_Config(void);
    6 E' ?5 @+ M3 V" Y$ B5 ]* s
  20. /* USER CODE BEGIN PFP */
    ' e1 U4 c% b# R# s1 d

  21. * p+ n- V) c9 D+ f7 Z
  22. static void AppTaskCreate(void);6 a1 f- {1 b5 ?$ p9 y
  23. static void TimerCallback(void);
    / ?( I% o& r0 o: q

  24. ; l/ E) T- n; X0 _  \
  25. /* USER CODE END PFP */" `  m# z7 W# d  U9 t& u" f

  26. 5 u( s. Z; v3 H+ B1 H
  27. int main(void)& l- c7 s- x! _5 V! r* \
  28. {
    : N. c1 ]7 k& W$ _/ t+ N
  29.   /*
    4 T  h  Q3 A9 j) I' ]; k3 O/ [4 R
  30.    *! i  I1 K# y' s& Z& v9 B7 Y
  31.    */4 E2 O  d# q8 r3 B
  32. 9 N* O; w  R, T6 U0 T
  33.   /* USER CODE BEGIN WHILE */
    ) X" o% M0 m+ d  o1 G2 W/ Y& D6 v5 y
  34.   UBaseType_t xReturn = pdFALSE;+ k) O$ J+ d) n) y* Z

  35. 7 K! G4 y( l/ `. z' D9 f5 P  I3 f& X
  36.         xReturn = xTaskCreate((TaskFunction_t)AppTaskCreate,5 u' L/ b# g2 D8 e
  37.                         (const char *)  "APPTASKCREATE",
    # J$ {0 b' ^) l1 J: q
  38.                         (uint16_t)      128,
    7 u& r6 c! a0 U
  39.                         (void *)        NULL,
    8 l) h, t4 l% S& d; u
  40.                         (UBaseType_t)   1,4 @  }9 D5 i. e% U% N, J
  41.                         (TaskHandle_t *)&AppTask_Handle);
    0 _/ }5 W) V8 Q+ G" V
  42. * z! D! r) O/ s8 E! u5 N4 e  V
  43.   if(xReturn != NULL)
    / q3 g/ G1 x6 K0 b% v1 N" I
  44.         {2 r- d' E/ l) I8 F
  45.                 f_printf("Task Create PASS.\r\n");8 S" B" H6 T1 s$ a; G$ }- \
  46.                 vTaskStartScheduler();$ |  e2 w& r4 l2 U1 _: @% ?
  47.         }8 L3 C0 z5 O+ d6 s; c
  48.         
    8 t" e) ~# i! B' a( o6 {1 r
  49.         
    4 c7 ~2 f* q& N% G- a9 {- ?& @
  50.   while (1)
    9 S. d, N% ^3 X" v" K& W/ L
  51.   {
    3 z7 L1 y- O% S4 x
  52.     /* USER CODE END WHILE */+ Y2 C/ }2 Q' A' @" ^
  53. ! _! J8 T. l1 a( ~9 R
  54.     /* USER CODE BEGIN 3 */# P/ B0 O/ O5 k) F  m/ j
  55.   }
    : b  m3 n+ J# H5 y. K5 i: H
  56.   /* USER CODE END 3 */+ C* }# d- z0 e  K. G
  57. }# J$ \$ A# g3 u/ R; H

  58. % |% V/ Z; I$ }* g0 ^* T" p

  59. 4 j; m# T# B2 Q9 {3 b
  60. /* USER CODE BEGIN 4 */) u% C" l) u/ i4 X1 v; N0 k
  61. static void AppTaskCreate(void)4 v/ u, |0 T6 d
  62. {9 J4 R+ g* _& ]! r
  63.         BaseType_t xReturn = pdFALSE;8 r7 R) b9 f' o- D
  64.         
    ( R' I/ Z, u; b1 J6 L- A5 _
  65.         Timer1_Handle = xTimerCreate( (const char *) "TIMER1",(TickType_t)1000,
    2 T4 M8 Y! a$ I8 x9 `
  66.                           pdTRUE, (void*) 1,(TimerCallbackFunction_t)TimerCallback);% v& u4 `$ T. R/ `. Z1 t
  67.         
    , B7 E0 k: V8 p5 J$ I* |/ M
  68.         if( Timer1_Handle !=NULL)
    2 \! d: q1 n3 f
  69.                 f_printf("Timer1 Create PASS.\r\n");% ~2 \# r5 r2 U% F
  70.         
    . I( g2 C8 l7 y; c$ g
  71.         xReturn = xTimerStart(Timer1_Handle,0);
    9 e2 k% u/ ?) `: n( C, ]
  72.         ( c. `6 @# q, Q1 x" S
  73.         if(xReturn != pdFALSE)
    ) A! C: I, f: U( Q2 N* [5 f
  74.         {) G$ x3 W" m  q
  75.                 f_printf("Timer1 START.\r\n");, D, D8 i+ W9 A- y/ t
  76.                 vTaskDelete(AppTask_Handle);; K' i% c) q/ U# z
  77.         }
    # R5 K* Z- R: O  ~, N
  78.         " K& g- v: Z0 w* `
  79. }3 R( H# }7 L# W4 Q# H2 G
  80. static void TimerCallback(void)+ g2 Y- P$ i8 g' d
  81. {# H( @' ~- z/ j3 L$ L% b
  82.         HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
    0 O" z% h/ k) o6 H. m7 h
  83. % y2 r$ y; X. ~5 \9 ], M5 B
  84. }2 V  y8 k7 j( d$ Z( c6 ?6 K9 C+ y
  85. /* USER CODE END 4 */
复制代码
0 m6 e4 v* B" i/ H$ M8 @4 u$ v+ `% h
4 U; w4 f" W( P+ q& b. J
————————————————
# A0 ~6 d$ [5 W6 y版权声明:SCCELE4 s: v6 ]' m8 X: M: @  R3 ^
# i$ w. O  f/ n; {" _% m) p
赞 收藏 评论0 发布时间:2022-10-27 19:56

举报

0个回答

所属标签

相似技术帖

官网相关资源

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