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

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

[复制链接]
STMCU小助手 发布时间:2021-11-9 17:00
1.创建好带有printf-stdarg.c的FreeRTOS的工程
, w# [8 m6 v2 u5 X7 q9 {% s0 V  v$ H3 @: m
2.修改main.c文件
8 j1 }4 W& j6 t9 ]0 Z$ d- p3 g) |; L7 u7 \' b" k
  1. /* USER CODE BEGIN Includes */3 p( k3 x5 P) ?/ B

  2. ; j& \: z+ M) t; x& Q* i
  3. #include "FreeRTOS.h"  L; v* l- b+ U# Q8 B
  4. #include "task.h"
    . N& U1 {8 i4 B" o$ R8 X/ z
  5. #include "timers.h"
    * w4 V3 g# d) r$ d5 h6 R
  6. #include <stdio.h>/ ?3 z6 B( P" ]9 e- ~
  7. #include <string.h>0 K- o: H! c1 o4 p: q8 E9 y

  8. 8 ^3 P  a+ \+ `5 B$ V9 c$ t3 `$ W
  9. /* USER CODE END Includes */. _: T1 O$ Q) z, s
  10. /* USER CODE BEGIN PV */
    ) ^1 d+ p/ j9 R, n* x/ `
  11. static TaskHandle_t AppTask_Handle = NULL;
    ( \$ |/ x9 T- s0 f6 l4 W; d
  12. static TimerHandle_t  Timer1_Handle = NULL;' \3 E4 o6 |& v
  13. # U+ I2 w  z0 c! Q, a/ b+ X& f
  14. extern int f_printf(const char *format, ...);
    9 O, J, D" i; ?3 G8 q. ^
  15. & N9 U% J0 l0 h" r' f5 y2 D9 s( C
  16. /* USER CODE END PV */' S, |* z- E, O* D
  17. . s* V+ _5 c9 \& E1 Y
  18. /* Private function prototypes -----------------------------------------------*/
    - ~, N3 X, F" `7 K% k8 f! F
  19. void SystemClock_Config(void);% W1 @; h: L6 A6 ^) K# O7 ]
  20. /* USER CODE BEGIN PFP */
    " p+ ~' u$ G% U; x4 H+ a
  21. : R, N7 o$ p3 _
  22. static void AppTaskCreate(void);' X6 ^4 m: u- b& B- M0 y
  23. static void TimerCallback(void);
    3 j& k5 I1 i1 b9 P# R3 g

  24. 5 p# s9 R  v% R- v' `
  25. /* USER CODE END PFP */
    % L) q$ k3 S$ }- Y2 M

  26. 2 N" w& M) m" l; ?7 _
  27. int main(void)  b" s  C2 A6 m& w8 q
  28. {
    ! c: o7 K; v0 T; }6 y% k/ V
  29.   /*
    " o) b( F/ W5 T# N/ c
  30.    *
    ' m. S" h! O6 |% ], ~, S5 d6 D
  31.    */
    5 s) j9 V7 I' f6 |3 Y# _* ?, B5 \
  32. ! L9 c! ~6 L. D
  33.   /* USER CODE BEGIN WHILE */
    8 s! ^# I; p2 O2 O0 }
  34.   UBaseType_t xReturn = pdFALSE;
    / H2 Y  w1 P* \" Y0 }4 d+ I. O

  35. 7 M- `; [0 k9 ?* ]
  36.         xReturn = xTaskCreate((TaskFunction_t)AppTaskCreate,
    + L- O" l6 a, G5 M) c! Q
  37.                         (const char *)  "APPTASKCREATE",
    5 J6 s9 l% q5 v
  38.                         (uint16_t)      128,8 U5 u2 b/ X8 Y9 v  X7 R
  39.                         (void *)        NULL,( d$ Y5 d+ N& d8 ?! g4 k6 X- {
  40.                         (UBaseType_t)   1,
    . n) ]$ }* q/ V9 m- B6 g  W1 ^! o
  41.                         (TaskHandle_t *)&AppTask_Handle);
    / b3 E2 g% G' `1 I8 W8 R

  42. # y. C0 V& o. k6 B
  43.   if(xReturn != NULL)% T/ F4 \( Z5 l3 }8 J* Z
  44.         {5 e, l& B% ~- r. X' j
  45.                 f_printf("Task Create PASS.\r\n");" g8 ^& u4 u. H7 _; o  e/ V
  46.                 vTaskStartScheduler();7 ?, k% ^: D3 O( r% Q) [
  47.         }
    % M; K# @- u1 g3 K& ^/ k3 m
  48.         0 ]" R! u, |3 b% z/ K1 C" N
  49.         
    - J( X- M! S0 t2 l
  50.   while (1)5 Q: H9 l6 Q0 g
  51.   {
    + t+ u9 g9 `' }, R  Z: Y. ~
  52.     /* USER CODE END WHILE */! }' V( ?* i7 C( d( ]
  53. 0 x/ n5 ]) L4 W7 g9 H9 N
  54.     /* USER CODE BEGIN 3 */
    - p) N- S2 l# `1 l' s9 _
  55.   }
    & }" x6 S; Y/ B% @  E0 d
  56.   /* USER CODE END 3 */
    . r/ g! i( b% X3 I+ Q5 F: W
  57. }
    7 E9 }4 k% B5 i( |! l

  58. 2 {& q1 x1 w- S8 S* i7 C7 @
  59. 5 Y7 K, p% K& Z6 i& @8 m0 O
  60. /* USER CODE BEGIN 4 */
    ( K! K! M8 A+ _( N2 b
  61. static void AppTaskCreate(void)- H5 D, r' k; n+ a3 E
  62. {" ]4 \- }# a/ B" d
  63.         BaseType_t xReturn = pdFALSE;
    , \$ `2 O2 F* F$ L# ~9 y
  64.         
    ! \' N" b5 A$ i9 x5 J+ H: s2 A) J
  65.         Timer1_Handle = xTimerCreate( (const char *) "TIMER1",(TickType_t)1000,
    : j. N% j4 K- I* o& i1 p
  66.                           pdTRUE, (void*) 1,(TimerCallbackFunction_t)TimerCallback);& A2 z; p  T# s& b5 V
  67.         . \7 o6 z9 h' a  Y/ _+ {7 s% ], ?
  68.         if( Timer1_Handle !=NULL)
    $ v% B: N) S) c, T4 x
  69.                 f_printf("Timer1 Create PASS.\r\n");3 N+ a' @3 Z% j  q7 {7 i8 }* K
  70.         $ \. A7 w6 Y1 |3 w
  71.         xReturn = xTimerStart(Timer1_Handle,0);3 b0 R) E. n+ I
  72.         2 D4 x) g$ H0 n, b
  73.         if(xReturn != pdFALSE)
    . v2 X) r/ v8 F' b' {# h
  74.         {; G0 D# P4 j8 b( H6 g0 E, K/ h# E% }3 X
  75.                 f_printf("Timer1 START.\r\n");
    2 ^0 t5 \1 Y& Y! r
  76.                 vTaskDelete(AppTask_Handle);
    4 D0 x& @& k+ P3 f) e6 n9 O
  77.         }
    & H0 v9 x. h& v4 _; h1 r, A
  78.         
    . ~+ L- h, a1 _. l1 z1 c4 F
  79. }! N+ O. n2 G& @* C0 y5 o2 o% S
  80. static void TimerCallback(void)
    7 C& V) Z1 v- u! U: ~! v4 b
  81. {
    7 G, M& _3 D; i/ J: o/ y* J
  82.         HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);! g7 S) b: c) S% P( l  M, @

  83. ' F8 \$ @' w, r2 D4 I# q
  84. }
    . F8 E/ _1 {/ o2 H& i- m
  85. /* USER CODE END 4 */
复制代码

% \3 W& b5 x6 W# H% s) k  S, \0 [$ ]8 g; W+ ]

. Q+ I8 ~- x, U7 K; o8 {
收藏 评论0 发布时间:2021-11-9 17:00

举报

0个回答

所属标签

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