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

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

[复制链接]
STMCU小助手 发布时间:2021-11-8 14:30
时钟配置& F+ @2 D& v9 C5 I" M' f
20210710145725120.png

) K; T) p6 \+ S. z6 f0 u- {# U7 @$ ^8 z6 h. U& o
TIM配置
8 q8 B# _% M4 [4 \. R$ k
2021071014574973.png

. b4 _+ s' ]) n2 E: y
) p9 `6 y4 s1 U) H* d3s一次中断
. V1 M4 v. c( C
1 F2 R0 t, a9 u7 K# D中断配置: F6 _, A$ |+ \% |7 ~/ [& d9 o
20210710145824733.png

) j) D9 _2 }+ w) x: l8 m% A
' G3 V0 B$ h4 @" I( [. @) o# V& d开启
! k  K5 d# l! D- q      
  1. HAL_TIM_Base_Start_IT(&htim1);
复制代码
  1. 任务中的临界区8 K; c& Q. T. E6 {# |2 W# W
  2. static void vTaskLED(void *pvParameters)9 Y- p3 N7 N% h& v4 D
  3. {$ Z; x. |/ q$ a0 Y
  4.     while(1)
    ' g9 Q1 X0 ?" s; C4 [2 w
  5.     {                        # g% g5 ^; W: h* J2 T3 E
  6.                         uint8_t data[]="LED";
    ( n/ J1 c8 e5 d, o) }% N+ W
  7.                         taskENTER_CRITICAL();   /* 进入临界区 */
    2 v/ L- I! R6 F3 R
  8.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);2 N% K1 p6 n2 \* V
  9.                         taskEXIT_CRITICAL();          /* 退出临界区 */        
    & k5 u" [+ T$ ^  n# N( J
  10.                         HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
    " i7 [( @7 m5 q( A3 A. i
  11.                                         vTaskDelay(500);
    3 ?- j0 e/ }$ r9 A7 [
  12.     }
    ) ~. }' [7 t1 m6 ~- u& @5 Q
  13. }
复制代码
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)+ K* T  f$ H& `; I: p' I- ]
  2. {
    $ l3 v# J" B) [
  3.         if(htim->Instance==TIM1)
    ; C! }0 J- q" _
  4.         {" W' E/ b3 M2 E$ p: M
  5.                         uint8_t data[]="TIM1 Interrupt";* |) E2 h! U6 _$ C5 m# {! p) W

  6. " J0 t9 ?6 t& w4 K
  7.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);; B% ]# ^4 y$ X# T/ s1 A& }

  8. 7 ?5 H# |( y% i5 ^% L8 t
  9.         }
复制代码
9 A6 V% ~/ g, l' ?6 l/ ~
带有FreeRTOS8 [$ _- o' s- Z7 O; ~: j: e
中断的临界区* `& g: O" v; S- @$ L
4 u$ L; g9 U3 {% e; Z8 v
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    9 t+ d2 H5 _& R! n6 d
  2. {: `8 O. S% K# o  L  B5 Z

  3. . o: F6 a  h! |  V! G* t
  4.         
    7 S( |& }2 [* D, J
  5.         BaseType_t xYieldRequired;
    $ |, n8 Z7 v1 |" c7 J7 c/ ~
  6.         UBaseType_t uxSavedInterruptStatus;  `" K$ @5 g( o" P8 b
  7.         uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); /* 进入临界区*/: I4 |! O! ~1 ~. W2 r' X
  8.         {
    5 @# O' a% k0 r( p0 A
  9.                 /* 用户可以在这里添加临界段代码,我们这里暂时未用到*/
    5 O7 X/ x  r  @
  10.                 if(htim->Instance==TIM1)2 E/ a: W! B) M) ~/ x% f) ]; C
  11.                 {
    $ M' }6 k6 ?; C" X4 G
  12.                         uint8_t data[]="TIM1 Interrupt";
    9 F; O: G9 K) X8 ^3 b4 m# z; X; y
  13.                 2 c# j% P( Z9 k6 t4 R4 A5 T7 P
  14.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);
    ) {: e; U2 r" I3 G& Q
  15.         1 F- x' h2 z) H) @
  16.                 }
    2 M5 b; _( N3 B/ o1 J
  17.         ; C1 V5 p9 n" X5 x' b, a9 t& H
  18.         }
    / K. |; x" P" _7 n5 t6 H# a4 Q& e
  19.         portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); /* 退出临界区*/% r# h( ^3 R3 M
  20.         /** 恢复挂起任务*/+ Z1 ~- N' p% Z- D. C( ]
  21.         xYieldRequired = xTaskResumeFromISR(xHandleTaskLED);- S7 W7 v( [' P
  22.         /* 退出中断后是否需要执行任务切换*/" {4 W  s# g" I2 s% @6 x
  23.         if( xYieldRequired == pdTRUE )
    1 o+ v" \- T* a- L
  24.         {
    7 t) y+ @' O  |3 K
  25.                 portYIELD_FROM_ISR(xYieldRequired);0 j) U; {! }8 o' e. S  l
  26.         }" s% E5 K9 r" U/ D0 o
  27. }
    * j! Z2 G. Y/ P" `8 P

  28. % q9 W, g1 d; v: v6 ]$ f# Q
复制代码
* _% C' |0 V) F, b! y
收藏 评论0 发布时间:2021-11-8 14:30

举报

0个回答

所属标签

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