|
发表于 2015-7-29 08:25:57
|
显示全部楼层
/*-----------------------------------------------------------------------
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
TIM8 更新周期是 = TIM8CLK / (TIM_Period + 1)/(TIM_Prescaler + 1)
根据需要设置TIM_Period 和TIM_Prescaler 的参数即可
----------------------------------------------------------------------- */
void TIM8_MeasureConfig(void)
{
TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
/* Enable the TIM8 gloabal Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_TIM13_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* 开启时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
/* 定时器配置 */
TIM_DeInit(TIM8);
TIM_BaseInitStructure.TIM_Period = 84*1024; ------------》设置参数
TIM_BaseInitStructure.TIM_Prescaler = 0; ------------》设置参数
TIM_BaseInitStructure.TIM_ClockDivision = 0;
TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM8, &TIM_BaseInitStructure);
TIM_Cmd(TIM8, ENABLE);
TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE);
}
*************************************************************************************************************************
void TIM8_UP_TIM13_IRQHandler(void)
{
if (TIM_GetITStatus(TIM8, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM8, TIM_IT_Update);
}
}
|
|