AIR103|gpio|gpio.debounce防抖|gpio.setup|LuatOS-SOC接口|官方demo|学习(20-2):GPIO_irq

基础资料

基于Air103开发板:🚗 Air103 - LuatOS 文档

上手:开发上手 - LuatOS 文档

探讨重点

对官方社区库接口GPIO库使用及示例进行复现及分析,了解该的基本原理及操作方法。

软件及工具版本

LuatOS@AIR103 base 22.12 bsp V0016 32bit

硬件准备

Air103开发板1块,按键开关,LED(红),面包板各一个,导线若干。

参考:AIR系列|板载LED|gpio引脚选择|GPIO|流水灯|LuatOS-SOC接口|官方demo|学习(20-1):GPIO库基础_打酱油的工程师的博客-CSDN博客

基于air103开发板接线:

执行效果:

中断函数执行时,led灯亮作为指示,且调试软件中打印“gpio CTR_PIN”。

[2023-02-28 23:31:06.451] I/main LuatOS@AIR103 base 22.12 bsp V0016 32bit
[2023-02-28 23:31:06.451] I/main ROM Build: Feb 12 2023 22:01:50
[2023-02-28 23:31:06.451] D/main loadlibs luavm 180208 11584 12264
[2023-02-28 23:31:06.451] D/main loadlibs sys   12288 4720 4720
[2023-02-28 23:31:06.451] I/user.main	gpio2demo	1.0.0
[2023-02-28 23:31:06.480] I/user.gpio_setup	1
[2023-02-28 23:31:07.847] I/user.gpio	CTR_PIN
[2023-02-28 23:31:14.667] I/user.gpio	CTR_PIN
[2023-02-28 23:31:24.649] I/user.gpio	CTR_PIN
[2023-02-28 23:31:26.067] I/user.gpio	CTR_PIN
[2023-02-28 23:31:29.482] I/user.gpio	CTR_PIN

GPIO irqdemo程序分析:

1、设置防抖

-- 消抖模式, 当前支持2种, 2022.12.16开始支持mode=1

-- 0 触发中断后,马上上报一次, 然后冷却N个毫秒后,重新接受中断

-- 1 触发中断后,延迟N个毫秒,期间没有新中断且电平没有变化,上报一次



-- 开启防抖, 模式0-冷却, 中断后马上上报, 但100ms内只上报一次

--gpio.debounce(pin, ms, mode)

if gpio.debounce then

    gpio.debounce(CTR_PIN, 50)

end

2、将gpio配制成function模式(中断模式)

result=gpio.setup(CTR_PIN, function()

    log.info("gpio", "CTR_PIN")

end, gpio.PULLUP) --gpio.PULLUP时,短接GND和CTR_PIN,CTR_PIN相对于GND处于高位(拉高),触发中断执行function

                  --gpio.PULLDOWN时,短接3.3V和CTR_PIN,CTR_PIN相对于3.3V处于低位(拉低),触发中断执行function

3、gpio.setup的返回值读取

log.info("gpio_setup",result())

4、基于官方demo修改的完整用例:


-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "gpio2demo"
VERSION = "1.0.0"

log.info("main", PROJECT, VERSION)

-- sys库是标配
_G.sys = require("sys")

if wdt then
    --添加硬狗防止程序卡死,在支持的设备上启用这个功能
    wdt.init(9000)--初始化watchdog设置为9s
    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
end
local CTR_PIN = pin.PB14 -- 按实际开发板选取
-- 消抖模式, 当前支持2种, 2022.12.16开始支持mode=1
-- 0 触发中断后,马上上报一次, 然后冷却N个毫秒后,重新接受中断
-- 1 触发中断后,延迟N个毫秒,期间没有新中断且电平没有变化,上报一次

-- 开启防抖, 模式0-冷却, 中断后马上上报, 但100ms内只上报一次
--gpio.debounce(pin, ms, mode)
if gpio.debounce then
    gpio.debounce(CTR_PIN, 50)
end
--配置PB14(gpio30)为输入模式,下拉,并会触发中断
--请根据实际需求更改gpio编号和上下拉
--gpio.setup(pin, mode, pull, irq), pull及irq可省略,
result=gpio.setup(CTR_PIN, function()
    log.info("gpio", "CTR_PIN")
end, gpio.PULLUP) --gpio.PULLUP时,短接GND和CTR_PIN,CTR_PIN相对于GND处于高位(拉高),触发中断执行function
                  --gpio.PULLDOWN时,短接3.3V和CTR_PIN,CTR_PIN相对于3.3V处于低位(拉低),触发中断执行function
log.info("gpio_setup",result())
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

5、LOG:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打酱油的工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值