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

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

[复制链接]
STMCU小助手 发布时间:2021-11-9 17:00
1.创建好带有printf-stdarg.c的FreeRTOS的工程9 H$ [- h" U3 I7 i. H
! N( u- V) Y% S$ e9 b* X
2.修改main.c文件
& \5 W, q3 D7 O7 u7 w: r
" C/ u) F; a5 W
  1. /* USER CODE BEGIN Includes */
    . ^/ Y& b+ \6 N, A* s; ?
  2. , B9 q( i- N) I1 G: h/ _1 O
  3. #include "FreeRTOS.h"
    ) J) {+ Y  ^+ d5 J6 \$ V& L; Z1 X
  4. #include "task.h"3 |6 d7 T( v' Z5 q; k* M& y1 D
  5. #include "timers.h"
    , |  j# _# t  d. x9 F0 G6 j
  6. #include <stdio.h>9 b: ^) J# z" A' |- P$ {* C: q
  7. #include <string.h>6 ~; D: O/ i( X" W& N; b

  8. 0 Z) Y. o, Z* Y
  9. /* USER CODE END Includes */( L5 ~( D) w0 `$ `" @$ e/ y  A, `
  10. /* USER CODE BEGIN PV */8 S$ \: D1 `# n' Z( m+ m% J* l& G
  11. static TaskHandle_t AppTask_Handle = NULL;
    , k( k8 h2 r& v4 X* t
  12. static TimerHandle_t  Timer1_Handle = NULL;0 `2 F- f# h; n/ o( f5 d; ?

  13. 6 I; u( R  L: `" Y' X% p# \
  14. extern int f_printf(const char *format, ...);
    # k- n2 e/ l7 s+ \& p3 O$ c: m

  15. ' @; }* b: S9 S8 o! O5 E
  16. /* USER CODE END PV */) W: _# d* G2 A7 i

  17. 2 W4 G1 L5 i4 ?$ w4 {1 D
  18. /* Private function prototypes -----------------------------------------------*/
    " d+ ]6 U+ f: l+ j
  19. void SystemClock_Config(void);
    - i' J  B. [" x: G; A
  20. /* USER CODE BEGIN PFP */
    : e$ {; I) l1 @' W$ Y

  21.   L' T" Z. l) u3 g
  22. static void AppTaskCreate(void);
    ' Z# {8 `5 S/ Q: [4 y. w
  23. static void TimerCallback(void);
    & Z$ _; L8 Z/ o; `6 {

  24. % ^& ]0 n6 b; |3 @* d2 t3 s. N8 S
  25. /* USER CODE END PFP */
    ; {. q: v. d( M3 K& T6 p1 g" C7 [

  26. . B) @! P9 o& `* v
  27. int main(void). @/ R, e% y, u( ^' d9 C
  28. {
    8 a* @9 L$ |$ _( e/ c* _6 B# N3 [
  29.   /*8 f" j4 k- K& ?1 V
  30.    *" l+ M0 Y( }2 Z# x/ t* E
  31.    */
    & y/ U( B. w- U# I0 j
  32. ' @- ?% o9 U: I4 H+ ~2 l1 N6 X
  33.   /* USER CODE BEGIN WHILE */
    4 z4 Y7 K2 W6 ?5 r% n& |5 f) C
  34.   UBaseType_t xReturn = pdFALSE;7 x( P' B& |. ~

  35. 6 d; l! ?2 X" A, d2 K
  36.         xReturn = xTaskCreate((TaskFunction_t)AppTaskCreate,  q# O* ]7 Y1 ^6 `9 x9 [
  37.                         (const char *)  "APPTASKCREATE",+ c) x/ I0 U  G- K8 t+ p1 F
  38.                         (uint16_t)      128,
    ; q# k' V$ Y% Z: }- Q1 ]" Q
  39.                         (void *)        NULL,
    0 p! t, A) [; T4 N0 b/ V, _
  40.                         (UBaseType_t)   1,8 O  @, N6 v, ~7 X2 v- e
  41.                         (TaskHandle_t *)&AppTask_Handle);- V% Q# O" B8 o0 y

  42. 0 J0 E" y" O. z0 j
  43.   if(xReturn != NULL)" _4 c8 L% c. D0 D. z
  44.         {6 L% K% g9 e1 A# J4 z
  45.                 f_printf("Task Create PASS.\r\n");
    ; y2 g" y3 i) [/ v. x' N' ^5 m! \
  46.                 vTaskStartScheduler();
    . q7 O7 b; E. ^9 _6 H6 v
  47.         }
    * w0 }3 F" Q4 p6 _3 p+ _8 ~
  48.         ) @7 D% r' y  e4 L& X% {
  49.         
    ; Z: i' a) E' O4 y
  50.   while (1)2 W/ R* w  U( B1 l; J& g1 G
  51.   {' y3 V$ J; r& d; M% k& L4 z
  52.     /* USER CODE END WHILE */+ K1 r$ K5 c' Z/ q

  53. / h0 G5 j. S) o7 W
  54.     /* USER CODE BEGIN 3 */- A) A  g4 u/ |' a+ i
  55.   }
    4 Y( ]3 J" I5 ?, X
  56.   /* USER CODE END 3 */" d) |" c0 t2 N
  57. }: E0 b: b; e5 H: b1 a1 R

  58. + G. @# Y+ {% Y7 l# {

  59. 2 S3 E% e: x- N( f; w0 b7 t
  60. /* USER CODE BEGIN 4 */2 B1 t; j8 s* n
  61. static void AppTaskCreate(void)
    2 J, ]; p8 L* s+ T
  62. {
    1 h4 v" H. K( n1 b4 b  p* H. ?
  63.         BaseType_t xReturn = pdFALSE;
    - r1 k# B5 B0 k
  64.         # D% w! W7 N/ T1 I4 l
  65.         Timer1_Handle = xTimerCreate( (const char *) "TIMER1",(TickType_t)1000,' p( h% ~2 f& U1 G
  66.                           pdTRUE, (void*) 1,(TimerCallbackFunction_t)TimerCallback);9 y' t( h& ^( I- i
  67.           Q4 t; O. a+ C7 u/ L4 e- H2 v9 c
  68.         if( Timer1_Handle !=NULL)2 s$ u: `1 J* |5 K6 }- l, f
  69.                 f_printf("Timer1 Create PASS.\r\n");
    - N  h% D0 B% `& P1 A$ h
  70.         
    8 A1 ^  G$ k! b- f2 x- L: G5 j$ R
  71.         xReturn = xTimerStart(Timer1_Handle,0);+ Q3 L8 S/ ~3 B3 M2 U) C
  72.         % j" ?- M4 A9 |, O
  73.         if(xReturn != pdFALSE)! o- f1 k1 c1 k" y: o. S& U
  74.         {6 b4 V. T# K4 m) z1 S
  75.                 f_printf("Timer1 START.\r\n");& O2 @9 T! U# [6 r0 I
  76.                 vTaskDelete(AppTask_Handle);2 Q6 ~7 z" D6 ?  ]
  77.         }6 M; x1 R; C: a
  78.         ) }0 L& N' K  B) I6 A
  79. }% S# R: Z: I! _0 A
  80. static void TimerCallback(void)$ [% Q# r2 l& W+ E- @( s. Z+ k2 b
  81. {' j7 `4 u, j4 f7 e4 g1 `
  82.         HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
    2 n% i; a: z1 a, x+ R

  83. 0 P2 \6 {6 ]; ~" z! U4 @  m
  84. }# [) V. m, T0 ]
  85. /* USER CODE END 4 */
复制代码
% |3 J- g$ Y! g' I, n
5 P; M& n: s5 K4 `$ N- i8 L

$ Y# o* {# U( m7 {5 q- j
收藏 评论0 发布时间:2021-11-9 17:00

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版