07 串口通讯
1 UART介绍
关于UART通信的基本概念,请参考:https://zhuanlan.zhihu.com/p/657771076 . Rockchip UART (Universal Asynchronous Receiver/Transmitter) 基于16550A串⼝标准,完整模块⽀持以下功能:
- 支持5、 6、 7、 8 bits数据位。
- 支持1、 1.5、 2 bits停⽌位。
- 支持奇校验和偶校验,不⽀持mark校验和space校验。
- 支持接收FIFO和发送FIFO, ⼀般为32字节或者64字节。
- 支持最⾼4M波特率,实际⽀持波特率需要芯⽚时钟分频策略配合。
- 支持中断传输模式和DMA传输模式。
- 支持硬件⾃动流控, RTS+CTS。
2 UART板卡接口

3 UART使用---命令行方式
3.1 设备树解析
提示
下文的文件路径:out/kernel/src_tmp/linux-5.10/arch/arm64/boot/dts/rockchip/需要先编译码源。
基础定义层(rk3568.dtsi
):
uart3: serial@fe670000 {
compatible = "rockchip,rk3568-uart", "snps,dw-apb-uart";
reg = <0x0 0xfe670000 0x0 0x100>;
interrupts = <GIC_SPI 119 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cru SCLK_UART3>, <&cru PCLK_UART3>;
clock-names = "baudclk", "apb_pclk";
reg-shift = <2>;
reg-io-width = <4>;
dmas = <&dmac0 6>, <&dmac0 7>;
pinctrl-names = "default";
pinctrl-0 = <&uart3m0_xfer>;
status = "disabled";
};
我们对一些基本属性进行解析:
compatible
: 指定兼容性,支持RK3568 UART和标准DW APB UARTreg
: 寄存器地址范围(0xfe670000-0xfe6700ff)interrupts
: 中断号119,高电平触发clocks
: 波特率时钟(SCLK_UART3)和APB时钟(PCLK_UART3)dmas
: DMA通道6(TX)和7(RX)pinctrl-0
: 默认使用uart3m0_xfer引脚组status
: 默认禁用状态
引脚配置层(rk3568-pinctrl.dtsi
),其中UART3提供2种引脚配置模式:
uart3m0_xfer: uart3m0-xfer {
rockchip,pins =
/* uart3_rxm0 */
<1 RK_PA0 2 &pcfg_pull_up>,
/* uart3_txm0 */
<1 RK_PA1 2 &pcfg_pull_up>;
};
uart3m1_xfer: uart3m1-xfer {
rockchip,pins =
/* uart3_rxm1 */
<3 RK_PC0 4 &pcfg_pull_up>,
/* uart3_txm1 */
<3 RK_PB7 4 &pcfg_pull_up>;
};
uart3m0_xfer
: 引脚组1,使用PA0作为RX,PA1作为TXuart3m1_xfer
: 引脚组2,使用PC0作为RX,PB7作为TX
板级配置层( rk3568-toybrick-x0.dtsi
)
&uart3 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart3m1_xfer>;
};
&uart3
: 引用基础定义中的uart3节点status = "okay"
: 使能UART3控制器pinctrl-0
: 选择M1模式引脚(GPIO3_C0/GPIO3_B7)
3.2 应用层测试UART的方法
在过去进行单片机开发调试时,我们经常用到的是使用沁恒电子的CH340系列的USB 转串口模块,此外还有常见的FT232RL USB转串口芯片, 本次测试使用的是搭载FT232RL芯片的USB转串口模块,两者使用上没有任何区别,实际使用时,我们只需要把模块的TX RX 与 开发板的 RX TX 进行对接即可

在本实验中,我们依然选择此方式通过USB与板子进行UART通信。
和之前一样,驱动文件放置在 /dev 目录下 通过指令
ls /dev/tty*
即可查看到所有的终端设备如下:
其中tty前缀 为虚拟终端,ttyS 前缀为是本节需要研究的串口终端.
(ttyS3为UART3,ttyS8为UART8(该串口被蓝牙模块占用))
Busybox 是一个集成了上百个常用 Linux 命令的单一可执行文件,其中的stty是set tty 的缩写,是一个专门用于改变并打印终端行设置的命令。 常用指令如下:
查看端口
busybox stty -F /dev/ttySx //ttyS为具体查看的端口
设置波特率
busybox stty -F /dev/ttyS3 baudrate
设置波特率为9600,8位数据为,一位停止位,无校验位
busybox stty -F /dev/ttyS3 9600 cs8 -cstopb -parenb
禁用硬件流控
busybox stty -F /dev/ttyS3 -crtscts
microcom 是 BusyBox 的一个组件,核心功能就是打开一个指定的串口设备,实现数据的接收
以波特率115200 运行串口
microcom -s 115200 /dev/ttyS3
3.2 具体功能演示
使用ssty工具查询开发板串口UART3参数
busybox stty -F /dev/ttyS3

使用ssty工具修改串口波特率为115200,其中ispeed为输入速率,ospeed为输出速率
busybox stty -F /dev/ttyS3 ispeed 115200 ospeed 115200

(注意:每一次设备开机需要重新设置一遍波特率,重启默认会重置波特率为9600)
备注
串口工具下载地址和路径: https://pan.baidu.com/s/1ZUn2BNg-Sb6M-fWhDqAFMw?pwd=smcc 提取码:smcc ShimetaPi开源鸿蒙资料>02-软件工具>Rockchip>OpenHarmony>串口工具>sscom5.13.1.exe
按上述配置配置好串口调试助手后,在板卡端使用如下命令测试串口发送数据是否成功:
#在板卡上的终端执行如下指令
#使用echo命令向终端设备文件写入字符串"Hello!"、"OpenHarmony!"
echo Hello! > /dev/ttyS3
echo "OpenHarmony" > /dev/ttyS3
#PC上的串口调试助手会接收到内容

PC段接收成功接收到数据如图所示,板卡发送数据正常。 下面对通过PC端发送数据,测试板卡的串口能否正常接收数据。 使用上文中提到的microcom工具, 在板卡上的终端执行如下指令,连接到串口设备 ttyS3 并进行双向通信,此时microcom命令会等待串口数据并把接收的数据显示在终端
microcom -s 115200 /dev/ttyS3

板卡终端成功显示接收的数据。 PC端发送数据,板卡成功接收到数据,板卡接收数据正常。