2、合宙 724UG 模块GPIO学习

一、需要准备

官方API手册

硬件设计手册 724UG开发板原理图

二、GPIO配置讲解

打开官方API手册找到对应的家接口文档,里面提供了很多api接口根据自己需求观看,我看的是4G的luat API接口

合宙ESP32C3不带串口 合宙724ug连接stm32_ci


找到pins API接口函数里面有关于GPIO的配置

合宙ESP32C3不带串口 合宙724ug连接stm32_合宙ESP32C3不带串口_02


pins.setup函数有三个参数,根据GPIO配置输入与输出,

1、输出模式

假如我们要将GPIO 4设置为输出,只需要

定义一个变量

local setGPIO=pins.setup(4,0)–设置IO4为输出,电平为低

也可以写成local setGPIO=pins.setup(pio.P0_4,0)

合宙ESP32C3不带串口 合宙724ug连接stm32_输入模式_03


可以通过setGPIO()设置IO4的高低电平

如setGPIO(1),设置GPIO4为高,setGPIO(0)为低

2、输入模式

假设设置GPIO7为输入模式,只需要

随意定义一个变量,如

local getGPIO7=pins.setup(7)–配置GPIO7,输入模式,

可以通过getGPIO7()获取IO的电平为0还是1

3、中断模式
假设设置GPIO7为中断模式,只需要
随意定义一个变量,如
local getGPIO7=pins.setup(7,interrupt_re)–配置GPIO7,输入模式,interrupt_re为中断处理函数,中断处理函数随便写
如下

function interrupt_re(msg)
    if msg==cpu.INT_GPIO_POSEDGE then
        --如果当前上升沿中断执行IF语句里的
    else
        --下降沿中断执行else里的
    end
end
local getGPio=pins.setup(7,interrupt_re)

也可以通过getGPIO7()获取IO的电平为0还是1
三、代码示例

3.1输出模式演示

首先查看724UG 开发板的原理图

合宙ESP32C3不带串口 合宙724ug连接stm32_合宙ESP32C3不带串口_04


在使用GPIO时要用到官方给的电压管理接口API,设置IO电压

有些GPIO需要打开对应的ldo电压域才能正常工作,电压域和对应的GPIO关系如下

pmd.ldoset(x,pmd.LDO_VSIM2) – GPIO 29、30、31 --目前core版本还不支持

pmd.ldoset(x,pmd.LDO_VLCD) – GPIO 0、1、2、3、4、6 --目前core版本,x还控制不了不同等级的电压,都是1.8V

pmd.ldoset(x,pmd.LDO_VMMC) – GPIO 24、25、26、27、28

x=0时:关闭LDO

x=1时:LDO输出1.716V

x=2时:LDO输出1.828V

x=3时:LDO输出1.939V

x=4时:LDO输出2.051V

x=5时:LDO输出2.162V

x=6时:LDO输出2.271V

x=7时:LDO输出2.375V

x=8时:LDO输出2.493V

x=9时:LDO输出2.607V

x=10时:LDO输出2.719V

x=11时:LDO输出2.831V

x=12时:LDO输出2.942V

x=13时:LDO输出3.054V

x=14时:LDO输出3.165V

x=15时:LDO输出3.177V

我们来控制IO1和IO4来,控制724 开发板上的绿灯和蓝灯
让他们交替闪烁,绿灯亮1s后,蓝灯亮1s,由上可知电压设置为pmd.ldoset(1, pmd.LDO_VLCD)就行了
代码如下

--必须在这个位置定义PROJECT和VERSION变量
--PROJECT:ascii string类型,可以随便定义,只要不使用,就行
--VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义
PROJECT = "GPIO_OUT"
VERSION = "0.0.1"
require "sys"
--加载日志功能模块,并且设置日志输出等级
--如果关闭调用log模块接口输出的日志,等级设置为log.LOG_SILENT即可
require "log"
require "pins"
LOG_LEVEL = log.LOGLEVEL_TRACE

pmd.ldoset(1, pmd.LDO_VLCD)--电压域

local blue_flag,green_flag=0,1
local function task1()
    local setGpio4= pins.setup(4, 0)--设置GPIO 4为输出,默认低电平
    local setGpio1= pins.setup(1, 0)--设置GPIO 1为输出,默认低电平
    while true do
        blue_flag= blue_flag==0 and 1 or 0--三目运算符 if(flag==0)then flag=1 else flag=0
        green_flag=green_flag==1 and 0 or 1
            setGpio4(blue_flag) --设置GPIO电平
            setGpio1(green_flag)
        print("IO4:",blue_flag,"IO1",green_flag)--打印IO的电平
        sys.wait(1000)--sys.wait(ms)任务延时函数
    end
end
--启动系统框架,下面不要随便动
sys.taskInit(task1)--创建一个任务
sys.init(0, 0)
sys.run()

合宙ESP32C3不带串口 合宙724ug连接stm32_ci_05


串口显示为如上

3.2 输入模式

就用GPIO7了,
通过设置GPIO7为输出,检查GPIO7电平变换控制两个LED,如果为高电平蓝灯亮,低电平绿灯亮
代码如下

--必须在这个位置定义PROJECT和VERSION变量
--PROJECT:ascii string类型,可以随便定义,只要不使用,就行
--VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义
PROJECT = "GPIO_OUT"
VERSION = "0.0.1"
require "sys"
--加载日志功能模块,并且设置日志输出等级
--如果关闭调用log模块接口输出的日志,等级设置为log.LOG_SILENT即可
require "log"
require "pins"
require "bit"
LOG_LEVEL = log.LOGLEVEL_TRACE

pmd.ldoset(1, pmd.LDO_VLCD)
local setGpio4 = pins.setup(4, 0)--设置GPIO 4为输出,默认低电平
local setGpio1 = pins.setup(1, 0)--设置GPIO 1为输出,默认低电平
local getGpio7 = pins.setup(7)--默认下拉

local function task1()
    while true do
        if (getGpio7() == 1) then
            setGpio4(1)--设置GPIO4 为1
            setGpio1(0)--设置IO1 为0
        else
            setGpio1(1)--设置GPIO1 为1
            setGpio4(0)--设置GPIO4 为0
        end
        print("IO7:", getGpio7())--打印IO的电平
        sys.wait(500)--延时500ms
    end
end

--启动系统框架,下面不要随便动
sys.taskInit(task1)--创建一个任务
sys.init(0, 0)
sys.run()

此时GPIO7为0,绿灯亮

合宙ESP32C3不带串口 合宙724ug连接stm32_输入模式_06


将GPIO7接到4V,此时蓝灯亮

合宙ESP32C3不带串口 合宙724ug连接stm32_合宙ESP32C3不带串口_07


串口显示如下

合宙ESP32C3不带串口 合宙724ug连接stm32_ci_08


3.3中断模式

通过设置GPIO7为中断模式,通过中断处理函数控制两个LED,如果为上升沿中断蓝灯亮,下降沿中断绿灯亮
代码如下

--必须在这个位置定义PROJECT和VERSION变量
--PROJECT:ascii string类型,可以随便定义,只要不使用,就行
--VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义
PROJECT = "GPIO_OUT"
VERSION = "0.0.1"
require "sys"
--加载日志功能模块,并且设置日志输出等级
--如果关闭调用log模块接口输出的日志,等级设置为log.LOG_SILENT即可
require "log"
require "pins"
require "bit"
LOG_LEVEL = log.LOGLEVEL_TRACE

pmd.ldoset(1, pmd.LDO_VLCD)

local setGpio4 = pins.setup(4, 0)--设置GPIO 4为输出,默认低电平
local setGpio1 = pins.setup(1, 1)--设置GPIO 1为输出,默认低电平
function Interrupt_re(msg)
    if (msg == cpu.INT_GPIO_POSEDGE) then
        setGpio4(1)--设置GPIO4 为1
        setGpio1(0)--设置IO1 为0
        print("BLUE", "ON", "GREEN", "OFF")
    else
        setGpio1(1)--设置GPIO1 为1
        setGpio4(0)--设置GPIO4 为0
        print("BLUE", "OFF", "GREEN", "ON")
    end
end

local function task1()
    local getGpio7 = pins.setup(7, Interrupt_re)--设置GPIO7为中断模式
end
--启动系统框架,下面不要随便动
sys.taskInit(task1)--创建一个任务
sys.init(0, 0)
sys.run()

效果串口测试

合宙ESP32C3不带串口 合宙724ug连接stm32_string类_09