这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » Let'sDo第2期任务+墨水屏+过程贴

共1条 1/1 1 跳转至

Let'sDo第2期任务+墨水屏+过程贴

菜鸟
2024-08-19 22:45:18     打赏

1-pico的GPIO的内部结构

image.png

    上图是pico内部的PIO结构,由AHB总线控制数据的输出和读入,总线连接到FIFO上做异步处理和数据缓存。一个GPIO口上有四组FIFO和状态机,会产生相应的状态出来给到中断。能够看到实际的GPIO存在一个4mux1,因此只能使用其中的一种功能。能够设置GPIO口的输入、输出、驱动强度、默认值、使能等等。只有配置了使能才能使用。

    这是GPIO内部的mapping,见gpio.h文件。可见大多数GPIO都是支持这SPI、I2C、UART、PWM、SIO、PIO的。

image.png

2-关于GPIO的几个SDK函数

    首先是关于GPIO的功能有一个枚举可以对应起来。image.png

中断等级的枚举

image.png

配置GPIO功能的函数和读取GPIO功能的函数

image.png

image.png

设置推挽输出函数

image.png

设置输入使能

image.png

很重要的中断使能函数,能够配置GPIO口和中断触发方式,还有中断处理函数

image.png这些就是在使用过程中比较重要的GPIO函数,实际使用过程中大部分都已经封装好了,不需要我们太细致的进行研究。


3-LED和按键驱动函数。

    LED其实板载是有一个的,templet中使用的也是板载的LED。

image.png

出现的问题是这样的

image.png

templet中给出来的驱动是反着的Orz,改过来就好了,我一开始还在疑惑是不是代码写反了。


墨水屏上是带有按键的,对应到GPIO是12,13,14,我们把这个加到key的宏定义中。

image.png

image.png

每个key都是要使用初始化函数的,我好像把这两个函数的参数改了一下。时间有点久,记不太清了。总之先初始化一番。

image.png

按键在按下去之后应该是低电平,因此我们的读key函数使用之后需要取反一下。

        呼吸灯可以通过PWM进行实现,在此我并没有使用GPIO的相关功能,而是使用了比较朴素的计数方法,这样咱看着直观一点。就是在每个周期递增或者递减占空比,就可以做到呼吸灯的效果。

image.png

如何在程序中触发呢?有两种方案,一种是简单的while循环中实现

image.png

        被注释掉了,明显我是没用这种方法。还有一种就是中断处理函数。但是GPIO中断好像是只能接收一个中断处理函数,那应该怎么实现两个按键的功能触发还是需要一点技巧。

        中断处理函数中分别对两个按键进行判断,增加消抖!既隔一段时间再次读取key值,这段时间普遍使用10-20ms。我在实现的过程中是计算一段时间内的高低电平占用的时间,按占用时间长的为准。

image.pngimage.png

也是有效果的。


----过程贴分享结束,请大家批评指正~~~


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]