OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5489|回复: 0

LED 封装思路

[复制链接]

5

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2015-10-2
在线时间
5 小时
发表于 2015-10-4 15:24:10 | 显示全部楼层 |阅读模式

今天进行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++编写理一下思路。

 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 09:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表