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

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

[复制链接]
STMCU小助手 发布时间:2021-11-9 17:00
1.创建好带有printf-stdarg.c的FreeRTOS的工程7 u" N; l7 x( M7 \* T9 I0 f& G1 ^
$ e/ _4 F$ C+ t' E
2.修改main.c文件
7 Y' i  o  h/ v5 \2 r
' h/ q6 \3 ^" S- X* i; P
  1. /* USER CODE BEGIN Includes */) E% h; T5 n% Q1 V9 E2 c4 j

  2. $ O8 S. T: o$ m" g/ c! n$ q7 ~7 v) e
  3. #include "FreeRTOS.h". m( k) w8 O8 x5 ~& S/ ?
  4. #include "task.h"
    $ b7 S, R2 R5 f  e) s
  5. #include "timers.h"- K6 N. T2 r+ G/ X+ j
  6. #include <stdio.h>
    1 x, h" K6 Q  X3 K% W
  7. #include <string.h>
    3 c# b; q  \$ J
  8. 3 g) u0 E. `6 [4 [* `$ f2 r
  9. /* USER CODE END Includes */5 w% {5 u7 E0 x' e( |
  10. /* USER CODE BEGIN PV */5 L" ^2 P/ E- M+ A  E4 R" D( a
  11. static TaskHandle_t AppTask_Handle = NULL;
    + L- X: C4 g& z* ]
  12. static TimerHandle_t  Timer1_Handle = NULL;4 S! Z' M+ `- J+ P- l8 j

  13. 1 A1 l! J* ^5 R# f
  14. extern int f_printf(const char *format, ...);
    % ]( H3 {. i7 g9 G$ j+ [( h
  15. + E6 B$ n8 J- M7 E- j% s: a0 }" [
  16. /* USER CODE END PV */' y  z" L2 |5 [& ^! w0 C

  17. 4 C2 f$ j" @' C* F# r( _/ O9 X
  18. /* Private function prototypes -----------------------------------------------*/2 a! a* ]. V  O, `) e9 \
  19. void SystemClock_Config(void);
    5 E* V$ x0 s: }' d' D
  20. /* USER CODE BEGIN PFP */
    1 d) r/ V- g% W& T1 z
  21.   v  \; x5 G$ b# r  @' D
  22. static void AppTaskCreate(void);, h. B0 e- R' Z1 D3 E4 ?
  23. static void TimerCallback(void);
    4 ]( i) ~/ m; w; X, y
  24. 2 W' i; s5 }! [$ i
  25. /* USER CODE END PFP */  d% h% Y& q& [( w5 \6 H! U

  26. 8 v/ U6 @* R8 b, O, V2 R0 i. P
  27. int main(void)
    9 k  i/ o9 s( c2 w$ {8 g( \
  28. {+ c4 l: G. R! Q* C# N
  29.   /*
    ! z1 w/ V9 A0 i
  30.    *7 _2 {  _+ K, w) @: ?
  31.    */
    ( k6 l" Y* N$ {
  32. $ r; A+ U0 t  Q& g7 z$ |$ N
  33.   /* USER CODE BEGIN WHILE */
    $ d4 [- P( J% g6 b4 K
  34.   UBaseType_t xReturn = pdFALSE;
    " f! }' W7 C& ?, e4 w; U# c

  35. + O" W$ `+ L$ t4 ?
  36.         xReturn = xTaskCreate((TaskFunction_t)AppTaskCreate,
      V5 b; v2 N% N, r/ n4 ^+ ?5 p9 J
  37.                         (const char *)  "APPTASKCREATE",
    5 C, l/ h3 V# C* g
  38.                         (uint16_t)      128," Y& \+ b2 d9 J5 j2 o' y
  39.                         (void *)        NULL,, [6 e6 P, i( N% Q' X( O
  40.                         (UBaseType_t)   1,. z. @, G4 T+ ?& S
  41.                         (TaskHandle_t *)&AppTask_Handle);- F; T7 y" G. y5 w2 j
  42. / Q4 {* t3 D" J) y: P
  43.   if(xReturn != NULL)
    2 Q( S9 J2 u7 i) O. ^
  44.         {1 z" G1 D0 y1 d1 ~
  45.                 f_printf("Task Create PASS.\r\n");) u3 D5 R! n% r& {) G( o. Q3 K
  46.                 vTaskStartScheduler();; t4 ?0 X! Q  z/ E
  47.         }
    0 r, ~: T* ^7 H, X
  48.         
    , `' ^$ [' \6 Q" i* C# u3 R! V% F
  49.         / @: W3 h2 R9 }; w# r: ?
  50.   while (1)! X7 Y. r# t* G9 {
  51.   {
    ) l$ {3 ?3 R  P/ G& W" h! M
  52.     /* USER CODE END WHILE */- d+ O6 z9 I+ q( c" p0 f

  53. - Z: O0 A2 s6 ]1 q6 F. N. H% M( F
  54.     /* USER CODE BEGIN 3 */
    $ e5 J4 W1 X4 f; G
  55.   }5 @7 }! O$ `2 }3 _5 A' a
  56.   /* USER CODE END 3 */% O  V$ P! L, z- ]9 C4 Z( G
  57. }- f6 f! p) s) T
  58. 8 }* N+ w& H( g% d3 s* e
  59. 1 G7 A3 g3 }3 |, G- l: L1 g
  60. /* USER CODE BEGIN 4 */& i6 b/ ?' N. |
  61. static void AppTaskCreate(void)* r. [! D1 b; R: B6 W5 H
  62. {+ G, S, M, z0 F% e; G
  63.         BaseType_t xReturn = pdFALSE;
    3 D1 ]% [9 x9 `0 ]8 i
  64.         
    ) o; y* J! [! j: u7 {$ x6 Z
  65.         Timer1_Handle = xTimerCreate( (const char *) "TIMER1",(TickType_t)1000,. {, X. N5 q0 |( t* Y
  66.                           pdTRUE, (void*) 1,(TimerCallbackFunction_t)TimerCallback);
    . ~- O7 F& Y3 H% F- M& R
  67.         
    ) m' f9 J  |$ X% T8 }
  68.         if( Timer1_Handle !=NULL)# r* x) g( F+ H  U" J) ?* V
  69.                 f_printf("Timer1 Create PASS.\r\n");
      p* F" b* X. T: r/ i4 g
  70.         
    " d8 F8 y  a. U/ H4 F
  71.         xReturn = xTimerStart(Timer1_Handle,0);0 Z# U- i! {) m% |
  72.         
    5 h! r' \5 {3 o8 Z  l  A
  73.         if(xReturn != pdFALSE)7 U. }2 ?1 y: ]8 |) i% E
  74.         {
    * H6 g# x: n4 G" `8 D1 f; T
  75.                 f_printf("Timer1 START.\r\n");
    % s/ g$ s5 `4 f/ \3 M
  76.                 vTaskDelete(AppTask_Handle);
    ; @6 P9 _, R. {: k, S
  77.         }
    1 I5 @5 w/ G' Y$ t  @
  78.         5 n& o: k+ L: `$ n( S. p
  79. }3 i/ ]$ B2 o7 Q
  80. static void TimerCallback(void)  O- h. t; h/ F. A4 q* \& S
  81. {
    * _+ ^+ w& D1 I) |- K
  82.         HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);7 L3 Y$ t/ _' P) g( h6 z
  83. ; e. m( a* U/ s1 E
  84. }7 w$ _0 r3 r- C: H3 z
  85. /* USER CODE END 4 */
复制代码
4 p) Q- X/ d' r& \$ d1 G1 ~
. m( H! }  p: X9 [% q
: ?3 G! m7 _$ `' b9 D
收藏 评论0 发布时间:2021-11-9 17:00

举报

0个回答

所属标签

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