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

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

[复制链接]
STMCU小助手 发布时间:2021-11-8 14:30
时钟配置
/ M0 ~0 V, U, X( E# T1 U2 ]
20210710145725120.png

$ X2 L  q$ R% n# L8 ]
+ v/ O4 f8 b9 H/ `) G! OTIM配置
, ^$ Q1 [. Z4 j
2021071014574973.png
6 p2 P7 e1 P& `( T
8 T; u7 w' k* ~* |0 I
3s一次中断
/ j! G3 k4 _' D# r5 ~+ x# k. ?" l: X
中断配置  d; D+ V2 M/ P9 Z% {1 l$ t
20210710145824733.png
4 l9 i2 ?3 o8 _

/ z  z- l1 U9 ]0 T# [- h开启
& W" k1 c; j% ?      
  1. HAL_TIM_Base_Start_IT(&htim1);
复制代码
  1. 任务中的临界区  ^  f5 |) K* S6 M
  2. static void vTaskLED(void *pvParameters)
    8 K' b' d( {  ^( j) @8 X
  3. {
    ! x, Q5 q! i1 w. z; B5 }! F
  4.     while(1). U4 W" t; o/ L$ l8 u. e# R
  5.     {                        
      G( b9 V; R! |4 D* M7 ]1 F( j" v
  6.                         uint8_t data[]="LED";
    : k) [6 w1 e5 m. _" m9 l
  7.                         taskENTER_CRITICAL();   /* 进入临界区 */
    ) M4 P& G# [/ U5 m+ W3 L
  8.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);
    + @! q& R. ^% O
  9.                         taskEXIT_CRITICAL();          /* 退出临界区 */        
    6 {  j. l/ b& `  K# _
  10.                         HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
    * S& z* p' w) x" d; R/ ~
  11.                                         vTaskDelay(500);6 M. C  z+ L  R4 n4 g2 b
  12.     }
    . k5 c' N! O- V0 r4 ^
  13. }
复制代码
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim), _/ ]3 ^5 S( h2 \4 S+ Q5 L
  2. {
    . m9 P" K( R' r% N
  3.         if(htim->Instance==TIM1)6 x/ @0 L1 G9 G: D$ {: ~1 W
  4.         {
    ! e' U, Q3 P& ]3 b! ~7 d4 M
  5.                         uint8_t data[]="TIM1 Interrupt";
    3 I7 l$ N9 m0 _4 b& ?( C6 m
  6. $ r5 _" L& W9 M7 C  g: ^) ?9 s
  7.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);
    , \$ g, f7 H& V' a) x

  8. ) M6 S' f& I7 X% b5 l  N
  9.         }
复制代码

( v& D  i, {& x7 ^带有FreeRTOS* E/ u. Z3 [7 H& Z  s
中断的临界区
( x, o) c1 ^, G! ?6 S1 P. B- x7 ]* f. a8 \# @0 Q
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)* r8 W6 A( y6 t/ l2 P4 c5 D; l
  2. {  S: ^. \2 ?( z( L7 |

  3. 7 l+ X% E2 Z) e7 D0 y0 d# M. j  j
  4.         
    # X" i% U" u0 t7 O! l) u7 `
  5.         BaseType_t xYieldRequired;" T6 l/ M; a6 n6 ~) S0 g2 w
  6.         UBaseType_t uxSavedInterruptStatus;
    6 X7 l5 Z: r: |! Z
  7.         uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR(); /* 进入临界区*/6 z  n( _! I1 k( v; ?* Q
  8.         {
    ) I! O4 n5 H  _: X! X
  9.                 /* 用户可以在这里添加临界段代码,我们这里暂时未用到*/% @$ E) w3 c7 O6 t% s3 A5 R
  10.                 if(htim->Instance==TIM1)
    $ O8 _! H( L  C& W
  11.                 {* `$ [4 X7 O; D! i
  12.                         uint8_t data[]="TIM1 Interrupt";6 ?9 @8 \4 m# I! T! }
  13.                
    6 q( l' l# M: Z  e; R& K
  14.                         HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);
    1 f: i* q# _# Y5 U, D
  15.         
    . s' @+ w. w5 {
  16.                 }) A6 M. G: m* W5 W" E/ C& [
  17.         
    1 R" x" w) k- C, _/ I( R- i
  18.         }/ b/ |0 r3 `* V9 K2 N- B
  19.         portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); /* 退出临界区*/
    * \$ k1 o) I& a' W3 ]8 {) i& R6 J
  20.         /** 恢复挂起任务*/0 C' K/ }4 o0 X& \
  21.         xYieldRequired = xTaskResumeFromISR(xHandleTaskLED);
    ! N9 t. k, |& v  V' s/ ?1 Z3 T
  22.         /* 退出中断后是否需要执行任务切换*/
    ; U9 x4 v' F) ?: a, [" {
  23.         if( xYieldRequired == pdTRUE )' r- X* A9 p: r" g0 o1 S
  24.         {  y' Z- t& C) p9 p
  25.                 portYIELD_FROM_ISR(xYieldRequired);
    $ v5 I3 G1 v& U1 W9 g# Y7 t
  26.         }
    4 k! o) ]' E/ l8 ]# y5 e
  27. }
    0 `3 E0 @& x' s* n) D! w
  28. " U) |" k. m! I7 p' w" `& g- T
复制代码

6 c. g# N7 Z, G' ?- r
收藏 评论0 发布时间:2021-11-8 14:30

举报

0个回答

所属标签

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