当前位置:首页 > 单片机 > 单片机
[导读]实验目的:使用基本定时器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_Init

实验目的:使用基本定时器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();

}

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭