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
|
|