LOADING

加载过慢请开启缓存 浏览器默认开启

openharmony用ubuntu编写串口

openharmony用ubuntu编写串口

代码下载

第一部分:代码结构

软件部分目录结构

UART
├─ BUILD.gn
└─UART.c

我们打开文件
代码打开voltage_buttons_thread.c

hi3861 其中 UART 端口有 3 个,其中 UART0 用于调试,每个 GPIO 可复用成 UART 的端口如下:

   Pin	管脚名称	    复用信号
    2	GPIO_00	    UART1_TXD
    3	GPIO_01	    UART1_RXD
    4	GPIO_02	    UART1_RTS, UART1 的流控管脚,发送请求信号,输出
    5	GPIO_03     复用信号 0:UART0_LOG_TXD,数据发送, Debug 和下载串口接口
                    复用信号 1:UART1_CTS, UART1 的流控管脚,清除发送信号,输入

    6	GPIO_04	    UART0_LOG_RXD 数据接收, Debug 和下载串口接口
    17	GPIO_05	    UART1_RXD,数据接收口
    18	GPIO_06	    UART1_TXD,数据发送口
    19	GPIO_07     UART1_CTS,清除发送信号,通信串口
    20	GPIO_08     UART1_RTS,发送请求信号,通信串口
    27	GPIO_09	    UART2_RTS,发送请求信号,通信串口,输出信号
    28	GPIO_10	    UART2_CTS,发送清除信号,通信串口,输入信号
    29	GPIO_11	    UART2_TXD
    30	GPIO_12	    UART2_RXD
    31	GPIO_13	    复用信号 1:UART2_RTS
                    复用信号 2:UART0_LOG_TXD
    32	GPIO_14	    复用信号 1:UART2_CTS
                    复用信号 2:UART0_LOG_RXD

主要函数

头文件

#include <stdio.h>      // 标准输入输出
#include <unistd.h>     // POSIX标准接口

#include "ohos_init.h"  // 用于初始化服务(services)和功能(features)
#include "cmsis_os2.h"  // CMSIS-RTOS API V2

#include "iot_gpio.h"   // OpenHarmony API:IoT硬件设备操作接口-GPIO
#include "hi_io.h"      // 海思 Pegasus SDK:IoT硬件设备操作接口-IO
#include "hi_adc.h"     // 海思 Pegasus SDK:IoT硬件设备操作接口-ADC

函数1 串口初始化

hi_u32 hi_uart_init(hi_uart_idx id, const hi_uart_attribute *param, const hi_uart_extra_attr *extra_attr);
备注:还需要初始化串口tx为输出模式加串口模式,rx为输入模式加串口模式          

不清楚看openharmony用ubuntu编写GPIO

id:表示串口号

HI_UART_IDX_0,    /**< Physical port number 0.CNcomment:物理端口号0 CNend */
HI_UART_IDX_1,    /**< Physical port number 1.CNcomment:物理端口号1 CNend */
HI_UART_IDX_2,    /**< Physical port number 2.CNcomment:物理端口号2 CNend */
HI_UART_IDX_MAX   /**< Maximum physical port number, which cannot be used. CNcomment:物理端口号最大值,

*param:指定串口属性

这个为结构体

        .baud_rate =填波特率比如115200
        .data_bits = 数据位  HI_UART_DATA_BIT_5,HI_UART_DATA_BIT_6,HI_UART_DATA_BIT_7,HI_UART_DATA_BIT_8,
       .stop_bits = 停止位  HI_UART_STOP_BIT_1,HI_UART_STOP_BIT_2 
       .parity = 奇偶校验位   HI_UART_PARITY_NONE = 0, /**无校验CNend */ HI_UART_PARITY_ODD = 1,  /**校验位,奇校验CNend */ HI_UART_PARITY_EVEN = 2, /**偶校验CNend */

*extra_attr:表示高级功能配置

不常用一般直接填null,具体看文章末尾

返回值 成功0失败1

函数2 串口读取

hi_s32 hi_uart_read(hi_uart_idx id, hi_u8 *data, hi_u32 data_len);

id:表示串口号

HI_UART_IDX_0,    /**< Physical port number 0.CNcomment:物理端口号0 CNend */
HI_UART_IDX_1,    /**< Physical port number 1.CNcomment:物理端口号1 CNend */
HI_UART_IDX_2,    /**< Physical port number 2.CNcomment:物理端口号2 CNend */
HI_UART_IDX_MAX   /**< Maximum physical port number, which cannot be used. CNcomment:物理端口号最大值,

*data:读取的数据保存数据的指针

data_len:读取字节数的长度

返回值 成功大于0 失败-1

函数3 串口写

hi_s32 hi_uart_write(hi_uart_idx id, const hi_u8 *data, hi_u32 data_len);

id:表示串口号

看上方

*data:写入的数据保存数据的指针

data_len:写入字节数的长度

返回值 成功大于0 失败-1

函数4 关闭串口

hi_u32 hi_uart_deinit(hi_uart_idx id);

id:表示串口号

看上方

补充:
关于串口初始化高级功能

typedef struct {
    hi_uart_fifo_line tx_fifo_line;
    hi_uart_fifo_line rx_fifo_line;
    hi_uart_fifo_line flow_fifo_line;
    hi_uart_block_state tx_block;
    hi_uart_block_state rx_block;
    hi_u16 tx_buf_size;
    hi_u16 rx_buf_size;
    hi_uart_dma_state tx_use_dma;
    hi_uart_dma_state rx_use_dma;
} hi_uart_extra_attr;

1、tx_fifo_line、rx_fifo_line、flow_fifo_line

    HI_FIFO_LINE_ONE_EIGHT = 1,  /**< FIFO interruption limitation, FIFO LINE = 1/8full.
                                    CNcomment:FIFO中断门限,FIFO LINE = 1/8full CNend */
    HI_FIFO_LINE_ONE_QUARTER,    /**< FIFO interruption limitation, FIFO LINE = 1/4full.
                                    CNcomment:FIFO中断门限,FIFO LINE = 1/4full CNend */
    HI_FIFO_LINE_HALF,           /**< FIFO interruption limitation, FIFO LINE = 1/2full.
                                    CNcomment:FIFO中断门限,FIFO LINE = 1/2full CNend */
    HI_FIFO_LINE_THREE_QUARTERS, /**< FIFO interruption limitation, FIFO LINE = 3/4full.
                                    CNcomment:FIFO中断门限,FIFO LINE = 3/4full CNend */
    HI_FIFO_LINE_SEVEN_EIGHTS,   /**< FIFO interruption limitation, FIFO LINE = 7/8full.
                                    CNcomment:FIFO中断门限,FIFO LINE = 7/8full CNend */

2、tx_block和rx_block

HI_UART_BLOCK_STATE_NONE_BLOCK = 1, /**< block mode, none-block. CNcomment:UART阻塞模式,非阻塞传输 CNend */
HI_UART_BLOCK_STATE_BLOCK,          /**< block mode, block. CNcomment:UART阻塞模式,阻塞传输 CNend */

3、hi_u16 tx_buf_size;hi_u16 rx_buf_size;

设置缓冲区大小

4、tx_use_dma、rx_use_dma

HI_UART_NONE_DMA = 1, /**< None-DMA mode. CNcomment:DMA传输,不使用DMA CNend */
    HI_UART_USE_DMA,      /**< DMA mode. CNcomment:DMA传输,使用DMA CNend */