|
如果 定时器 都 使用 内部时钟 不级联的话(屏蔽红色代码) ,两者进入 中断都很正常
测试代码
TIM4_Config(12000,10000); //周期0.5秒
TIM2_Config(24000,10000); //周期1秒
如果使用 主定时器是 tim2 从定时器 是tim4 tim2作为tim4 的预分频的话 只要tim2进入中断 tim4 就进入中断
tim4的分频还有 周期 都完全没有用,
测试代码:
TIM4_Config(10,10); //他的周期 应该是 100秒 测试出来是一秒
TIM2_Config(24000,10000); //周期1秒
中断函数
void TIM2_UP_IRQHandler(void)
{
OSIntEnter();
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除TIM2更新中断标志
++g_tim2cnt;
OSIntExit(); /* Tell uC/OS-II that we are leaving the ISR */
}
//32K 中断
void TIM4_IRQHandler(void)
{
OSIntEnter();
TIM_ClearITPendingBit(TIM4, TIM_IT_Update); //清除TIM4更新中断标志
++g_tim4cnt;
OSIntExit(); /* Tell uC/OS-II that we are leaving the ISR */
}
void TIM4_Config(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStruct; //中断参数结构体
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM8时钟使能
TIM_DeInit(TIM4);
TIM_TimeBaseStructure.TIM_Period = arr; //重装载值
TIM_TimeBaseStructure.TIM_Prescaler =psc-1; //预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //不懂,不用管
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //初始化
//中断优先级NVIC设置
TIM_ClearITPendingBit(TIM4, TIM_IT_Update); //清除TIM4更新中断标志
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //使能TIM4中断,允许更新中断
NVIC_InitStruct.NVIC_IRQChannel = TIM4_IRQn; //TIM4中断
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; //占先优先级0
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; //次优先级0
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStruct); //初始化NVIC寄存器
TIM_ITRxExternalClockConfig(TIM4,TIM_TS_ITR2); //tim2 as master
TIM_ARRPreloadConfig(TIM4, ENABLE); //使能TIM4重载寄存器ARR
TIM_Cmd(TIM4, ENABLE); //使能TIM4
}
void TIM2_Config(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStruct; //中断参数结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM2, ENABLE);
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = arr; //当定时器从0计数到999,即为1000次,为一个定时周期
TIM_TimeBaseStructure.TIM_Prescaler = psc-1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //设置时钟分频系数:不分频
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
NVIC_InitStruct.NVIC_IRQChannel = TIM2_UP_IRQn; //TIM8中断
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; //占先优先级0
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; //次优先级0
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStruct); //初始化NVIC寄存器
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //使能TIM8中断,允许更新中断
TIM_SelectMasterSlaveMode(TIM2,TIM_MasterSlaveMode_Enable);
TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_Update);
TIM_ARRPreloadConfig(TIM2, ENABLE); //使能TIM2重载寄存器ARR
TIM_CtrlPWMOutputs(TIM2,ENABLE);
TIM_Cmd(TIM2,ENABLE);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|