新手上路
- 积分
- 40
- 金钱
- 40
- 注册时间
- 2015-3-2
- 在线时间
- 0 小时
|
5金钱
说明:stm32f103使用8M晶振,倍频后72M,使用TIM2定时器,发现根据设置的参数,需要扩大一倍才能达到理想的延时时间。希望大家帮忙看看。
void Clock_Init()
{
ErrorStatus HSEStartUpStatus ;
/* RCC system reset(for debug purpose) */
RCC_DeInit();
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON) ;
/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp() ;
if(HSEStartUpStatus == SUCCESS)
{
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable) ;
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2) ;
RCC_HCLKConfig(RCC_SYSCLK_Div1) ;
RCC_PCLK2Config(RCC_HCLK_Div1) ;
RCC_PCLK1Config(RCC_HCLK_Div2) ; //36M
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9) ; //72M
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK) ;
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
}
void TIM2_MAINInit(u16 data)
{
/*用来计数*/
RCC_APB1PeriphClockCmd ( RCC_APB1Periph_TIM2 , ENABLE) ;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = data ;//
TIM_TimeBaseStructure.TIM_Prescaler = 35999;//
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 增计数模式
TIM_TimeBaseInit(TIM2 , &TIM_TimeBaseStructure);
TIM_ITConfig(TIM2,TIM_IT_Update, ENABLE );//开中断
TIM_Cmd(TIM2,ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
NVIC_InitTypeDef NVIC_InitStructure ;
NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn ;//TIM2全局中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
void main()
{
Clock_Init( );
TIM2_MAINInit(1000);
while(1)
{
}
}
按照这样写,TIM2的晶振应该是36M,1s中进一次TIM2的中断,但是实际测试中发现,500ms就进一次,测量晶振,发现8M晶振没有问题。
希望大家帮帮忙!!!!
|
|