微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32F103实现LED灯、按键、定时器编程

STM32F103实现LED灯、按键、定时器编程

时间:11-18 来源:互联网 点击:

针变量后,程序运行不成功。灯不亮。

extern unsigned char flag_20ms,flag_500ms,flag_250ms;

extern unsigned char flag_key0,flag_key1;

void Led_Init(void)

{

GPIO_InitTypeDef Led_InitTypeDef;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOA,ENABLE);

Led_InitTypeDef.GPIO_Mode=GPIO_Mode_Out_PP;

Led_InitTypeDef.GPIO_Speed=GPIO_Speed_50MHz;

Led_InitTypeDef.GPIO_Pin=GPIO_Pin_8;

GPIO_Init(GPIOA,&Led_InitTypeDef);

Led_InitTypeDef.GPIO_Pin=GPIO_Pin_2;

GPIO_Init(GPIOD,&Led_InitTypeDef);

LED0=1;

LED1=1;

}

/*

函数功能:KEY0按下时,LED0 每秒闪烁一下。同时LED1熄灭。

KEY1按下时,LED1 每秒闪烁二下。同时LED0熄灭。

WAKE_UP按下,LED0、LED1都熄灭。

外部变量:flag_key0,flag_key1,flag_500ms,flag_250ms

输入参数:无

输出参数:无。

*/

void Led_Control(void)

{

if(flag_key0==1)

{

if(flag_500ms==1)

LED0=0;

else LED0=1;

}

else

LED0=1;

if(flag_key1==1)

{

if(flag_250ms==1)

LED1=0;

else LED1=1;

}

else

LED1=1;

}

#include "sys.h"

#include "stm32f10x_tim.h"

#include "led.h"

#include "timer2.h"

#include "key.h"

extern unsigned char flag_20ms,flag_500ms,flag_250ms;

void Timer2_config(unsigned int presc,unsigned int period)

{

TIM_TimeBaseInitTypeDef My_TIM2_Init;

NVIC_InitTypeDef My_NVIC_Init;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

My_TIM2_Init.TIM_Prescaler=presc;

My_TIM2_Init.TIM_Period=period;

My_TIM2_Init.TIM_ClockDivision=TIM_CKD_div1;

My_TIM2_Init.TIM_CounterMode=TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM2,&My_TIM2_Init);

My_NVIC_Init.NVIC_IRQChannel=TIM2_IRQn;

My_NVIC_Init.NVIC_IRQChannelCmd=ENABLE;

My_NVIC_Init.NVIC_IRQChannelPreemptionPriority=1;

My_NVIC_Init.NVIC_IRQChannelSubPriority=1;

NVIC_Init(&My_NVIC_Init);

TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

TIM_Cmd(TIM2,ENABLE);

}

void TIM2_IRQHandler(void)

{

static unsigned char temp1,temp2,temp3;

if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)

{

TIM_ClearITPendingBit(TIM2,TIM_IT_Update);

if(temp1++>=10)

{temp1=0;flag_20ms=0x01;

keyfunction();

}

if(temp2++>=250)

{ temp2=0;flag_500ms++;

if(flag_500ms>1) flag_500ms=0;}

if(temp3++>=125)

{ temp3=0;flag_250ms++;

if(flag_250ms>1)

flag_250ms=0;

}

}

}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top