《HarmonyOS开发 – 小凌派-RK2206开发笔记》第4章 串口应用开发

网友投稿 277 2022-09-27

《HarmonyOS开发 – 小凌派-RK2206开发笔记》第4章 串口应用开发

开发环境:

开发系统:Ubuntu 20.04 开发板:小凌派-RK2206开发板 OpenHarmony版本:3.0.0-LTS

4.1串口简介

串口是一个泛称,UART、TTL、RS232、RS485、RS422都可以说是串口。一般的MCU内部集成了UART接口,即通用异步收发器(Universal Asynchronous Receiver/Transmitter);MCU的串口一般为遵循TTL电平的TTL串口;RS232、RS485、RS485则通常作为设备的外设串口使用。当然啦,要想了解更多串口的信息,请自行查阅相关资料吧,RK2206开发板板载2路串口,UART1用做了debug接口,UART0可以供用户使用,其接口如下:

本文将使用UART0来讲解。

4.2串口驱动介绍

RK2206硬件相关的驱动写好了的,是通过静态库的方式给出的,在device/rockchip/hardware目录下,库的名字是libhardware.a。

串口相关函数的头文件是在device/rockchip/rk2206/adapter/include/lz_hardware/目录下的uart.h文件中。

串口的使用需要了解UartAttribute结构体,这个结构用于配置串口的各个参数。

/** * @brief Defines basic attributes of a UART port. * * @since 2.2 * @version 2.2 */typedef struct { /** Baud rate */ unsigned int baudRate; //波特率 /** Data bits */ UartIdxDataBit dataBits; //数据长度 /** Stop bit */ UartStopBit stopBits; //停止位 /** Parity */ UartParity parity; //校验位 /** Rx block state */ UartBlockState rxBlock; /** Tx block state */ UartBlockState txBlock; /** Padding bit */ unsigned char pad;} UartAttribute;

主要有以下API:

unsigned int LzUartInit(unsigned int id, const UartAttribute *param);//串口初始化unsigned int LzUartRead(unsigned int id, unsigned char *data, unsigned int dataLen);//读定长字符unsigned int LzUartWrite(unsigned int id, const unsigned char *data, unsigned int dataLen);//写定长字符unsigned int LzUartPutc(unsigned int id, char c);//读取当字符unsigned int LzUartDeinit(unsigned int id);//释放串口

4.3串口实例

RK2206开发板的仓库中已经有串口的例子,简单配置下就可以使用了。

修改 vendor/lockzhiner/rk2206/samples 路径下 BUILD.gn 文件,指定 uart_example 参与编译。

"./b6_uart:uart_example",

修改 device/rockchip/rk2206/sdk_liteos路径下 Makefile 文件,添加 -luart_example 参与编译。

hardware_LIBS = -lhal_iothardware -lhardware -luart_example

值得注意的是,官方的文档有误,请根据实际情况修改信息。

然后就可以使用串口了。

官方的例子默认是使用的串口0,笔者这里稍微修改uart_example.c的uart_process()函数。

void uart_process(void){ unsigned int ret; UartAttribute attr; unsigned char txStr[] = "HelloWorld!\n"; unsigned char rxStr[10]; LzUartDeinit(UART_ID); attr.baudRate = 115200; attr.dataBits = UART_DATA_BIT_8; attr.pad = FLOW_CTRL_NONE; attr.parity = UART_PARITY_NONE; attr.rxBlock = UART_BLOCK_STATE_NONE_BLOCK; attr.stopBits = UART_STOP_BIT_1; attr.txBlock = UART_BLOCK_STATE_NONE_BLOCK; PinctrlSet(GPIO0_PB6, MUX_FUNC2, PULL_KEEP, DRIVE_LEVEL2); PinctrlSet(GPIO0_PB7, MUX_FUNC2, PULL_KEEP, DRIVE_LEVEL2); ret = LzUartInit(UART_ID, &attr); if (ret != LZ_HARDWARE_SUCCESS) { printf("%s, %d: LzUartInit(%d) failed!\n", __FILE__, __LINE__, ret); return; } memset(rxStr, 0, sizeof(rxStr)); while (1) { printf("write: %s \n",txStr); ret = LzUartWrite(UART_ID, txStr, strlen(txStr)); if (ret != LZ_HARDWARE_SUCCESS) { printf("%s, %d: LzUartInit(%d) failed!\n", __FILE__, __LINE__, ret); return; } ret = LzUartRead(UART_ID, rxStr, 10); printf("Read: %s\n",rxStr); LOS_Msleep(2000); } return;}

接下来根据前面的文件编译,下载固件。

Debug串口信息如下:

UART0串口信息如下:

当我们使用UART0发送信息,UART0和UART1打印信息如下:

UART0将接收到的信息通过debug串口又打印出来。

好了,串口的使用就到这里了。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Servlet文件的上传与下载详解
下一篇:元宇宙用户已准备就绪,但技术瓶颈仍制约其真正“落地”
相关文章

 发表评论

暂时没有评论,来抢沙发吧~