【WB32库开发】第4章 GPIO的输出与输入(中)

上节课我们实现了GPIO的输出功能,还记得我们在文章最后给出的小作业么?
在这里插入图片描述
相信有的朋友已经尝试了一下,但仍然有不理解,那么就让我们一起在本章的内容中再次学习一下吧。

4.3 按键检测点亮LED灯硬件设计

由于核心开发板上配置外设有限,我们将借助一个简单的按键硬件电路来实现本节内容。需要准备的器件有若干杜邦线、面包板和按键。
将按键按对角线分别连接在3.3V与PB12上。实际连接图如下。

请添加图片描述

4.4按键检测点亮LED灯软件设计

4.4.1编程要点

1)移植LED函数。
2)编写按键检测函数,检测对应GPIO端口输入电平变化。
3)根据GPIO输入,决定GPIO输出。

4.4.2代码分析

1)Delay延时函数
老规矩,新建文件夹delay,再新建"bsp_delay.c"与"bsp_delay.h"文件。
在这里插入图片描述

大家都知道,控制器在执行空函数是会消耗若干机器周期,本例中的延时函数本质就是循环一定次数的空函数来达到延时的目的,不过这种延时函数往往得不到精准的延时,因此在未来的章节中我们会讲如何完成更精确的系统延时。
在这里插入图片描述
在"bsp_delay.h"中,除了对"bsp_delay.c"中的Delay( )函数进行声明外,我们还将延时的次数代入,并定义为一个宏,#define SOFT_DELAY Delay(0x0000FF),由此可以在程序中更方便的修改和调用,没必要为了修改时间去修改程序中每一处的Delay()中的值。

2)LED代码分析
关于LED部分代码,大家可以把上节课编写的代码中的LED部分,直接复制到本例程User文件夹下,然后在工程中直接添加 .c文件,并把.h文件所在路径包含起来。
关于LED部分代码分析详见上一节内容,此处不再过多赘述。
3)KEY代码分析
首先需要将按键使用到的GPIO宏定义。接着将按键存在的按下与关断两种状态定义为数字电路中的1与0。
在这里插入图片描述
初始化按键GPIO
在这里插入图片描述
按键判断
在这里插入图片描述
完成上一节内容实践的朋友可以观察到LED会以一定频率闪烁,这就是延时函数在起作用。
那么为什么本段函数也需要使用延时呢?这是因为外接的按键在使用过程中容易产生“抖动”,为了避免抖动产生的不良影响,在实际项目中通常使用硬件消抖或软件消抖的方法。本例使用软件消抖,通过两次判断中加入延时对按键是否按下进行判断,最终返回按键状态。

这里给出完整bsp_key.c与bsp_key.h的代码。
在这里插入图片描述
在这里插入图片描述

3)main函数
在这里插入图片描述
在main函数当中,我们首先将LED与按键函数初始化,在进入循环后判断按键状态,按键按下后便将LED状态翻转。

4.4.3下载验证

程序编译无错进行烧录后,可以观察到上电后板载LED处于关闭状态,当按下按键松开后,LED亮起,再次按下按键松开后,LED关闭。

本节内容到此结束。
到现在为止,在库函数上,我们已经使用过时钟初始化函数、GPIO置位、复位、翻转函数、GPIO初始化函数,按照教程自己编写完成例程的朋友应该已经能找到这些函数声明所在的位置了。
依据笔者的学习经验,学习WB32库函数开发最为重要的就是会使用官方固件库中的函数,能够找到你需要的函数就已经向WB32库开发迈出了最重要的一步,接下来,就是要了解这些函数到底怎么用,我们会在下一节教程中,结合本节课的例程进行详细的分析。
另外,细致的你会发现在上一节点亮LED例程中的延时函数竟然在本节例程中成为了一个单独的模块,你觉得这样做是更方便还是更麻烦了呢?每个程序上方会有很多#include,你知道它的作用么?(例,为何main函数中除了包含“wb32f10x.h”外还包含有"bsp_led.h"和"bsp_key.h",而bsp_key.c中包含着 “bsp_key.h"与"bsp_delay.h”,bsp_led.c中只包含"bsp_led.h"呢?)
有答案的朋友可以在博客下方交流哦~

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值