今天进行LED的操作学习,代码基本比较简单,现在想把LED的初始化和点亮、关闭进行封装。
思路:
实现
[mw_shl_code=c,true]void LED_Init(GPIO_TypeDef* GPIOx,u32 PINx,enum Led_Def LEDx);
void LED_On(enum Led_Def Led);//LED亮
void LED_Off(enum Led_Def Led);//LED灭
void LED_Tog(enum Led_Def Led)//LED状态翻转[/mw_shl_code]
定义
[mw_shl_code=c,true]enum Led_Def
{
LED_0=0,
LED_1=1
}; //有多少路可设多少个
static const u16 LED_NUMBER=2;
static GPIO_TypeDef* LED_PORT[ LED_NUMBER - 1];
static u16 LED_PIN[ LED_NUMBER - 1];
初始化函数的实现
//作用:初始化LED
//输入:GPIOx :LED占用的GPIO,PINx:LED占用的引脚号, LEDx:LED的编号。
//作者:sworssman
void LED_Init(GPIO_TypeDef* GPIOx,u32 PINx,enum Led_Def LEDx) //
{
u16 clockbit; //左移位数
u32 gx,ga;
GPIO_Set( GPIOx, PINx,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //GPIO 状态设置
LED_PIN[LEDx]= PINx;
LED_PORT[LEDx]=GPIOx;
gx = (u32 )GPIOx;
ga = (u32 )GPIOA;
clockbit = (gx -ga)/0x0400 ;
RCC->AHB1ENR|=1<<clockbit; //使能GPIO时钟……。……
}
状态设置的实现
void LED_On(enum Led_Def Led)//LED亮
{
LED_PORT[Led]->BSRRL=LED_PIN[Led];
}
void LED_Off(enum Led_Def Led)//LED灭
{
LED_PORT[Led]->BSRRH=LED_PIN[Led];
}
void LED_Tog(enum Led_Def Led)//LED状态翻转
{
LED_PORT[Led]->ODR^=LED_PIN[Led];
}[/mw_shl_code]
其实这样的初始化方法并比不比直接初始化方便和高效,只是拿来练下手,学习一下并为后续可以用C++编写理一下思路。
一周热门 更多>