STM32--基本定时器的应用
扫描二维码
随时随地手机看文章
实验目的:使用基本定时器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; //设置计数溢出大小 10KHZ/10000=1HZ; ARR
TIMBASE6.TIM_Prescaler=800-1; //预分频系数 8M/800=10KHZ; PSC
TIMBASE6.TIM_ClockDivision = 0x00; //设置时钟分割 0x00 不分割
TIMBASE6.TIM_CounterMode=TIM_CounterMode_Up; //设置计数器模式为向上计数模式
TIM_TimeBaseInit(TIM6, &TIMBASE6); //初始化TIM6
TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE); //将更新事件设置为中断源
TIM_Cmd(TIM6,ENABLE); //设置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是系统时钟
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亮灭反转
}
}
int main(void)
{
GPIO_Config();
TIM6_Init();
RCC_Init();
while(1)
{
TIM6_INTERRUPT();
}
}