基于STM32F407库函数开发按键控制LED灯

按键控制灯的亮与灭的效果图:
一、寄存器开发与库函数开发的优缺点1、寄存器开发缺点:
(1)开发难度大,查阅相关手册比较多
(2)开发效率相对低,产品周期长
(3)可维护性较差
(4)可移植性、阅读性差
优点:
运行效率高。
2、库函数开发优点:
(1)开发难度小,有库函数封装,即可实现功能
(2)开发效率高,产品周期短
(3)可维护性高
(4)可移植性、阅读性强
缺点:
运行效率相对寄存器低一些。
stm32库函数实际是st公司对寄存器开发封装。
二、led库函数开发led库开发要添加库文件:stm32f4xx_gpio.c
(1)原理图可参看上篇文章:入门篇 | stm32f407寄存器开发--点灯
(2)打开gpiof组时钟,也叫做使能f组时钟(stm32当中外设的时钟不打开,降低功耗)
(3)设置gpiof9 引脚为输出模式 输出推挽 上拉 速度
/*引脚说明:led0连接在pf9引脚pf9输出vcc(1),灯灭pf9输出gnd(0),灯亮*/void led_init(void){ gpio_inittypedef gpio_initstruct; //使能gpio f组时钟, //rcc_ahb1enr |= (0x01<<5); rcc_ahb1periphclockcmd(rcc_ahb1periph_gpiof, enable); gpio_initstruct.gpio_pin = gpio_pin_9; //引脚9 gpio_initstruct.gpio_mode = gpio_mode_out; //输出模式 gpio_initstruct.gpio_otype = gpio_otype_pp; //推挽 gpio_initstruct.gpio_speed = gpio_speed_50mhz; //快速 gpio_initstruct.gpio_pupd = gpio_pupd_up; //上拉 gpio_init(gpiof, &gpio_initstruct);}(4)通过置位或者复位函数控制引脚电平来点灯
gpio_setbits( ) :置位(1) gpio_resetbits( )复位(0)int main(void){ //led灯初始化 led_init(); while(1) { gpio_setbits(gpiof,gpio_pin_9); //pf9置1 灯灭 delayms(1000); gpio_resetbits(gpiof,gpio_pin_9);//pf9置0 灯亮 delayms(1000); } return 0;}是不是比起寄存器点灯方便多啦!!!
二、按键库函数开发按键库开发要添加库文件:stm32f4xx_gpio.c
(1)理解按键输入原理图
按键s1连接pa0,
当按键s1按下时,pa0为低电平
当按键s1未按下时,pa0为高电平
补充:由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。我们延时消抖即可
(2)打开gpioa组时钟,也叫做使能a组时钟(stm32当中外设的时钟不打开,降低功耗。
(3)设置gpioa0 引脚为模式 上拉
/*引脚说明:key0(s1) -- pa0*/void key_init(void){ gpio_inittypedef gpio_initstruct; rcc_ahb1periphclockcmd(rcc_ahb1periph_gpioa, enable);//使能gpio a组时钟, gpio_initstruct.gpio_pin = gpio_pin_0; //引脚0 gpio_initstruct.gpio_mode = gpio_mode_in; //输入模式 gpio_initstruct.gpio_pupd = gpio_pupd_up; //上拉 gpio_init(gpioa, &gpio_initstruct);}(4)通过函数获取引脚电平(主函数使用此函数)
gpio_readinputdatabit(gpio_typedef* gpiox,uint16_t gpio_pin)结合上面led库函数点灯来实现按键控制灯的亮与灭
int main(void){ //led灯初始化 led_init(); key_init(); while(1) { if(gpio_readinputdatabit(gpioa, gpio_pin_0) == bit_reset)//判断是否按下 { delayms(15); //延时消抖 if(gpio_readinputdatabit(gpioa, gpio_pin_0) == 0)//判断是否按下 { while(gpio_readinputdatabit(gpioa, gpio_pin_0) == 0);//按键按下 gpio_togglebits(gpiof, gpio_pin_9);//引脚状态变更 } } } return 0;}

移动、中电科“瓜分”1.04亿湛江智慧城市及5G基础设施建设项目
宝安区2018年国高认定奖励(第二批)公示
Wi-Fi FEM的市场规模大吗?Wi-Fi FEM未来前景如何?
硬件仿真崛起的背后是什么?
什么是液晶电视
基于STM32F407库函数开发按键控制LED灯
微针在伤口愈合及组织再生中的应用都有哪些呢?
TUV莱茵联合韩国产业技术试验院为福佑斯电器颁发KTL标识证书
让人纠结的魅族:舍弃难产的联发科?高通骁龙660成魅族MX7最好的选择
如何发起 HTTP 请求流程
树立行业质量标杆 菲菱科思引领市场风范
台积电巨额投资,或用于扩大N5容量
Seoul Semiconductor在2023年显示周上推出面向未来显示器的第二代LED技术
5G手机推出后运营商的套餐价格也许会上涨
CMOS集成电路使用要注意的事项
讲解一下SMT贴片元器件中BGA封装的优缺点
1000台“小蛮驴”将落地,服务智慧校园
MicroLED被业内视为可能变革产业的新一代显示技术 国际厂商已加速研发
太阳能电池板清洗设备、方法和好处
关于3GPP的性能分析和应用