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

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

[复制链接]
STMCU小助手 发布时间:2021-11-9 17:00
1.创建好带有printf-stdarg.c的FreeRTOS的工程
! }# q  D0 R: D) U0 K2 c3 V9 D0 M" q/ x7 ?5 a
2.修改main.c文件; |: c! d7 E5 O9 d
! w; G% I! b: P) [% l2 P
  1. /* USER CODE BEGIN Includes */
    , }( e; L0 t8 E6 d. M2 q% V

  2. 0 q$ L. }6 O! J1 q6 J
  3. #include "FreeRTOS.h"
    ! T( L. `4 k, @# i( ]
  4. #include "task.h") s$ k% e- N1 s8 t
  5. #include "timers.h"" }" U  `3 c8 A' f9 [! H7 o
  6. #include <stdio.h>* \' j$ h1 x* b+ Q% q1 E* m1 D1 C
  7. #include <string.h>
    ; [2 M/ U. q+ \" A
  8. - ]1 q  W% e( `8 g; ^
  9. /* USER CODE END Includes */
    4 a3 N3 a: O$ F( l) h7 e* W
  10. /* USER CODE BEGIN PV */4 B: y: O* t  U7 D
  11. static TaskHandle_t AppTask_Handle = NULL;
    % T; A3 h. I* |
  12. static TimerHandle_t  Timer1_Handle = NULL;
    6 K( \' y1 j# y
  13. 4 r, A0 E. `9 F7 n! ~4 D
  14. extern int f_printf(const char *format, ...);
    - v4 i5 X+ ^8 W; W4 P! z7 _" I
  15. * p8 w. {; Z4 P( j8 T7 k8 k
  16. /* USER CODE END PV */0 f+ K+ o0 }2 C& L  z  [" C8 y

  17. # A# {0 k( B  n, k2 Z
  18. /* Private function prototypes -----------------------------------------------*/
    . c6 e. ^, ~9 [: m* i8 h% f6 k
  19. void SystemClock_Config(void);2 |3 u8 y" ?: i( L; P
  20. /* USER CODE BEGIN PFP */
    ; `( T5 X2 q0 M6 B/ A5 W, ?& [
  21. , S3 @6 z3 i1 N# w+ b9 A& S( J
  22. static void AppTaskCreate(void);- e) N) M8 P; S
  23. static void TimerCallback(void);+ ?7 {$ z8 p0 Z' H
  24. 8 u  c  R' S2 A1 C( W1 @. T$ [
  25. /* USER CODE END PFP */
      r, |: A( ?: q) ]0 ~+ ^& K

  26. # i9 J! Q2 T: h* ^! D: F& X
  27. int main(void)
    % a$ E" _" x) S
  28. {  r( t3 _3 Z, v3 f
  29.   /*
    4 D4 R# L3 r0 Q1 x) T
  30.    *
    * `0 a. W" q/ k& L9 K; k% L
  31.    */! {. A  a6 k7 Q  J& p. B7 }7 D
  32. 2 T! f- N: L1 O* I; \
  33.   /* USER CODE BEGIN WHILE */+ a1 S% C3 L$ Y
  34.   UBaseType_t xReturn = pdFALSE;- I4 k# H& u7 o( W8 u/ J
  35. ( H7 b- v: j; A- w/ \3 b* @
  36.         xReturn = xTaskCreate((TaskFunction_t)AppTaskCreate,( H  I. l3 ], D) D% w; r
  37.                         (const char *)  "APPTASKCREATE",2 }9 S8 s- A) O, y
  38.                         (uint16_t)      128,- t, v& j' Q; ^9 f& f1 h& Z, A
  39.                         (void *)        NULL,9 q% H( b9 }  K
  40.                         (UBaseType_t)   1,
    7 W7 C  R1 l* B4 H
  41.                         (TaskHandle_t *)&AppTask_Handle);
    : K% }0 ~3 m' E
  42. $ C, L! z; s3 b" O- d8 w! c
  43.   if(xReturn != NULL)# i( q7 m1 W2 ]1 X7 c$ |% e( @
  44.         {
    # w& u1 R! H% ^# d4 K
  45.                 f_printf("Task Create PASS.\r\n");
    * U$ l* O: l6 T/ ~; k4 y; ?  V7 `
  46.                 vTaskStartScheduler();
    * W8 W6 l) e- ^3 Z9 Q
  47.         }
      s# Y7 m+ D/ F5 `" G  Q3 |) r
  48.         
    ; G; C& O4 r' C; m/ O8 Y
  49.         " m6 {7 i2 Y4 }
  50.   while (1)9 C* ^# ^: c, D+ ?8 }8 y+ O1 s
  51.   {9 V  S3 ~/ X: ]* w% L
  52.     /* USER CODE END WHILE */
    0 v2 L0 h! k4 a
  53. # w: p% n. ?7 D4 n
  54.     /* USER CODE BEGIN 3 */
    3 x, G3 y9 P4 c! l0 z
  55.   }" l5 j' J# F1 P9 T
  56.   /* USER CODE END 3 */
    5 C* d3 J/ x! m+ s: j1 F4 ]9 t& f9 U
  57. }- Y3 o6 C" O0 C# z: C& C

  58. ( _5 m' X+ Y/ S9 b; `

  59. 8 M% M9 L& a  d5 p5 @6 ~
  60. /* USER CODE BEGIN 4 */
    5 b2 N  N7 I9 Q7 h8 ]1 _! f  O
  61. static void AppTaskCreate(void): \5 g' |& a8 `7 Y* L6 c  }
  62. {
    % S) \2 a+ U6 b: n9 R; p0 Y! d
  63.         BaseType_t xReturn = pdFALSE;- h! f0 R+ L) b  M  l6 n
  64.         
    ) U: W5 K( b& |2 S! P  h  D
  65.         Timer1_Handle = xTimerCreate( (const char *) "TIMER1",(TickType_t)1000,& ]; U7 Q' K, M! ^& r+ M% \% J7 C
  66.                           pdTRUE, (void*) 1,(TimerCallbackFunction_t)TimerCallback);
    # r* A& O& w& @% \6 X$ U6 L- q" \
  67.         4 ^/ W& C  g7 A# A& T8 m3 R
  68.         if( Timer1_Handle !=NULL)
    " K. W' K( ?+ T7 E
  69.                 f_printf("Timer1 Create PASS.\r\n");
    % w! W( m4 o, l, \' Z  ]( w
  70.         & ^) V) q  Q3 ]3 Y3 v. j: [
  71.         xReturn = xTimerStart(Timer1_Handle,0);# T9 c) Q# o- ~. ~: q( F
  72.         ( K5 @% I# I7 L7 B8 _5 V1 b
  73.         if(xReturn != pdFALSE)
    # G! r! A, L5 R7 H* v
  74.         {0 H5 Q. Z# Z4 h( H
  75.                 f_printf("Timer1 START.\r\n");" H$ Q" Q% w' g7 W+ o
  76.                 vTaskDelete(AppTask_Handle);
    : V  g$ V. o5 v
  77.         }
    . |6 @0 e% l! b* z: \
  78.         + P+ C% J+ Z& |+ p" Y
  79. }  U9 n6 C  K8 @% _5 N( b& a3 J
  80. static void TimerCallback(void)' l+ J# ^& k! A; p  @
  81. {) W! u3 ]+ a+ }0 u0 N) @
  82.         HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
    ' F% s: Y) ]% m2 o

  83. ; j& T) @! \' v' c
  84. }7 t( o: f) \- Q  o$ t4 u, b
  85. /* USER CODE END 4 */
复制代码
0 C% v' Y0 q1 g$ Q0 y

2 _- y6 s1 m/ M
5 O1 P& O) K; q3 D3 l/ [
收藏 评论0 发布时间:2021-11-9 17:00

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版