一、简介
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。
本文基于瑞芯微RK2206芯片 + OpenHarmony系统,通过uart控制实现PC和开发板的互相通信功能。
二、硬件电路设计
模块整体硬件实物图如下图所示。电路比较简单,这边不对电路进行说明。
图1 电路实物图图
三、程序设计
UART控制主要分为UART初始化和UART收发。
1、UART初始化
这部分代码为uart初始化的代码。首先用 LzUartDeinit() 函数将串口释放掉;其次用PinctrlSet()将GPIO0_PB6复用为UART0_RX_M0,GPIO0_PB7复用为UART0_TX_M0。最后调用 LzUartInit()函数初始化uart。源代码如下所示:
- 1./* 释放UART设备 */
- 2.LzUartDeinit(UART_ID);
- 3.
- 4./* 配置UART */
- 5.attr.baudRate = 115200;
- 6.attr.dataBits = UART_DATA_BIT_8;
- 7.attr.pad = FLOW_CTRL_NONE;
- 8.attr.parity = UART_PARITY_NONE;
- 9.attr.rxBlock = UART_BLOCK_STATE_NONE_BLOCK;
- 10.attr.stopBits = UART_STOP_BIT_1;
- 11.attr.txBlock = UART_BLOCK_STATE_NONE_BLOCK;
- 12.
- 13./* TX和RX引脚配置 */
- 14.PinctrlSet(GPIO0_PB6, MUX_FUNC2, PULL_KEEP, DRIVE_LEVEL2);
- 15.PinctrlSet(GPIO0_PB7, MUX_FUNC2, PULL_KEEP, DRIVE_LEVEL2);
- 16.
- 17./* 初始化UART */
- 18.ret = LzUartInit(UART_ID, &attr);
- 19.if (ret != LZ_HARDWARE_SUCCESS)
- 20.{
- 21. printf("%s, %d: LzUartInit(%d) failed!n", __FILE__, __LINE__, ret);
- 22. return;
- 23.}
复制代码
2、UART发送
具体uart写操作如下:
- 1./* 控制UART发送字符串 */
- 2.ret = LzUartWrite(UART_ID, str, strlen(str));
- 3.if (ret != LZ_HARDWARE_SUCCESS)
- 4.{
- 5. printf("%s, %d: LzUartWrite(%d) failed!n", __FILE__, __LINE__, ret);
- 6. return;
- 7.}
复制代码
3、UART接收
具体uart读操作如下:
- 8./* 控制UART发送字符串 */
- 9.ret = LzUartRead(UART_ID, str, 10);
- 10.if (ret != LZ_HARDWARE_SUCCESS)
- 11.{
- 12. printf("%s, %d: LzUartRead(%d) failed!n", __FILE__, __LINE__, ret);
- 13. return;
- 14.}
复制代码
四、编译过程
1、搭建和下载源代码
我已将OpenHarmony源代码上传到Gitee社区中,大家可以根据以下网址下载。
https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk2206-openharmony3.0lts
本文使用的案例网址如下:
https://gitee.com/Lockzhiner-Ele ... 206/samples/b6_uart
2、打开sdk下面路径的文件
/vendor/lockzhiner/rk2206/samples/b6_uart/uart_example.c
3、修改编译脚本
修改 vendor/lockzhiner/rk2206/sample 路径下 BUILD.gn 文件,指定 uart_example 参与编译。
"./b6_uart:uart_example",
修改 device/lockzhiner/rk2206/sdk_liteos 路径下 Makefile 文件,添加 -luart_example 参与编译。
hardware_LIBS = -lhal_iothardware -lhardware -luart_example
4、编译固件
- <div>hb set -root .</div><div>hb set</div><div>hb build -f</div>
复制代码
5、烧写固件
请参考Gitee网址的说明手册(“烧录打印”章节):
https://gitee.com/Lockzhiner-Ele ... ckchip/README_zh.md
五、实验结果
程序编译烧写到开发板后,按下开发板的RESET按键,通过串口软件查看日志如下:
- HelloWorld!
- HelloWorld!
- HelloWorld!
- HelloWorld!
- ...
复制代码