本人在调试STM8S103的程序时,timer4的中断一直进不去,其他都是好的,捉摸了大半天终于搞定,现总结如下,希望对大家能有帮助。我的程序时基于ST的固件库写的,库版本为4.0。定时器中断的配置分以下几步:
1、时基的设定,即分频系数和计数值。2、清timer4的事件更新标志。3、使能timer4中断4、使能全局中断。5、使能TIM4。具体代码如下:
void TIM4_Config(void)
{
/* Time base configuration */
TIM4_TimeBaseInit(TIM4_PRESCALER_128, 0xFF);
/* Clear TIM4 update flag */
TIM4_ClearFlag(TIM4_FLAG_UPDATE);
/* Enable update interrupt */
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
/* enable interrupts */
enableInterrupts();
/* Enable TIM4 */
TIM4_Cmd(ENABLE);
}
然后是在stm8_interrupt_vector.c中设置中断向量表,在开头声明中断函数extern @far @interrupt void TIM4_UPD_OVF_IRQHandler(void);中断向量表的irq23换成中断函数名 {0x82, (interrupt_handler_t)TIM4_UPD_OVF_IRQHandler}, /* irq23 */这就可以了
中断函数写在主函数的文件中,void main()
{
TIM4_Config();
while (1)
{
while_count++;
}
}
@far @interrupt void TIM4_UPD_OVF_IRQHandler (void)
{
int_count++;
TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
//return;
} |