本帖最后由 jinglixixi 于 2021-12-27 23:34 编辑
合宙Air820开发板提供了相应的例程以供使用者学习和测试,但从编程的方式看似乎与通常的编程方式有所不同,需要进行一定的适应。 为习惯其编程方式,这里以例程uartGpioSwitch进行了一下功能测试以辅助对程序的分析来掌握其编程方法。 在完成固件和脚本下载后,就可见到图1所示的log,即switchtogpio的状态在不停的切换。
图1 log信息
与此同时,开发板的指示灯也在不停地闪烁,见图2和图3所示。
图2 熄灭指示灯
图3 点亮指示灯 在程序设计上,该效果是由2部分构成的,即程序文件main和testUartGpioSwitch。 在程序文件main中,其主体就是加载GPIO和UART切换的功能模块。 --加载GPIO和UART切换功能测试功能模块 require "testUartGpioSwitch" --启动系统框架 sys.init(0, 0) sys.run() 对于程序文件testUartGpioSwitch,则是通过语句: sys.timerLoopStart(switch,5000) 5秒切换一次功能,函数switch()的内容为:
- local function switch()
- if uartuse then
- switchtogpio()
- else
- switchtouart()
- end
- end
复制代码
即不断地在函数switchtogpio()和switchtouart()间进行切换。 由函数switchtogpio()的内容可知,其作用就是对P0_20和P0_21进行位操作及关闭串口。
- local function switchtogpio()
- log.info("switchtogpio",uartuse)
- if uartuse then
- --关闭uart功能
- uartclose()
- pins.setup(pio.P0_20,1)
- pins.setup(pio.P0_21,0)
- uartuse = false
- end
- end
复制代码
而由函数switchtouart()的内容可知,其作用恰恰与函数switchtogpio()的作用相反。
- local function switchtouart()
- log.info("switchtouart",uartuse)
- if not uartuse then
- --关闭gpio功能
- pins.close(pio.P0_20)
- pins.close(pio.P0_21)
- --打开uart功能
- uartopn()
- uartuse = true
- end
- end
复制代码
其中,函数uartopn()的内容为:
- local function uartopn()
- uart.setup(uartid,115200,8,uart.PAR_NONE,uart.STOP_1)
- end
复制代码
可知其作用就是设置串行通讯的参数,即波特率为115200,数据位数为8位,不使用奇偶校验,停止位为1位。 通过该例程的程序分析,我们一次就可学习到2种功能的使用,仿此就可掌握GPIO口和串行通讯的使用方法。 唯一不太理解的是P0_20和P0_21就是串口UART2的功能引脚,并未连接相应的LED来指示输出状态,而闪烁的LED(D2)却并没有受相应GPIO口的直接控制! |