|
关于定时器TIM2我的理解是
分频到计数器的每个周期是1us
然后通过捕获来确定两个帧之间的间隔是不是大于3.5个字节
但是具体到程序里面看,我就有点迷惑了
RCC_APB1PeriphClockCmd(TIM_HARD_RCC, ENABLE);
/*-----------------------------------------------------------------------
system_stm32f4xx.c 文件中 void SetSysClock(void) 函数对时钟的配置如下:
HCLK = SYSCLK / 1 (AHB1Periph)
PCLK2 = HCLK / 2 (APB2Periph)
PCLK1 = HCLK / 4 (APB1Periph)
因为APB1 prescaler != 1, 所以 APB1上的TIMxCLK = PCLK1 x 2 = SystemCoreClock / 2;
因为APB2 prescaler != 1, 所以 APB2上的TIMxCLK = PCLK2 x 2 = SystemCoreClock;
APB1 定时器有 TIM2, TIM3 ,TIM4, TIM5, TIM6, TIM7, TIM12, TIM13,TIM14
APB2 定时器有 TIM1, TIM8 ,TIM9, TIM10, TIM11
----------------------------------------------------------------------- */
uiTIMxCLK = SystemCoreClock / 2;
usPrescaler = uiTIMxCLK / 1000000 ; /* 分频到周期 1us */
#if defined (USE_TIM2) || defined (USE_TIM5)
//usPeriod = 0xFFFFFFFF; /* 407支持32位定时器 */
usPeriod = 0xFFFF; /* 103支持16位 */
#else
usPeriod = 0xFFFF;
#endif
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = usPeriod;
TIM_TimeBaseStructure.TIM_Prescaler = usPrescaler;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM_HARD, &TIM_TimeBaseStructure);
这一段的描述中 参考的是F4的 void SetSysClock(void)这个函数,里面给APB1的时钟是4分频的,那么这个时候TIM2的时钟的确是系统时钟的一半
但是我看例程中,F103的时钟配置里面关于APB1的时钟是这么配置的
/* PCLK1 = HCLK */
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
也就是APB1二分频了,实际上F103在例程这个地方的时钟是系统时钟/2*2,就是系统时钟.
那这个程序在F103上捕获的速度应该是比预想的快了一倍.
不知道是不是我对这个程序的理解有错.
如果没错的话,虽然例程跑得起来,但是这捕获的速度变快了,会不会对稳定性有比较大的影响?
求指教
|
|