STM32学习(定时器中断)

1.通用定时器工作过程:

 2.时钟选择

计数器时钟可以由下列时钟源提供:

(1)内部时钟(CK_INT);

(2)外部时钟模式1:外部输入脚(TIx);

(3)外部时钟模式2:外部触发输入(ETR)(仅适用TIM2,3,4)

(4)内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器。

内部时钟选择:

 计数器模式:通用计数器可以向上计数、向下计数、向上向下双向计数模式。

定时器配置步骤如下:

(1)TIM3时钟使能;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

(2)初始化定时器参数,设置自动重装值,分频系数,计数方式等;

void TIM_TimeBaseInit(TIM_TypeDef *TIMx,TIM_TimeBaseInitTypeDef *TIM_TimeBaseInitStruct);

(3)设置TIM3_DIER允许更新中断;

void TIM_ITConfig(TIM_TypeDef *TIMx,uint16_t TIM_IT,FunctionalState NewState);

(4)中断优先级设置;

void NVIC_Init(NVIC_InitTypeDef *NVIC_InitStruct);

(5)允许TIM3工作,也就是使能TIM3;

void TIM_Cmd(TIM_TypeDef *TIMx,FunctionalState NewState);

(6)编写中断服务函数;

溢出时间计算:        {\color{Red} {\color{Red} }Tout=\left ( \left ( arr+1 \right ) \ast ( psc+1 \right ))\div Tclk}

Tclk:TIM3的输入时钟频率(单位为Mhz);

Tout:TIM3的溢出时间(单位为us);

time.c

//通用定时器3中断初始化
//arr:自动重装值;psc:时钟预分频系数
void TIM3_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef TIM_TimeInitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //使能TIM3时钟;
    TIM_TimeInitStructure.TIM_Period=arr;               //自动重装载值;
    TIM_TimeInitStructure.TIM_Prescaler=psc;            //定时器分频;
    TIM_TimeInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式;
    TIM_TimeInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
    TIM_TimeBaseInit(TIM3,&TIM_TimeInitStructure);      //初始化定时器3;

    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);            //允许定时器3更新;
 

    NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;       //定时器3中断;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;//抢占优先级1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //响应优先级3;
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&NVIC_InitStructure);                     //初始化NVIC;
    
    TIM_Cmd(TIM3,ENABLE);                               //使能定时器3;
}

编写中断服务函数

TIMx_IRQHandler(); //中断函数要看中断标志位,和手动清楚中断标志位;
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx,uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx,uint16_t TIM_IT);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值