串口应用开发

Posted Bruceoxl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串口应用开发相关的知识,希望对你有一定的参考价值。

开发环境:

开发系统: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串口又打印出来。

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



欢迎访问我的网站

BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
BruceOu的知乎


欢迎订阅我的微信公众号

1.关注公众号[嵌入式实验楼]获取更多资讯

以上是关于串口应用开发的主要内容,如果未能解决你的问题,请参考以下文章

C#上位机专题06 - 串口助手开发(完善发送,支持中文,保存信息)

UART串口WiFi模块的工作原理及应用

can口和串口区别?

大彩串口屏Lua应用-CRC16校验

资产跟踪设备中OPL1200的串口配置

大彩串口屏-LUA-Modbus API应用说明