新手上路
- 积分
- 21
- 金钱
- 21
- 注册时间
- 2019-8-24
- 在线时间
- 4 小时
|
1金钱
初始化函数:
void TIME4_Init(u16 per,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInitStruct.TIM_Period=per; //周期
TIM_TimeBaseInitStruct.TIM_Prescaler=psc;//分频系数
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStruct);
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
NVIC_InitStruct.NVIC_IRQChannel=TIM4_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=3;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStruct);
TIM_Cmd(TIM4,ENABLE);
}
定时器4中断函数:
void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4,TIM_IT_Update)){
led2=!led2;
}
TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
}
为什么调试程序的时候发现每次进入中断的时候CNT寄存器里面的数值都不是我设定的值per?
还有就是我设定的时间是每隔1s led翻转 进入中断函数执行里面的语句也是需要时间的,那么定时的时间也就不再是1s了?
重置计数器里面的数值应该是发生在进入中断函数之前还是结束之后?
|
最佳答案
查看完整内容[请看2#楼]
断点看的时候,和MCU硬件跑,还是有点差异的,所以不同很正常。至于准不准,可以告诉你是准的,因为硬件是一直运行的,每次都慢一点点,那综合起来就是准的了。
|