| 
 
| timer0挂在APB1上,GD固件库时钟初始化,默认会4分频(200M主频,会50M) 
 volatile uint8_t TIM1_FLAG = 0;
 // 定时器1初始化函数
 void timer1_init(void)
 {
 // 使能定时器1时钟
 rcu_periph_clock_enable(RCU_TIMER1);
 
 //将定时器的频率倍频到200M
 rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);
 
 // 定时器去初始化
 timer_deinit(TIMER1);
 
 /* 定时器配置 */
 timer_parameter_struct timer_initpara = {0};
 timer_initpara.prescaler         = 99;      // 预分频值
 //timer_initpara.prescaler         = 49;      // 预分频值
 timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
 timer_initpara.counterdirection  = TIMER_COUNTER_UP;
 timer_initpara.period            = 999;     // 自动重载值
 //timer_initpara.period            = 499;     // 自动重载值
 timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
 //    timer_initpara.repetitioncounter = 0;
 timer_init(TIMER1, &timer_initpara);
 
 /* 计算说明:
 APB1时钟 = 50MHz,倍频到200M
 预分频后时钟 = 200MHz / (99+1) = 2MHz
 计数周期 = (999+1) / 2MHz = 500us
 */
 timer_auto_reload_shadow_enable(TIMER1);
 // 使能定时器更新中断
 timer_interrupt_enable(TIMER1, TIMER_INT_UP);
 
 // 使能定时器
 timer_enable(TIMER1);
 
 // 配置NVIC
 nvic_irq_enable(TIMER1_IRQn, 1, 0);
 }
 
 // 定时器1中断处理函数
 void TIMER1_IRQHandler(void)
 {
 if(timer_interrupt_flag_get(TIMER1, TIMER_INT_FLAG_UP) != RESET) {
 // 清除中断标志
 timer_interrupt_flag_clear(TIMER1, TIMER_INT_FLAG_UP);
 
 // 中断处理代码
 TIM1_FLAG = 1;
 
 }
 }
 ————————————————
 版权声明:本文为CSDN博主「qvictory」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
 原文链接:https://blog.csdn.net/qvictory/article/details/150954061
 
 
 | 
 |