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

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

[复制链接]
STMCU小助手 发布时间:2021-11-9 17:00
1.创建好带有printf-stdarg.c的FreeRTOS的工程
) q& I& w( J3 e. K" I  s
; W& u/ a/ O* e8 @2.修改main.c文件' C* G% ~' c% a4 H  d& e/ }, F( y
9 S' v; E! U* i1 X/ T5 F7 J' O2 M
  1. /* USER CODE BEGIN Includes */- [# K4 ]' P* T  @9 \
  2. ' E( H7 H2 K3 \" A. x: [
  3. #include "FreeRTOS.h"- P: d, @, ?1 [7 C5 [. g
  4. #include "task.h"( k- E0 s! `- [8 O6 B( K
  5. #include "timers.h"
      o' {' ?7 ~' g4 @8 K
  6. #include <stdio.h>
    $ D& R: J8 }8 m4 E5 O. x3 O
  7. #include <string.h>+ }2 |7 c9 q" }, [& ~6 _5 a+ K
  8. ! F' i7 R8 E  f
  9. /* USER CODE END Includes */
    0 v* A0 ^6 b2 w% n4 W6 r4 s& ]" h
  10. /* USER CODE BEGIN PV */
    + ?& F, H- e/ c- W# V7 C; @% M% R
  11. static TaskHandle_t AppTask_Handle = NULL;4 o1 c, {3 ]: L, j! c. e2 N0 z
  12. static TimerHandle_t  Timer1_Handle = NULL;: E# Y3 y) `' V3 J
  13. 6 K, Y- Y" q6 N: q5 \+ e7 R8 t
  14. extern int f_printf(const char *format, ...);- v+ k6 d& ~. U, l

  15. / D; F0 P* u1 V4 m/ ?
  16. /* USER CODE END PV */4 b6 C' n9 w0 f4 i
  17. 0 m6 a7 H$ T' R0 a2 e& R
  18. /* Private function prototypes -----------------------------------------------*/
    4 k! Y$ _% X) |2 W' O
  19. void SystemClock_Config(void);
    0 g4 M- w  E, w" ~4 \' E
  20. /* USER CODE BEGIN PFP */+ @9 {. l1 j' X9 B3 c# k

  21. ; h) L% T0 D- [" d4 g2 t
  22. static void AppTaskCreate(void);' ?9 x$ i4 {  g" M. @* p" v
  23. static void TimerCallback(void);
    ( i8 N5 R; E3 u8 D
  24. 7 }8 b) v* _* L( t" T4 P
  25. /* USER CODE END PFP */
    : Z' ^+ D0 r" u- N# y

  26.   t7 n: h& |6 |) o& a3 |) [
  27. int main(void)4 G/ q% j/ \7 g5 \
  28. {3 P: _* C8 ?* `  N$ {: [9 R
  29.   /*  l6 ]( w4 R0 N+ i) \% K( h
  30.    *
    9 X" _" F3 n0 a) F- O* L2 F
  31.    */
    - w- T* D2 v4 O$ ^$ L% {; H

  32. : e. G& Q* v. [  T7 w0 c
  33.   /* USER CODE BEGIN WHILE */3 l7 R' v1 q8 P5 O  A5 C6 w0 h
  34.   UBaseType_t xReturn = pdFALSE;
    8 i9 w' F" x: e( B9 B3 w2 N7 {

  35. 4 y8 N* e/ g) G: d7 I: A) |
  36.         xReturn = xTaskCreate((TaskFunction_t)AppTaskCreate,' h/ s* P. Y# V9 g$ z5 Q
  37.                         (const char *)  "APPTASKCREATE",$ @, i- w) `; i
  38.                         (uint16_t)      128,
    % X9 m/ O# A# _5 Z( ^
  39.                         (void *)        NULL,  |3 F% }3 b: C& ^
  40.                         (UBaseType_t)   1,
      {( I/ E9 o9 }
  41.                         (TaskHandle_t *)&AppTask_Handle);
    " o) }1 A5 ]' b- [# r" X
  42. " w1 p8 \% ]/ K( m% [! V
  43.   if(xReturn != NULL)
    # W3 g% \* T+ B
  44.         {$ ^4 m5 N1 m- W) Y$ }  x
  45.                 f_printf("Task Create PASS.\r\n");
    : [. B# y; [0 y3 H
  46.                 vTaskStartScheduler();" J( V0 w& ^/ D( Q" ]3 n; ?
  47.         }
    8 }  |4 O4 I  _8 m4 `& p: \$ ^8 d+ ?
  48.         
    3 a/ e( ~+ ?- {( d/ Q. e- t: k; _
  49.         7 J9 \' B8 m9 D% F/ T, ?* N' T9 X% G
  50.   while (1)
    2 Q# a4 j& K% |
  51.   {
    $ r$ _, K4 m4 e% ~! v# R
  52.     /* USER CODE END WHILE */$ l6 H9 {: U% ^' h, \: {
  53. ) B- w7 i( c  m
  54.     /* USER CODE BEGIN 3 */' _. t0 ~1 z" Q7 r2 Y
  55.   }% j% w# e% Q$ C. b0 A; ]" n
  56.   /* USER CODE END 3 *// k, n& d0 X; Y" ?! |: n4 c8 V
  57. }
    & d3 c# C: l. a+ q9 i

  58. 5 Y. V/ A& _4 x" s. X3 S
  59. , f0 K0 V6 G0 C4 r
  60. /* USER CODE BEGIN 4 */
    : V0 `5 c( q0 y( {1 y
  61. static void AppTaskCreate(void)/ h3 Y0 x2 g  K0 x; r
  62. {+ e3 p% ^0 R) o8 M  v
  63.         BaseType_t xReturn = pdFALSE;
    # F8 e' y; `1 o$ M
  64.         
    5 m% H) S6 w, O
  65.         Timer1_Handle = xTimerCreate( (const char *) "TIMER1",(TickType_t)1000,
    ! J+ R& B* C7 N; N8 @8 \0 F' M
  66.                           pdTRUE, (void*) 1,(TimerCallbackFunction_t)TimerCallback);
    2 w, l4 R3 @$ ]
  67.         0 h7 _) P. r5 V; I$ x* p7 I( u
  68.         if( Timer1_Handle !=NULL)! C+ B" `1 |% p1 `; ?
  69.                 f_printf("Timer1 Create PASS.\r\n");2 x# D5 L; p% n6 g3 ~5 O
  70.         
    ' h1 o: C/ V+ W# p8 K1 @# x
  71.         xReturn = xTimerStart(Timer1_Handle,0);( |, E" i  ~( ]/ {
  72.         
    5 j  l( S, N0 D& {0 H8 V/ j" ^
  73.         if(xReturn != pdFALSE)
    8 Y! \9 G! l' ^# S
  74.         {
    0 c% _: }) q( B6 c
  75.                 f_printf("Timer1 START.\r\n");: C8 b3 L5 e; P7 u2 S$ [
  76.                 vTaskDelete(AppTask_Handle);! D1 {& L; D1 T/ J
  77.         }0 g  @% R# N" y; t0 ^  Z
  78.         
    - ]5 Y* j/ ?$ k1 K1 a$ ]; r  H7 j
  79. }+ ~# U* H  b/ M! n7 \
  80. static void TimerCallback(void)
    ( s$ h, l8 s! D+ }' c
  81. {: T9 D- s/ _8 w& Z; Z0 y5 S9 k8 S
  82.         HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);/ i4 U' z. @9 H2 a! H/ z

  83. : y" g& j4 I6 m
  84. }" z- ]* T# p+ N( Y7 P0 ?
  85. /* USER CODE END 4 */
复制代码
. J$ L& ]' Z; x4 s

2 I. H% S. Q# J. s) z0 N- L$ C9 H0 e; ?5 L
赞 收藏 评论0 发布时间:2021-11-9 17:00

举报

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