STM32片上资源:TIM功能实现之定时中断

1.定时中断基本结构

1.1 定时中断流程:

(1)先时钟使能。

(2)内外时钟源选择。

(3)配置时基单元。

(4)定时器中断配置。

(5)配置NVIC。

(5)使能定时器外设。

1.2 定时中断内部解析

预分频器之前,连接的是基准计数时钟的输入,由于基本定时器只能选择内部时钟,所以可以看作内部时钟(CK_INT)直接连接的预分频器,来着RCC的TIMxclk一般是72MHZ;定时器实际分频系数 = 预分频器数值 + 1,预分频器为16位,所以最大为65535,因此最大分配系数为65536。计数器是对分频后的时钟进行计数,每来个上升沿,计数值+1,计数器是16位的,因此最大计数值的范围是0~65535,当计数器的值等于自动重装的值时,产生了一次中断信号,并计数器的值清零,CPU响应更新中断,也会产生一个更新事件。

2.定时器中断计算

(1)计数器计数频率:CK_CNT = CK_PSC / (PSC+1)

(2)计数器溢出频率:CK_CNT_OUT = CK_CNT / (ARR+1)

                                                               = CK_PSC / (PSC+1) / (ARR+1)

        注:CK_PSC = 72MHZ(CK_PSC的定时器时钟TIMxclk,经过APB1预分频器后分频提供)

                PSC:预分频值。

                ARR:自动重装值。

3.定时中断流程相关函数(利用内部时钟)

3.1.开启定时器时钟(TIM2为例)

RCC_APB1PerphClockCmd(TIM2,ENABLE);

3.2.定时器选择内部时钟源

void TIM_InternalClockConfig(TIM_TypeDef * TIMx);

3.3.配置时基单元

void TIM_TimeBaseInit(TIM_TypeDef * TIMx,TIM_TimeBaseInitStructure)

3.4.配置输出中断,允许更新中断输出到NVIC

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

3.5.配置NVIC

(1)进行优先级分配

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

(2)初始化NVIC

void NVIC_Init(NVIC_InitTypeDef *NVIC_InitStruct);

3.6.运行控制

void TIM_Cmd(TIM_TypeDef * TIMx,FunctionalState NewState);

3.7.读取,清除标志位函数

FlagStatus TIM_GetFlagStatus(TIM_TypeDef * TIMx,uint16_t TIM_FLAG);

void TIM_ClearFlag(TIM_TypeDef * TIMx,uint16_t TIM_FLAG);

ITStatus TIM_GetFlagStatus(TIM_TypeDef * TIMx,uint16_t TIM_IT);

void TIM_ClearITPendingBit=(TIM_TypeDef * TIMx,uint16_t TIM_IT);

3.8.定时中断的中断函数模板

void TIMx_IRQHandler(void)

{

        if(FlagStatus TIM_GetFlagStatus(TIMx,TIM_IT_Updata == SET))

        {

                ..........

                TIM_ClearITPendingBit=(TIMx,TIM_IT_Updata);

        }

}

4.定时中断功能

1.定时执行任务。

2.精确定时。

3.节约系统资源。

4.实现复杂功能。

5.提高系统性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值