求助。。。。。。。。。。。。。。谢谢!!!!!!!!!!!!!!!!!!
定时器的配置如下:
void Timer_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/* 基础设置*/
TIM_TimeBaseStructure.TIM_Period = 25000;
//计数值
TIM_TimeBaseStructure.TIM_Prescaler = 33600-1;
//预分频,此值+1为分频的除数
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
//向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ClearFlag(TIM2,TIM_FLAG_Update);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM2, ENABLE);
}
我是这么算的:
F4的TIM2频率是168M,
那么按照这个配置后定时应该是168 000 000 ÷ 33600 = 5000 ,也就是一秒钟的时间计数器可以跑到 5000 ,
那么要计数到 25000 的话,计数器要经过 5s 的时间就可以到 25000 这个值。
我配置的现象是正常情况下 led1 闪烁,计数器到后 led2 闪烁。
现在的问题是:秒表测试后实际上要经过 10s 的时间 led2才闪烁,换了几个分频值都是要两倍的时间才达到效果!请问是为什么??????是我算错了还是有其它要注意的地方。。。
貌似TIM2-7默认分频是2,频率是84M
另外,印象中TIM2最高频率是84M
我试过TIM3的,就算分频数全为1,频率也是84M
---------------------------------
那在程序里怎样可以看到这个84M呢?有木有方法。。。
这样说来是应该要84M才正确,嘿嘿
void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
}
回复【楼主位】yougen1314: --------------------------------- 差倍数的话,最好看看时钟树图,看看是不是有什么地方分频了.还可以软件仿真,直接看寄存器,是不是正确.
---------------------------------
回复【6楼】dengbing111:
回复【2楼】正点原子:
---------------------------------
原子哥,我写了一个和上面一样的程序,调试程序的时候,就是不进入我写的中断函数里面去执行led的闪烁?这是中断嵌套向量。就是想实现tim2的溢出中断。你看一下。。。。
void NVIC_Config(void) { NVIC_InitTypeDef NVIC_InitStruct; NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; NVIC_InitStruct.NVIC_IRQChannelCmd =
......
---------------------------------
一周热门 更多>