定时器

//通用定时器 3 中断初始化
//arr:自动重装值。 psc:时钟预分频数
//定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
//Ft=定时器工作频率,单位:Mhz
//这里使用的是定时器 3!

void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //①使能 TIM3 时钟
TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);// ②初始化定时器 TIM3
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //③允许定时器 3 更新中断
//进行NVIC中断配置
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

定时器 3 中断服务函数

void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
{
    /*处理的程序段*/
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 首先让我们来看一下关于控制定时器中断的文件timer.c中的源码: 前两行是头文件的声明,这里我们不去理会,我们今...
    Jane_123阅读 13,896评论 0 5
  • STM32F1 的通用定时器是一个通过可编程预分频器(PSC,16位,1~65535)驱动的 16 位自动装载计数...
    X_xxieRiemann阅读 5,279评论 0 4
  • TIMx简介 可编程预分频驱动 16位 自动装载计数器 用于输入:测试脉冲宽度输出:产生输出波形(输出比较和PWM...
    吴松乾阅读 5,480评论 0 2
  • 一、MCS-51单片机的定时器/计数器概念 单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的...
    Dorajimmy阅读 5,189评论 0 1
  • 全文 1605 字 | 建议阅读 3 分钟 前段时间,一句话又激活了很多人的焦虑——你的同龄人,正在抛弃你。 本来...
    三风mickjoust阅读 2,828评论 0 6