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

【经验分享】STM32G0 TIM中断使用

[复制链接]
STMCU小助手 发布时间:2021-11-8 14:30
时钟配置3 o, {) J6 ]- P7 ^5 K# }+ `
20210710145725120.png

3 q% C- a* e: ?) K) q* C* i# Z$ p7 k7 X1 }& Y" D( n
TIM配置' A5 U& ^% ]. F" s. F
2021071014574973.png
; c! D- a! W! A

6 p  n; Z* A7 |! h2 V. s3s一次中断1 z$ J$ P  G0 p

9 w' L  E$ z( O7 N1 h4 k中断配置
% v! t/ [2 l0 I
20210710145824733.png

- O9 F$ s$ U& s& }% h
6 ~: o$ u8 O$ E( u3 K' ~开启
& t! ]4 S- E0 j7 E$ f. D8 K$ W      
  1. HAL_TIM_Base_Start_IT(&htim1);
复制代码
  1. 任务中的临界区
    $ x- Y, j& d& l/ h! J
  2. static void vTaskLED(void *pvParameters)+ z  V) C3 g  W  Y
  3. {6 y6 e' {3 j# _( U
  4.     while(1)1 L$ D1 ^. Y; f3 S* v: j* ^
  5.     {                        * ~! U6 S" J9 L% z7 q" K
  6.                         uint8_t data[]="LED";5 K2 S$ ]  ]! ~- M
  7.                         taskENTER_CRITICAL();   /* 进入临界区 */
    - u5 E' S$ Y& B
  8.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);
      r- y2 o8 Q" U7 ]  y
  9.                         taskEXIT_CRITICAL();          /* 退出临界区 */        
    7 N6 Q/ ^" k% t' g) k* s/ r- h
  10.                         HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);! w. ~0 ~# @- x& V
  11.                                         vTaskDelay(500);
    9 s. W  b9 _; u! q) S
  12.     }
    3 E0 J. w2 e' f- S3 s
  13. }
复制代码
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)  \$ x# _) S* x' t
  2. {
    5 O0 Q% \3 b! a% D  h5 x
  3.         if(htim->Instance==TIM1)
    , U9 s# G9 @4 [) I
  4.         {; N6 F1 U0 e, q- o7 w1 J
  5.                         uint8_t data[]="TIM1 Interrupt";
    - M0 \/ \6 `& _4 F# K  H
  6. ; X* T( M8 q; V1 Q$ h
  7.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);6 J. R, F- c; {$ ^
  8. * H- _& h. b, x# t: i) w
  9.         }
复制代码
. ]) W8 f7 Q0 l
带有FreeRTOS8 P1 h7 ?# m: D: x3 P0 ?
中断的临界区3 Z  r' ^* Q7 W; \

/ J# ^! E0 T9 w4 |; p
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    9 a: S3 C6 {1 k" ^& e
  2. {
    8 B1 u( ~" `7 L7 T# F0 t
  3. ' d. K, r; Y0 @1 L$ B3 R3 u. E
  4.         ; ~" h5 C% ~, Q5 K' |
  5.         BaseType_t xYieldRequired;
    % l; a3 X' [  \. w; @* R- J
  6.         UBaseType_t uxSavedInterruptStatus;& r5 |, y! h7 A' {* ?
  7.         uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); /* 进入临界区*/0 U* v. i; |" ?3 e4 m) d8 G
  8.         {% [0 m4 W3 a" m/ ?* {" q( o0 b
  9.                 /* 用户可以在这里添加临界段代码,我们这里暂时未用到*/, X! ^3 c8 g/ p
  10.                 if(htim->Instance==TIM1)
    : K- [/ H1 w: W6 w) O- o# w, [
  11.                 {1 z9 E: J; J( d( X# F) p2 ]
  12.                         uint8_t data[]="TIM1 Interrupt";
    6 F( P! R5 H" c4 h
  13.                 ( z+ `+ M# }! V9 n: w! _/ v
  14.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);. i7 T$ h) g6 D+ x
  15.         * k5 W* _$ h4 y, G4 }; }9 X
  16.                 }8 q& X% h* f1 T- ~' ~+ }" C
  17.         
    ; Q" [( a/ k: s: x  q2 G+ r
  18.         }
    & `( p1 ~$ ]6 q
  19.         portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); /* 退出临界区*/6 T0 l6 I/ F( ~) b; ]
  20.         /** 恢复挂起任务*/
    * N  n* D- T$ p/ [7 l
  21.         xYieldRequired = xTaskResumeFromISR(xHandleTaskLED);
      L7 G2 I4 ?2 c, ]) m
  22.         /* 退出中断后是否需要执行任务切换*/
    ! g$ }* }* a4 r; y) ?
  23.         if( xYieldRequired == pdTRUE )8 ~; N; B2 R1 \' m
  24.         {, ~% t; g" u& v' t
  25.                 portYIELD_FROM_ISR(xYieldRequired);
    / @) w# ~4 n# o
  26.         }* w! j, i8 ?' M2 E' b
  27. }% \6 g( |" [. J: V/ n' ?

  28. 6 i2 u% S5 [( U; A& c' P
复制代码
, |) h# W) q! U: N  w
赞 收藏 评论0 发布时间:2021-11-8 14:30

举报

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