项目中,之前定时器中断就用了个TIM2,但后来程序优化需要再加一个计数定时器TIM6,
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// 开启定时器时钟,即内部时钟CK_INT=72M
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
// 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断
TIM_TimeBaseStructure.TIM_Period=(1000-1); //GENERAL_TIM_Period (1000-1) 设置为5ms一次中断
// 时钟预分频数
TIM_TimeBaseStructure.TIM_Prescaler= 71;
// 时钟分频因子 ,没用到不用管
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
// 计数器计数模式,设置为向上计数
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
// 重复计数器的值,没用到不用管
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
// 初始化定时器
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);
// NVIC_TIM6_Configuration();
// 清除计数器中断标志位
TIM_ClearFlag(TIM6, TIM_FLAG_Update);
// 开启计数器中断
TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);
// 使能计数器
TIM_Cmd(TIM6, ENABLE);
NVIC_TIM6_Configuration();
常规配置,不可能会有出错。但是发现初始化上面的代码后,程序连main主函数都进不了。
因为我的程序 是STM32移值到GD32的,所以一直认为是配置上有差异,但结果并不是这样。
而是我在置置void TIM6_IRQHandler(void){//定时器1ms 中断函数的时候,没有加
if(TIM_GetFlagStatus(TIM6, TIM_FLAG_Update)==SET)
和 TIM_ClearITPendingBit(TIM6 , TIM_FLAG_Update);
。
中断并不是说进入主函数才触 发,单片机一旦运行,配置完成就开始工作。