串口

作者:楼康华,朱天华

概述

Air724UG模块提供了五个通用异步收发器:主串口UART1、下载和校准串口UART2、通用串口UART3、调试串口HOST UART和ZSP UART。

UART1

UART1管脚定义

名称

管脚

IO

作用

UART1_TXD

36

O

发送数据到DTE设备的RXD端

UART1_RXD

35

I

从DTE设备TXD端接收数据

UART1_RTS

37

O

DTE请求发送数据给DCE

UART1_CTS

38

I

清除发送

UART1通常用来和模块进行AT指令通讯。UART1支持固定波特率和自适应波特率。自适应波特率支持范围9600bps到115200bps。

在默认情况下,模块的硬件流控是关闭的。当客户需要硬件流控时,管脚RTS,CTS必须连接到客户端,AT命令“AT+IFC=2,2”可以用来打开硬件流控。AT命令“AT+IFC=0,0”可以用来关闭流控。具体请参考《AirM2M无线模块AT命令手册》。

UART1的特点如下: • 包括数据线TXD和RXD,硬件流控控制线RTS和CTS。 • 8个数据位,无奇偶校验,一个停止位。 • 硬件流控默认关闭。 • 用以AT命令传送,数传等。 • 支持波特率如下:1200,2400,4800,9600,14400,19200,28800,38400,57600,115200,230400,460800,921600bps • AT指令版本默认情况下模块是自适应波特率(AT+IPR=0),在自适应波特率模式下,开机后初始化信息(开头是“RDY”)不会回发给主控机。在模块开机2-3秒后,可以给模块发送AT命令。主控机需首先发送“AT”字符给模块来训练主控机的波特率,此时模块会上报初始化信息,表明训练成功。用户可以发送一个“AT+IPR=x :&W”命令给模块(x是波特率,比如9600),此命令的作用是设置一个固定的波特率并保存,在完成这些配置之后,每次模块开机以后,会自动串口返回URC初始化信息(开头是“RDY”)。

为了更好的使用自适应波特率功能,以下的使用条件需要注意:

模块和上位机之间同步: 自适应波特率功能开启情况下,当模块上电,在发送“AT”字符前最好等待 2~3秒钟。当模块上报开机初始化信息,表明波特率训练成功,和上位机完成了同步。 在自适应波特率模式下,主控器如果需要开机信息,必须首先进行同步。否则开机初始化信息将不会上报。 自适应波特率操作配置: • 串口配置为8位数据位,无奇偶校验位,1位停止位(出厂配置) • 模块开机时只有字符串“AT”可以训练波特率。(“at”、“At”或者“aT”无法被识别) • 波特率训练成功后,可以识别大写、小写或大小写组合的AT命令。 • 自适应波特率模式下,如果模块开机没有先同步,如“RDY”,“+CFUN: 1”和“+CPIN: READY”这样的URC信息将不会上报。 • 不推荐在固定波特率模式时切换到自适应波特率模式。 • 在自适应波特率模式下,不推荐切换到软件多路复用模式。

UART2

UART2管脚定义

名称

管脚

IO

作用

UART2_TXD

4

O

发送数据到DTE设备的RXD端

UART2_RXD

3

I

从DTE设备TXD端接收数据

UART2 可以用来下载软件和射频校准,同时UART2 还用来和内部的蓝牙进行通讯,如果用到了蓝牙功能,则UART2 不可用作其他用途。

注意:UART2 在开机后会自动打印一段LOG,波特率921600,这段LOG不能通过修改软件来关闭,推荐优先使用UART3

UART2开机自动打印的Log如下: > RDA8910m Boot_ROM V1.0-17b887ec HW_CFG: 36 SW_CFG: 0 SE_CFG: 0 check flash img load complete! checking…… Security Disabled Check uImage Done Run …

UART3

名称

管脚

IO

作用

UART3_TXD

90

O

发送数据到DTE设备的RXD端

UART3_RXD

89

I

从DTE设备TXD端接收数据

UART3 是一个通用串口,可以用作外接GPS等外设。

HOST UART

名称

管脚

IO

作用

HOST_TXD

5

O

发送数据到DTE设备的RXD端

HOST_RXD

6

I

从DTE设备TXD端接收数据

HOST UART 用来软件调试时输出AP trace

ZSP UART

名称

管脚

IO

作用

ZSP_UART_TXD

7

O

发送数据到DTE设备的RXD端

ZSP UART 用来软件调试时输出CP trace

串口连接方式

串口的连接方式较为灵活,如下是常用的连接方式。 1. 三线制的串口请参考如下的连接方式: image1

  1. 带流控的串口连接请参考如下电路连接,此连接方式可提高大数据量传输的可靠性,防止数据丢失。 image2

串口电压转换

Air724UG模块的串口电平都是1.8V的,如果要和3.3V/5V 的MCU通信,必须要加电平转换电路:

电平转换电路如下: image3 V_GLOBAL_1V8是模块输出的I/O电平电压。VDD_MCU是客户端的I/O电平电压。D2 选低导通压降的肖特基二极管。

也可以通过外加电平转换芯片来实现电压转换。

AT版本相关控制指令

设置流控AT+IFC

流控简介 >对 模块与 DTE 之间可靠的通信而言, 流控是很重要的。 假使一次数据或传真呼叫中, 发送端的发送速度大于接收端的接收速度, 当接收缓存接近满的时候, 接收端应该有方法让发送端暂停发送, 直到它重新赶上。 这就是流控。

语法规则:

命令类型

语法

返回

设置指令

AT+IFC=,[< dte_by_dce>]

OK

查询指令

AT+IFC?

+IFC: , OK

测试指令

AT+IFC=?

+IFC: , OK

注意事项

模块缺省无流控。 如果需要硬件流量控制, 请输入”AT+IFC=2,2;&W”, 重启模块就一直生效了

参数定义:

参数

定义

取值

对取值的定义

TE 接收来自 TA 数据 时采用的流控方法

0

无流控

1

软件流控

2

硬件流控

TA 接收来自 TE 数据时采用的流控方法

0

无流控

1

软件流控

2

硬件流控

举例:

命 令 (→ )/返回(←)

实例

解释和说明

AT+IFC=?

查询< dce_by_dte>和< d te_by_dce>取值范围

+IFC: (0-2),(0-2) OK

查询结果

AT+IFC?

查询 当前的流量控制方式

+IFC: 2,2 OK

硬件流控

LUAT开发相关接口

相关的UART控制接口可以参考LUAT_API UART章节 相关示例,请参考:raw-latex:script_LuaTask_VX.X.X:raw-latex:demo:raw-latex:`\uart`

uart 与虚拟 AT 交互接口

###uart.setup() uart通讯

  • 语法

baud = uart.setup( id, baud, databits, parity, stopbits,[msgmode,txDoneReport] )

  • 参数

参数

释义

id

串口号,可选1,2,3

baud

波特率,可 选1200,2400,4800,9600,10400, 14400,19200,28800,38400,5760 0,115200,230400,460800,921600

databits

数据位,仅支持8

parity

校验位,可选uart.PAR_EVEN, uart.PAR_ODD或uart.PAR_NONE

stopbits

停止 位,可选uart.STOP_1,uart.STOP_2

msgmode

0 或者默认 - 消息通知,1 - 无消息上报需要用户主动轮询

txDoneReport

txd one消息上报开关。0:关闭,1:打开

  • 返回值 串口的真实波特率

###uart.write() 向串口写字符串或者整型数据

  • 语法 uart.write( id, data1, [data2], ..., [datan] )

  • 参数

参数

释义

id

串口号,可选1,2,3

data1

第一个字符串或8位整型数据

data2

第二个字符串或8位整型数据

datan(可选)

第n个字符串或8位整型数据

  • 返回值 无

###uart.getchar() 从串口读取单字符

  • 语法 str = uart.getchar( id )

  • 参数

参数

释义

id

串口号,可选1,2,3

-返回值

串口读出来的字符

###uart.read() 从串口读取字符串

  • 语法 str = uart.read( id, format)

  • 参数

参数

释义

id

串口号

格式化

*l:读取 到结束字符:raw-latex:`n或者阻塞发送 `*n:读取整型数据 *s:读取到空格字符数字,number类型:只读取number长度的数据

  • 返回值 串口读出到的数据

###uart.set_rs485_oe() - 语法

uart.set_rs485_oe(id, io[, level])

  • 参数

参数

释义

id

串口id

io

GPIO值 pio.Pxx

level

输出使能电平有效 值,默认1,配置为1时表示高电平发送,配置为0时表示低电平发送

  • 返回值

  • 例子

uart.setup(UART_ID,115200,8,uart.PAR_NONE,uart.STOP_1,nil,1) --必须先使用setup,并且最后一个参数是1(打开发送完成后的通知功能)
uart.set_rs485_oe(UART_ID, pio.P2_0) --仅4G 0013版本之后支持

uart.close()

关闭 uart 接口

  • 语法

uart.close(id)

  • 参数

参数

释义

id

串口号,可选1,2,3

  • 返回值 无

CSDK开发相关接口

相关的UART控制接口可以参考CSDK的iot_uart.c文件

iot_uart_open

打开uart - 语法

BOOL iot_uart_open(
                        E_AMOPENAT_UART_PORT port,
                        T_AMOPENAT_UART_PARAM *cfg
                   );
  • 参数

参数

释义

port

UART 编号

cfg

配置信息

  • 返回值

TRUE: 成功 FALSE: 失败

iot_uart_close

关闭uart - 语法

BOOL iot_uart_close(
                        E_AMOPENAT_UART_PORT port
                   );
  • 参数

参数

释义

port

UART 编号

  • 返回值

TRUE: 成功 FALSE: 失败

iot_uart_read

uart读取数据

  • 语法

UINT32 iot_uart_read(
                        E_AMOPENAT_UART_PORT port,
                        UINT8* buf,
                        UINT32 bufLen,
                        UINT32 timeoutMs
                   );
  • 参数

参数

释义

port

UART 编号

buf

写入数据地址

bufLen

写入数据长度

timeoutMs

读取超时 ms

  • 返回值

实际读取长度

iot_uart_write

uart发送数据 - 语法

UINT32 iot_uart_write(
                        E_AMOPENAT_UART_PORT port,
                        UINT8* buf,
                        UINT32 bufLen
                    );
  • 参数

参数

释义

port

UART 编号

buf

写入数据地址

bufLen

写入数据长度

  • 返回值

实际写入长度


相关资料以及购买链接

相关开发板购买链接 Air724UG开发板 Air724 开发板使用说明 相关软件资料下载

常见问题

https://doc.luatos.wiki/638/

1. 数据位是否支持7bit?

不支持,仅支持8bit ### 2. 为什么使用矩阵键盘以后串口3失效了? 串口3复用了keyout4和5,不能和矩阵键盘一起使用 ### 3. uart2和uart3,在Luat开发方式下,可以用来做数据通信吗? 可以,不过有如下几点注意事项: 1、在支持蓝牙功能的模块型号中,uart2已经被用做蓝牙数据通信,不能再做为通用串口数据通信使用 2、模块每次开机(无论是正常开机,还是异常重启),都会自动打印一段LOG,波特率921600,这段LOG不能通过修改软件来关闭,如果自己的代码设计可以过滤掉这部分log,可以使用uart2做通用串口数据通信使用;如果不能过滤,建议使用uart3

UART2开机自动打印的Log如下:

RDA8910m Boot_ROM V1.0-17b887ec HW_CFG: 36 SW_CFG: 0 SE_CFG: 0 check flash img load complete! checking…… Security Disabled Check uImage Done Run …