资讯详情

【STM32F103实验(六)】定时器中断

通用定时器3中断控制用于正点原子精英版DS1每隔500ms亮灭闪烁。 (此处寄存器只介绍其功能,请参考寄存器的具体结构《STM32中文参考手册)

本实验主要涉及三个寄存器,还涉及

。寄存器的最低位置是计数器的使能位。只有让位置1开始定时器计数;寄存器的第4、5、6位是计数方法的选择位。在本实验中,可以选择向上计数模式。

。该寄存器的第0位是更新中断允许位,需要将其置于1以中断更新。

。寄存器将时钟分频,然后提供给计数器作为计数器的时钟。定时器有四个时钟来源,即: (1)内部时钟(CN_INT)。 (2)外部时钟模式1:外部输入脚(TIx)。 (3)外部时钟模式2:外部触发输入(ETR)。 (4)内部触发输入(ITRx):使用A定时器作为B定时器的预分频器(A为B提供时钟)。

。这两个寄存器在物理上实际对应。一是程序员直接操作,二是程序员看不见。这个看不见的寄存器在《STM中文参考手册称为影子寄存器。其实真正起作用的是影子寄存器。根据TIMx_CR寄存器中的APRE位的设置:APRE = 0时,预分频寄存器的内容可随时传输到影子寄存器,此时两者相连;当APRE = 1点,每次更新事件(UEV)将预装在寄存器中的内容传送到影子寄存器。

使用库函数编写。定时器的初始化步骤如下: (1)TIM3时钟使能。 (2)初始化定时器,配置参数。 (3)设置TIM3_DIER允许更新中断。 (4)TIM中断优先级设置。 (5)使能TIM3。 (6)编写中断服务函数。

void Timer3_init(u16 arr,u16 psc)   //arr-自动重装值,psc-时钟预分频率 { 
                 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitSturct;     NVIC_InitTypeDef NVIC_InitStuct;          /*****************TIM3时钟使能**************/     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //TIM3挂接在APB1总线上          /*****************定时器TIM3参数初始化*************/     TIM_TimeBaseInitSturct.TIM_ClockDivision = TIM_CKD_DIV1;    //设置时钟分割     TIM_TimeBaseInitSturct.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数     TIM_TimeBaseInitSturct.TIM_Period = arr;    ///自动重新装载值     TIM_TimeBaseInitSturct.TIM_Prescaler = psc; //时钟预分频率     TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitSturct);          /*****************开启定时器TIM3更新中断*************/     TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);    //允许更新中断          /*****************中断优先级NVIC设置***************/     NVIC_InitStuct.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断     NVIC_InitStuct.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能     NVIC_InitStuct
      
       .NVIC_IRQChannelPreemptionPriority 
       = 
       0
       ; 
       //从优先级3级 NVIC_InitStuct
       .NVIC_IRQChannelSubPriority 
       = 
       3
       ; 
       //抢占优先级0级 
       NVIC_Init
       (
       &NVIC_InitStuct
       )
       ; 
       /*****************使能TIM3**************/ 
       TIM_Cmd
       (TIM3
       ,ENABLE
       )
       ; 
       //使能TIM3 
       } 
       void 
       TIM3_IRQHandler
       (
       void
       ) 
       { 
         
       if
       (
       TIM_GetITStatus
       (TIM3
       ,TIM_IT_Update
       ) 
       == SET
       ) 
       //检查TIM3更新中断是否发生 
       { 
         
       TIM_ClearITPendingBit
       (TIM3
       ,TIM_IT_Update
       )
       ; 
       //清除TIM3更新中断标志 LED1 
       = 
       !LED1
       ; 
       //LED1状态翻转 
       } 
       } 
      

主函数

int main(void)
{ 
       
    delay_init();   //延时初始化
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2
    LED_init(); //LED初始化
    Timer3_init(4999,7199); //10KHz计数频率,500ms
    while(1)
    { 
       
        LED0 = !LED0;
        delay_ms(1000);
    }
}

标签: cr1mt交流功率固态继电器cr1u系列特殊型固态继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台