STM32 定时器中断周期计算

  • 编译工具:MDK5
  • 举例芯片:STM32F103RC
  • 问题疑点:计算中断发生周期是使用72MHz还是36MHz

1.先看看计算公式:

定时中断发生的时间T:
T = (arr+1)*(psc+1)/72M
当设置arr=  999,psc  = 71999,T=1s

参考定时器3的配置函数,如下:

void time3_Init(u16	arr,u16	psc)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;	 //声明一个结构体变量
    NVIC_InitTypeDef NVIC_InitStructure;

    /* 开启定时器3时钟 */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

    TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除TIMx的中断待处理位:TIM 中断源
    TIM_TimeBaseInitStructure.TIM_Period = arr;//设置自动重装载寄存器周期的值
    TIM_TimeBaseInitStructure.TIM_Prescaler = psc;//设置用来作为TIMx时钟频率预分频值
    TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分频系数
    TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上计数模式
    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
    TIM_Cmd(TIM3,ENABLE); //使能TIMx外设
    /* 设置中断参数,并打开中断 */
    TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE );	//使能或者失能指定的TIM中断

    /* 设置NVIC参数中断 */
    NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //打开TIM3_IRQn的全局中断
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;	//抢占优先级为0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;  //响应优先级为1
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;	//使能
    NVIC_Init(&NVIC_InitStructure);
}

可能有朋友存在疑问,为什么计算的时候使用的是72M,TIM3定时器挂载在APB1上,而APB1的时钟是系统时钟HCLK的二分频,系统时钟是72MHz,也就是说APB1的时钟就是36MHz,先看看下图吧
在这里插入图片描述

虽然二分频之后APB1外设时钟是36MHz,但是定时器的时钟在二分频之后再次进行二倍频,同时,我们在配置TIM3时,设置的TIM分频系数为1TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; 所以我们在使用上面公式的时候就得使用72MHz进行计算了

另附上定时中断函数:

void TIM3_IRQHandler(void)			//TIM3 1s
{
    if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TM3更新中断与否
    {
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清楚中断标志
        
		..................用户书写需要执行的相关代码区域.........................

    }
}

本人菜鸟一枚,以上是个人见解,如有不足望留言!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值