串口¶
作者:楼康华,朱天华
概述¶
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
串口电压转换¶
Air724UG模块的串口电平都是1.8V的,如果要和3.3V/5V 的MCU通信,必须要加电平转换电路:
电平转换电路如下: 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)
参数
返回值 串口读出到的数据
###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版本之后支持
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://luatdoc.papapoi.com/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 …