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

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

[复制链接]
STMCU小助手 发布时间:2021-11-9 17:00
1.创建好带有printf-stdarg.c的FreeRTOS的工程
3 L' {: `9 ^1 E4 o+ G# g% w- B' j9 v: U. x
2.修改main.c文件. T3 e3 T! U6 w1 |; v, o

1 a; h& u, ^+ u; R% U% b
  1. /* USER CODE BEGIN Includes */
    - M* f! Q% y  m( A% i, q, {7 m0 Y# H
  2. 0 o* @: O* T) ]# y% o2 D, L* K/ {* m
  3. #include "FreeRTOS.h"8 `6 T$ h* x7 z
  4. #include "task.h"& D+ \; Z+ \/ C# J& e
  5. #include "timers.h"4 E" o3 O5 Z# T1 y
  6. #include <stdio.h>8 F+ a: w! V  Y8 E, X$ {
  7. #include <string.h>
    - ^3 h8 o& z; P' W/ F
  8. " ~  `* m5 @( e# U
  9. /* USER CODE END Includes */
    0 d* l( X& O* L! \8 n3 W
  10. /* USER CODE BEGIN PV */
    : w# h% ?" j& }) n3 \
  11. static TaskHandle_t AppTask_Handle = NULL;
    ' h6 v% |6 e# I- l5 e0 L+ _/ T
  12. static TimerHandle_t  Timer1_Handle = NULL;
    & w  W4 m& d2 u, A( B, c
  13. ' \  H8 h% D- V+ u# i
  14. extern int f_printf(const char *format, ...);/ m# Z2 \- |, S+ h% R

  15. : J; J5 y) |4 m( }# T. ~1 j
  16. /* USER CODE END PV */3 y0 b) |# [  ]  y& ]) s. Z. s
  17. - p* U5 Z% I) P% B3 J/ r: V
  18. /* Private function prototypes -----------------------------------------------*/) J; D4 n  R5 D
  19. void SystemClock_Config(void);  L6 v% O) S1 X4 B/ w
  20. /* USER CODE BEGIN PFP */- @8 O/ i1 k; y2 n- p+ d
  21. & p0 M/ u1 i; r/ T, g
  22. static void AppTaskCreate(void);) W1 N, T# e1 h, s: b, s  p
  23. static void TimerCallback(void);9 d& E; M2 T+ O$ y3 q- l" }9 O  J
  24. + S( Y. n( K$ T7 R" J
  25. /* USER CODE END PFP */
    1 j6 Y. P" `0 n5 [

  26. $ j2 {7 V0 b) K- P$ g2 u
  27. int main(void)
    3 `" F8 u9 O. ]! L( u
  28. {7 ^& y+ z' a7 q1 a
  29.   /*/ h5 w% Y* l& \: \) I
  30.    *. _+ e6 ]/ B7 V) x' q% ?
  31.    */
    & R* Y9 E- J' Q* A: x" C% C- L

  32. ) Y! Z1 v, c% J& p6 ^& Z
  33.   /* USER CODE BEGIN WHILE */
    , t2 f  j" F, H6 A' @4 x; z) X
  34.   UBaseType_t xReturn = pdFALSE;
    , M) ]5 q; n( Q# s% K
  35. 2 z2 \. k" F1 O. y
  36.         xReturn = xTaskCreate((TaskFunction_t)AppTaskCreate,
    0 }- K+ k, L4 Q; q1 S; Z
  37.                         (const char *)  "APPTASKCREATE",
    1 W+ O- N5 [  V2 k$ x% d
  38.                         (uint16_t)      128,  X7 p, _: c* x6 t+ F# H1 M+ ~( x
  39.                         (void *)        NULL,
    ; j! n$ J! ?4 x* Y  m
  40.                         (UBaseType_t)   1,6 G3 S+ E$ Y+ f& s' C, w
  41.                         (TaskHandle_t *)&AppTask_Handle);" }+ Y+ x/ j7 c0 h8 X* l
  42. ) s* f% `, h$ N. `- G0 C& ^$ \* D- h
  43.   if(xReturn != NULL)9 z  s; B' T4 D
  44.         {6 ^4 F' [6 C! ~' w; P4 v0 C
  45.                 f_printf("Task Create PASS.\r\n");) y! K' Z7 J& i* _6 k: R. c2 A' n! x
  46.                 vTaskStartScheduler();0 C2 J" i* {2 K5 \
  47.         }) N5 w5 [( ?& A
  48.         
    ( e! [0 R8 c& X% D! p
  49.         9 U& {% G2 ]3 b3 E, {
  50.   while (1)% m* h' C! d# p9 {2 U$ [
  51.   {( ?8 V: z; l9 w& B9 \: W$ L" X4 ~8 ^
  52.     /* USER CODE END WHILE */  S8 x# r$ ?2 j. b
  53. 7 S) E. _- _; l, R( K; `
  54.     /* USER CODE BEGIN 3 */0 v5 J% Z0 o. Q1 @! {4 h3 N
  55.   }
    ' C+ C, @% I5 E: |  @0 h8 [$ Z
  56.   /* USER CODE END 3 */2 f: `2 s9 ]& v. ^1 D
  57. }
      I4 }1 Z( q! F, ?3 r" R7 o
  58. # u* x, D8 c+ P) f0 q# U7 c8 ?) z
  59. / x3 b$ G; K: ?& s: G) M
  60. /* USER CODE BEGIN 4 */4 m% E) |# ~* b2 n# q/ W  C
  61. static void AppTaskCreate(void)2 h0 H+ g9 Y4 w; P! q
  62. {
    8 }8 l: v; W8 w
  63.         BaseType_t xReturn = pdFALSE;
    . U! }9 G- _, Q5 Q2 t; G
  64.         
    3 `) _4 d9 L/ P" S3 J+ g8 @
  65.         Timer1_Handle = xTimerCreate( (const char *) "TIMER1",(TickType_t)1000,. c+ d1 }6 e: F" z6 p( r
  66.                           pdTRUE, (void*) 1,(TimerCallbackFunction_t)TimerCallback);% }+ e5 ]* f% s( q
  67.         3 p/ o$ k" U* R3 U' E0 d5 {2 }
  68.         if( Timer1_Handle !=NULL)
    ) U) f) Q" m3 _0 N7 [
  69.                 f_printf("Timer1 Create PASS.\r\n");8 ]( {, b0 e4 i  j  c
  70.         
    , ~2 s. w' t* C, I$ l3 {
  71.         xReturn = xTimerStart(Timer1_Handle,0);  [( O" u) ]* h6 z5 w1 ]. {
  72.         
    . e& F# N+ F+ U9 B9 D% O
  73.         if(xReturn != pdFALSE)
    ! r& y3 h7 b) Q4 R7 n  v
  74.         {  _$ {+ }* _( H
  75.                 f_printf("Timer1 START.\r\n");
    + w1 |! t) a$ [0 K
  76.                 vTaskDelete(AppTask_Handle);
    1 G0 J, f$ Q2 N9 j
  77.         }
    7 P9 j6 J- F3 S) B
  78.         ' @/ O3 a+ g7 `& a$ k9 F$ b/ f
  79. }/ ?3 }% |6 _8 S
  80. static void TimerCallback(void). Z5 B2 G6 Y3 U" ?
  81. {
    9 Y2 r/ r, A2 \3 x( U/ {
  82.         HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);, o% `4 {- c( s$ D: Y! g- q/ s0 N. C

  83. - D7 Q# K7 J' _+ |3 [# R
  84. }
    2 H! H) K$ J' \& C8 J, t
  85. /* USER CODE END 4 */
复制代码
: K+ }& o, |/ D
& w+ H, k+ }) v/ y. K9 [3 G

6 n- G% ?6 h# w- F0 b$ E
收藏 评论0 发布时间:2021-11-9 17:00

举报

0个回答

所属标签

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