在使用高级定时器timer0的时候,初始化就死机,问题就在使能中断这里,同样的代码,给timer2和timer16使用,都没有问题,但是timer0就是不行,不知道有没有遇到过,下面是我初始化的代码。
功能:初始化定时器,让它计数,记到设定值的时候就进中断。
void b_timer_config(uint16_t __pres, uint16_t __period, uint16_t __pulse)
{
timer_parameter_struct timer_initpara;
rcu_periph_clock_enable(RCU_TIMER0);
timer_deinit(TIMER0);
timer_struct_para_init(&timer_initpara);
timer_initpara.prescaler = __pres;
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection = TIMER_COUNTER_UP;
timer_initpara.period = __period; // 10KHz
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
timer_initpara.repetitioncounter = 0;
timer_init(TIMER0, &timer_initpara);
timer_channel_output_mode_config(TIMER0, TIMER_CH_3, TIMER_OC_MODE_TIMING);
timer_channel_output_pulse_value_config(TIMER0, TIMER_CH_3, __pulse);
nvic_irq_enable(TIMER0_Channel_IRQn, 1);
timer_interrupt_enable(TIMER0, TIMER_INT_CH3);
timer_auto_reload_shadow_enable(TIMER0);
timer_enable(TIMER0);
}
void TIMER0_IRQHandler(void)
{
static uint8_t status = 0;
if (SET == timer_interrupt_flag_get(TIMER0, TIMER_INT_FLAG_CH3))
{
status++;
switch (status % 3){
case 0:
printf("a\n");
timer_channel_output_pulse_value_config(TIMER0, TIMER_CH_3, tim[B].idle);
timer_channel_output_pulse_value_config(TIMER15, TIMER_CH_0, 0);
break;
case 1:
printf("b\n");
timer_channel_output_pulse_value_config(TIMER0, TIMER_CH_3, tim[B].t_off);
timer_channel_output_pulse_value_config(TIMER15, TIMER_CH_0, 0);
break;
case 2:
printf("c\n");
timer_channel_output_pulse_value_config(TIMER0, TIMER_CH_3, tim[B].t_on);
timer_channel_output_pulse_value_config(TIMER15, TIMER_CH_0, pwm_ch[B].pulse);
break;
default:
break;
}
timer_interrupt_flag_clear(TIMER0, TIMER_INT_FLAG_CH3);
}
}
看了半天,这个配置给timer2和timer16都没有问题。