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

【经验分享】STM32G0学习手册——FreeRTOS软件定时器

[复制链接]
STMCU小助手 发布时间:2021-11-9 17:00
1.创建好带有printf-stdarg.c的FreeRTOS的工程
3 T, F: y. K1 U2 e+ J5 g
; _! d0 ?- G- k2.修改main.c文件
9 S$ \6 k. p6 R  d, ]& C& W/ i3 j+ s2 ~; ]! e0 X+ @
  1. /* USER CODE BEGIN Includes */
    4 R/ H6 Y4 h2 w* D3 y3 p- A2 }
  2. 0 i8 H, J, y6 N2 K
  3. #include "FreeRTOS.h"$ b% l7 j% p! E: t' ]7 \$ o
  4. #include "task.h". n: d; _8 Q/ r5 g
  5. #include "timers.h"
    / I6 j- J7 Z: e& _  b' K
  6. #include <stdio.h>  ^% p/ o" h! P3 {$ O4 S3 [
  7. #include <string.h>1 i- D( G- O# y; l/ q) E9 Y2 k& o% M  R
  8. & A9 }! V, o9 e, m% G
  9. /* USER CODE END Includes */$ Q" y7 S1 j; j
  10. /* USER CODE BEGIN PV */& m0 n% Z+ U' H9 q3 m/ p
  11. static TaskHandle_t AppTask_Handle = NULL;+ H/ X. u# ~9 s! @- l4 e  o
  12. static TimerHandle_t  Timer1_Handle = NULL;/ ]' a$ h' l* n3 I) ^$ f/ u
  13. ( @* W% D/ g. i9 D/ ^% D& D; Z: P
  14. extern int f_printf(const char *format, ...);) k& `2 b' H+ Q) p% T) V2 Q
  15. 7 O% Q0 a2 h9 Q' M' M
  16. /* USER CODE END PV */
    5 v3 F* y2 c7 Q& G1 J  }

  17. : a, M: U' k$ ?# a+ c7 Z
  18. /* Private function prototypes -----------------------------------------------*/
    & [7 l! X  B7 {3 S" Z; Q7 \
  19. void SystemClock_Config(void);
    5 v( X0 v# f& o$ i$ v: S
  20. /* USER CODE BEGIN PFP */3 g8 G! D3 }5 k$ i: s! d2 E0 `
  21. / W* s# M6 S; f
  22. static void AppTaskCreate(void);
    ' `$ a0 U. m* [
  23. static void TimerCallback(void);
      h1 B0 `' u! u% ~. Q* |/ x$ Y

  24. ) H7 Z' U% _$ L/ ], p* h$ p9 X
  25. /* USER CODE END PFP */
    ' q( d0 I8 `2 G' f6 L' w

  26. % t. h- {: j0 s. i) ^' Z6 Y) J
  27. int main(void)
    ! q) e+ X2 S- [% q7 Y2 B
  28. {
    * t+ @- J8 Q: B+ [$ l( q
  29.   /*; {. J5 U( v* [9 b/ S
  30.    *. W; c; N1 p/ S9 K( R* _
  31.    */- ~# F! p4 F8 u7 @* U5 v* Q

  32. ( O3 T% |2 B/ h9 A
  33.   /* USER CODE BEGIN WHILE */+ q' q3 |  S* g6 e* A
  34.   UBaseType_t xReturn = pdFALSE;
    ) u: d5 Z$ z9 K5 ]. U
  35. ! P6 c3 Y1 O: F9 {9 E0 M
  36.         xReturn = xTaskCreate((TaskFunction_t)AppTaskCreate,
    - k  @7 [. K9 i2 h5 ~
  37.                         (const char *)  "APPTASKCREATE",/ u( t8 N% I8 V# X* V. G
  38.                         (uint16_t)      128,
    ! j  e. s# C) y1 G* t
  39.                         (void *)        NULL,5 e1 }0 X' Y8 h. {/ f9 A1 V) q  {8 U
  40.                         (UBaseType_t)   1,$ V# H( `" V% p6 I& b; L
  41.                         (TaskHandle_t *)&AppTask_Handle);3 D* o9 j/ u2 N( Y$ K

  42. / @/ [( [0 |7 Q" s" K+ j- Q' G  j
  43.   if(xReturn != NULL)  m/ G! e) X) C" q5 M2 E' r) r6 a
  44.         {  R2 _2 s" p& y% u* a
  45.                 f_printf("Task Create PASS.\r\n");
    ) t0 ~( `2 B3 A" t
  46.                 vTaskStartScheduler();
    ) ~, j( b2 w4 I. a
  47.         }
    - T8 W. T& L4 }% C+ v0 W5 |
  48.         % S/ E6 d7 q$ z8 H$ A
  49.         1 X, L+ I: {- w( k- Z) Y0 e
  50.   while (1)" e  R, `5 x$ N; f" I
  51.   {4 d1 t! R% _, B4 e
  52.     /* USER CODE END WHILE */
    7 x( M& ]7 E* h" U* R5 c7 X/ t
  53. % F8 `" o) ]( w4 s: o+ n$ L- G8 H$ f
  54.     /* USER CODE BEGIN 3 */
    # B; b7 @" @6 B* }2 g$ S( Z6 w
  55.   }
      D; ~1 @0 E2 @; Z' I) v
  56.   /* USER CODE END 3 */; n! n& ?9 k6 {( Z* V8 b
  57. }, _  }% \5 L; q, a8 i6 @: T
  58. * v4 t; ]" c: T+ ]- _
  59. 1 g2 y7 V* K9 N
  60. /* USER CODE BEGIN 4 */* D1 v" G$ q# A; E9 E' A
  61. static void AppTaskCreate(void)+ Q% @, O* {  c+ l1 h
  62. {
    $ O2 f# A2 m5 N+ y/ \4 U+ Z, ?
  63.         BaseType_t xReturn = pdFALSE;# P8 P: i$ n0 l
  64.         
    $ O" K5 F/ s1 F% b
  65.         Timer1_Handle = xTimerCreate( (const char *) "TIMER1",(TickType_t)1000,
    4 l3 {: g5 S5 n/ z8 e2 l
  66.                           pdTRUE, (void*) 1,(TimerCallbackFunction_t)TimerCallback);
    % K* e" c0 I9 o6 F" @$ W* x4 w% _% ?
  67.         8 a# c# a% p! C4 I4 E  ]
  68.         if( Timer1_Handle !=NULL)3 q1 f) S( W0 i( e7 |# w' _
  69.                 f_printf("Timer1 Create PASS.\r\n");
    7 f4 z$ G! H5 w  R4 A3 H5 }* X3 f. U
  70.         
    4 r# x, L( {& C
  71.         xReturn = xTimerStart(Timer1_Handle,0);
      f$ E* q3 }5 W% F& m* k* @
  72.         
    : A/ a: x% X5 f( K/ Y1 f0 z
  73.         if(xReturn != pdFALSE)
    9 i8 u6 P( q- M- z8 r: A& s; n
  74.         {3 o7 K3 w7 Y8 P8 Q* c
  75.                 f_printf("Timer1 START.\r\n");
    ' s% R0 ~0 O. ]4 X
  76.                 vTaskDelete(AppTask_Handle);' B; i0 t) {9 C8 \. R# |* z" d2 _
  77.         }
    1 [7 f/ `  [8 R
  78.         - w7 F9 p  C, P# c, R9 Q( B! U
  79. }
    + e0 ?7 n  ^, n# ?5 L  h
  80. static void TimerCallback(void)! T. r  ]5 V, Q  n( K; x
  81. {9 L9 b6 h5 D$ T0 S! Y4 G8 K
  82.         HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
    : o: I& s* n% X" H$ a) q6 ]9 I

  83. * E. Y7 u8 G: ~% \- J% ?
  84. }
    2 t# a0 q5 d4 b3 t% _) \
  85. /* USER CODE END 4 */
复制代码
9 O9 Q5 e8 F2 a2 p7 t
) A1 n5 t1 N6 E) f& h

$ N* d- n/ l& d0 H2 [: B: |$ V' j
收藏 评论0 发布时间:2021-11-9 17:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版