實驗?zāi)康模菏褂没径〞r器TIM6控制LED的亮滅。
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void TIM6_Init(void)
{
TIM_TimeBaseInitTypeDef TIMBASE6;
TIM_DeInit(TIM6);
TIMBASE6.TIM_Period=10000-1; //設(shè)置計數(shù)溢出大小 10KHZ/10000=1HZ; ARR
TIMBASE6.TIM_Prescaler=800-1; //預(yù)分頻系數(shù) 8M/800=10KHZ; PSC
TIMBASE6.TIM_ClockDivision = 0x00; //設(shè)置時鐘分割 0x00 不分割
TIMBASE6.TIM_CounterMode=TIM_CounterMode_Up; //設(shè)置計數(shù)器模式為向上計數(shù)模式
TIM_TimeBaseInit(TIM6, &TIMBASE6); //初始化TIM6
TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE); //將更新事件設(shè)置為中斷源
TIM_Cmd(TIM6,ENABLE); //設(shè)置CEN位,使能TIM6
}
void RCC_Init(void)
{
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
while(RCC_WaitForHSEStartUp()==ERROR);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div16);
RCC_PCLK1Config(RCC_HCLK_Div16);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_8);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET); //等待PLL工作
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource()!=0x08); //判斷是否PLL是系統(tǒng)時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
}
void TIM6_INTERRUPT(void)
{
while(TIM_GetFlagStatus (TIM6,TIM_FLAG_Update )!=RESET)
{
TIM_ClearFlag (TIM6,TIM_FLAG_Update);
GPIO_WriteBit(GPIOC,GPIO_Pin_1, (BitAction) (1- GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_1))); //LED亮滅反轉(zhuǎn)
}
}
int main(void)
{
GPIO_Config();
TIM6_Init();
RCC_Init();
while(1)
{
TIM6_INTERRUPT();
}
}