AIR系列|板载LED|gpio引脚选择|GPIO|流水灯|LuatOS-SOC接口|官方demo|学习(20-1):GPIO库基础

AIR系列各型号开发板板载LED对应管脚及GPIO控制代码

AIR103:

rtos_bsp == "AIR103" then -- Air103开发板LED引脚编号
        --return pin.PB26, pin.PB25, pin.PB24
        return 42,41,40

AIR系列|板载LED|gpio引脚选择|GPIO|流水灯|LuatOS-SOC接口|官方demo|学习(20-1):GPIO库基础_第1张图片

AIR105:

rtos_bsp == "AIR105" then -- Air105开发板LED引脚编号
        --return pin.PC3,pin.PD14, pin.PD15
        return 35,62,63

AIR系列|板载LED|gpio引脚选择|GPIO|流水灯|LuatOS-SOC接口|官方demo|学习(20-1):GPIO库基础_第2张图片

ESP32C3:

rtos_bsp == "ESP32C3" then -- ESP32C3开发板的引脚
        return 12, 13, 255 -- 开发板上就2个灯

AIR系列|板载LED|gpio引脚选择|GPIO|流水灯|LuatOS-SOC接口|官方demo|学习(20-1):GPIO库基础_第3张图片

AIR780E:

rtos_bsp == "EC618" then -- Air780E开发板引脚
        return 27, 255, 255 -- AIR780E开发板上就一个灯

AIR系列|板载LED|gpio引脚选择|GPIO|流水灯|LuatOS-SOC接口|官方demo|学习(20-1):GPIO库基础_第4张图片

ESP32S3:

rtos_bsp == "ESP32S3" then -- ESP32S3开发板引脚
        return 10, 11, 255 -- ESP32S3开发板LED引脚编号

AIR系列|板载LED|gpio引脚选择|GPIO|流水灯|LuatOS-SOC接口|官方demo|学习(20-1):GPIO库基础_第5张图片
pinx() 函数

--根据不同开发板,给LED赋值不同的gpio引脚编号:

--【HaoSir2022】于2022年4月21日增加
local rtos_bsp = rtos.bsp()
function pinx() -- 根据不同开发板,给LED赋值不同的gpio引脚编号
    if rtos_bsp == "AIR101" then -- Air101开发板LED引脚编号
        return pin.PB08, pin.PB09, pin.PB10
    elseif rtos_bsp == "AIR103" then -- Air103开发板LED引脚编号
        --return pin.PB26, pin.PB25, pin.PB24
        return 42,41,40
    elseif rtos_bsp == "AIR105" then -- Air105开发板LED引脚编号
        --return pin.PC3,pin.PD14, pin.PD15
        return 35,62,63
    elseif rtos_bsp == "ESP32C3" then -- ESP32C3开发板的引脚
        return 12, 13, 255 -- 开发板上就2个灯
    elseif rtos_bsp == "EC618" then -- Air780E开发板引脚
        return 27, 255, 255 -- AIR780E开发板上就一个灯
    elseif rtos_bsp == "ESP32S3" then -- ESP32S3开发板引脚
        return 10, 11, 255 -- ESP32S3开发板LED引脚编号
    else
        log.info("main", "define led pin in main.lua")
        return 0, 0, 0
    end
end

LED引脚初始化

--LED引脚判断赋值结束

local P1,P2,P3=pinx()--赋值开发板LED引脚编号
local LEDA= gpio.setup(P1, 0, gpio.PULLUP)
local LEDB= gpio.setup(P2, 0, gpio.PULLUP)
local LEDC= gpio.setup(P3, 0, gpio.PULLUP)

流水灯代码:

--开始流水灯
    local count = 0
    while 1 do
    --流水灯程序
        sys.wait(500) --点亮时间
        -- 轮流点灯
        LEDA(count % 3 == 0 and 1 or 0)
        if P2 and P2 ~=255 then
            LEDB(count % 3 == 1 and 1 or 0)
        end
        if P3 and P3 ~= 255 then
            LEDC(count % 3 == 2 and 1 or 0)
        end
        log.info("GPIO", "Go Go Go", count, rtos.bsp())
        --log.info("LuatOS:", "https://wiki.luatos.com")
        count = count + 1
    end

gpio - GPIO操作函数

已适配 Air101/Air103 Air105 ESP32C3 Air780

备注

本页文档由这个文件自动生成。如有错误,请提交issue或帮忙修改后pr,谢谢!

小技巧

本库有专属demo点此链接查看gpio的demo例子

小技巧

本库还有视频教程,点此链接查看

常量

常量

类型

解释

gpio.LOW

number

低电平

gpio.HIGH

number

高电平

gpio.OUTPUT

number

输出模式

gpio.INPUT

number

输入模式

gpio.IRQ

number

中断模式

gpio.PULLUP

number

上拉

gpio.PULLDOWN

number

下拉

gpio.RISING

number

上升沿触发

gpio.FALLING

number

下降沿触发

gpio.BOTH

number

双向触发,部分设备支持

gpio.HIGH_IRQ

number

高电平触发,部分设备支持

gpio.LOW_IRQ

number

低电平触发,部分设备支持

gpio.setup(pin, mode, pull, irq)

设置管脚功能

参数

传入值类型

解释

int

pin gpio编号,必须是数值

any

mode 输入输出模式:
数字0/1代表输出模式
nil代表输入模式
function代表中断模式

int

pull 上拉下列模式, 可以是gpio.PULLUP 或 gpio.PULLDOWN, 需要根据实际硬件选用

int

irq 默认gpio.BOTH。中断触发模式
上升沿gpio.RISING
下降沿gpio.FALLING
上升和下降都要gpio.BOTH

返回值

返回值类型

解释

any

输出模式返回设置电平的闭包, 输入模式和中断模式返回获取电平的闭包

例子

-- 设置gpio17为输入

gpio.setup(17, nil)

-- 设置gpio17为输出

gpio.setup(17, 0)

-- 设置gpio27为中断

gpio.setup(27, function(val) print("IRQ_27",val) end, gpio.PULLUP)


gpio.set(pin, value)

设置管脚电平

参数

传入值类型

解释

int

pin GPIO编号,必须是数值

int

value 电平, 可以是 高电平gpio.HIGH, 低电平gpio.LOW, 或者直接写数值1或0

返回值

返回值类型

解释

nil

无返回值

例子

-- 设置gpio17为低电平

gpio.set(17, 0)


gpio.get(pin)

获取管脚电平

参数

传入值类型

解释

int

pin GPIO编号,必须是数值

返回值

返回值类型

解释

value

电平, 高电平gpio.HIGH, 低电平gpio.LOW, 对应数值1和0

例子

-- 获取gpio17的当前电平

gpio.get(17)


gpio.close(pin)

关闭管脚功能(高阻输入态),关掉中断

参数

传入值类型

解释

int

pin GPIO编号,必须是数值

返回值

返回值类型

解释

nil

无返回值,总是执行成功

例子

-- 关闭gpio17

gpio.close(17)


gpio.setDefaultPull(val)

设置GPIO脚的默认上拉/下拉设置, 默认是平台自定义(一般为开漏).

参数

传入值类型

解释

int

val 0平台自定义,1上拉, 2下拉

返回值

返回值类型

解释

boolean

传值正确返回true,否则返回false

例子

-- 设置gpio.setuppull默认值为上拉

gpio.setDefaultPull(1)


gpio.toggle(pin)

变换GPIO脚输出电平,仅输出模式可用

参数

传入值类型

解释

int

管脚的GPIO号

返回值

返回值类型

解释

nil

无返回值

例子

-- API 2022.05.17 添加

-- 假设GPIO16上有LED, 500ms切换一次开关

gpio.setup(16, 0)

sys.timerLoopStart(function()

    gpio.toggle(16)

end, 500)


gpio.pulse(pin,level,len,delay)

在同一个GPIO输出一组脉冲, 注意, len的单位是bit, 高位在前.

参数

传入值类型

解释

int

gpio号

int/string

数值或者字符串.

int

len 长度 单位是bit, 高位在前.

int

delay 延迟,当前无固定时间单位

返回值

返回值类型

解释

nil

无返回值

例子

-- 通过PB06脚输出输出8个电平变化.

gpio.pulse(pin.PB06,0xA9, 8, 0)


gpio.debounce(pin, ms, mode)

防抖设置, 根据硬件ticks进行防抖

参数

传入值类型

解释

int

gpio号, 0~127, 与硬件相关

int

防抖时长,单位毫秒, 最大 65555 ms, 设置为0则关闭

int

模式, 0冷却模式, 1延时模式. 默认是0

返回值

返回值类型

解释

nil

无返回值

例子

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

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

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

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

gpio.debounce(7, 100) -- 若芯片支持pin, 可用pin.PA7代替数字7

-- 开启防抖, 模式1-延时, 中断后等待100ms,期间若保持该电平了,时间到之后上报一次

-- 对应的,如果输入的是一个 50hz的方波,那么不会触发任何上报

gpio.debounce(7, 100, 1)

-- 关闭防抖,时间设置为0就关闭

gpio.debounce(7, 0)

你可能感兴趣的:(LuatOS-SOC接口学习,单片机,国产mcu,gpio,AIR,luatos)