通用定时器3中断控制用于正点原子精英版DS1每隔500ms亮灭闪烁。 (此处寄存器只介绍其功能,请参考寄存器的具体结构《STM32中文参考手册)
本实验主要涉及三个寄存器、,还涉及
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);
}
}