登录/注册

HI3861 UART外设

更多

以下是关于海思 HI3861 芯片 UART 外设 的中文详解,涵盖关键特性、配置步骤和代码示例(基于鸿蒙系统开发环境):


一、HI3861 UART 基础特性

  1. 通道数量
    HI3861 提供 2个独立 UART 通道

    • UART0:默认用于系统调试日志输出(建议保留)
    • UART1:可用于用户应用程序开发
  2. 关键参数

    • 支持波特率范围:1200bps ~ 2Mbps
    • 数据位:5/6/7/8 bit(常用 8 bit
    • 停止位:1/2 bit(常用 1 bit
    • 校验位:None/Even/Odd
    • 支持 FIFO 中断收发(深度 32 字节)
    • 最高通信频率:40MHz(需配置时钟源)

二、硬件引脚映射

UART通道 TX 引脚 RX 引脚
UART0 GPIO5 GPIO6
UART1 GPIO7 GPIO8

⚠️ 注意:使用前需通过 IoSetFunc() 将引脚复用为 UART 功能。


三、配置流程(鸿蒙系统 API)

1. 引脚复用配置

#include "hi_io.h"
#include "hi_uart.h"

// 配置 UART1 引脚(GPIO7=TX, GPIO8=RX)
hi_void uart1_init_pin(hi_void) {
    // 设置 GPIO7 复用为 UART1_TX
    hi_io_set_func(HI_IO_NAME_GPIO_7, HI_IO_FUNC_GPIO_7_UART1_TXD);
    // 设置 GPIO8 复用为 UART1_RX
    hi_io_set_func(HI_IO_NAME_GPIO_8, HI_IO_FUNC_GPIO_8_UART1_RXD);
}

2. UART 初始化

hi_u32 uart1_init(hi_void) {
    hi_uart_attribute uart_attr = {
        .baud_rate = 115200,     // 波特率
        .data_bits = 8,          // 数据位
        .stop_bits = 1,          // 停止位
        .parity = 0,             // 校验位(0:None, 1:Odd, 2:Even)
    };

    // 初始化 UART1
    hi_u32 ret = hi_uart_init(HI_UART_IDX_1, &uart_attr, HI_NULL);
    if (ret != HI_ERR_SUCCESS) {
        printf("UART init failed: 0x%X\n", ret);
        return ret;
    }
    return HI_ERR_SUCCESS;
}

3. 数据收发操作

// 发送数据示例
hi_void uart1_send_data(const char* data, hi_u16 len) {
    hi_uart_write(HI_UART_IDX_1, (hi_u8*)data, len);
}

// 接收数据(中断回调模式)
static hi_void uart1_rx_callback(hi_u16 len) {
    hi_u8 buf[128] = {0};
    hi_uart_read(HI_UART_IDX_1, buf, &len);
    printf("Received: %s\n", buf);
}

// 注册接收回调函数
hi_uart_register_recv_callback(HI_UART_IDX_1, uart1_rx_callback);

四、调试要点

  1. 波特率容差
    HI3861 对波特率误差敏感,建议使用精准外部晶振,误差 < 2%。

  2. 电压匹配
    确保通信双方电平兼容:

    • HI3861 为 1.8V TTL,连接 3.3V 设备需加电平转换芯片(如 TXS0108E)
  3. 抗干扰设计

    • 长距离通信时增加 120Ω 终端电阻
    • PCB 走线避免穿越高频区域
  4. 常见错误码 错误码 原因
    HI_ERR_IO_TIMEOUT 操作超时
    HI_ERR_DEVICE_BUSY FIFO 溢出/忙状态

五、进阶功能

  1. DMA 传输
    HI3861 支持 UART DMA 模式,大幅降低 CPU 开销:

    hi_uart_adv_param dma_cfg = {
       .dma_en = HI_TRUE,        // 启用 DMA
       .dma_threshold = 32       // FIFO 阈值
    };
    hi_uart_control(HI_UART_IDX_1, HI_UART_CTRL_SET_ADV_PARAM, &dma_cfg);
  2. 硬件流控
    启用 CTS/RTS 流控(需占用额外 GPIO):

    // 配置 CTS/RTS 引脚
    hi_io_set_func(HI_IO_NAME_GPIO_9, HI_IO_FUNC_GPIO_9_UART1_CTS);
    hi_io_set_func(HI_IO_NAME_GPIO_10, HI_IO_FUNC_GPIO_10_UART1_RTS);
    
    // 在初始化属性中开启流控
    uart_attr.flow_ctrl = 1;     // 1:使能硬件流控

六、典型应用场景

  1. 设备日志输出(UART0)

    // 重定向 printf 到 UART0
    hi_uart_attribute log_attr = {.baud_rate = 115200, ...};
    hi_uart_init(HI_UART_IDX_0, &log_attr, HI_NULL);
    __putchar(char c) {
       hi_uart_write(HI_UART_IDX_0, (uint8_t*)&c, 1);
    }
  2. Modbus 通信(UART1 + RS485)

    // 控制 RS485 方向引脚(例如 GPIO11)
    hi_io_set_func(HI_IO_NAME_GPIO_11, HI_IO_FUNC_GPIO_11_GPIO);
    hi_gpio_set_dir(HI_GPIO_IDX_11, HI_GPIO_DIR_OUT);
    
    // 发送前使能输出
    hi_gpio_set_output_val(HI_GPIO_IDX_11, HI_GPIO_VALUE1);
    uart1_send_data(modbus_frame, len);
    hi_gpio_set_output_val(HI_GPIO_IDX_11, HI_GPIO_VALUE0);  // 恢复接收

如遇到特定问题(如数据乱码、接收丢包),建议按照以下顺序排查:

  1. 示波器测量实际波特率与波形质量
  2. 检查 PCB 接地是否完整
  3. 降低波特率至 9600 测试基础功能
  4. 启用误码率统计功能(hi_uart_get_erro_count()

鸿蒙OpenHarmony【LED外设控制】 (基于Hi3861开发板)

OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力,包含I2C、I2S、ADC、UART、SPI、SDIO、GPI

2024-04-23 21:57:27

中文编程鸿蒙Hi3861开发基础案例之-02LED灯控制

中文编程鸿蒙Hi3861开发控制LED灯

2023-05-11 09:54:01

中文编程鸿蒙Hi3861开发基础案例之-01创建新工程

中文编程鸿蒙Hi3861开发创建新工程

2023-05-11 09:53:32

Hi3861V100/Hi3861LV100 SDK开发指南

Hi3861V100/Hi3861LV100 SDK 开发指南

资料下载 向着远方出发 2022-05-31 16:30:27

Hi3861V100/Hi3861LV100低功耗开发指南

Hi3861V100/Hi3861LV100 低功耗 开发指南

资料下载 向着远方出发 2022-05-31 16:18:14

HarmonyOS Hi3861 GPIO操作 点灯和按键实验

Hi3861也提供了相关得GPIO口操作,先看最简单得LED灯闪烁操作。另外GPIO口还可以作为输入,然后使用中断,示例代码如下:这段示例代码用的开发板上面的user按键。

资料下载 o_dream 2020-10-21 17:12:39

HarmonyOS Hi3861 WiFi操作 热点链接

之前我们使用Hi3861的时候,是使用AT指令连接到WiFi热点的。但是很多时候,我们需要实现开机后自动连接到某个热点,光靠AT指令不行。Hi3861为我们提供了WiFi操作的相关API,方便我们编写代码,实现热点连

资料下载 o_dream 2020-10-21 16:44:14

HarmonyOS Hi3861开发套件-编程速查

针对Hi3861开发套件整理的编程速查框图,有需要的小伙伴可以自行下载查看。

资料下载 o_dream 2020-10-19 16:54:12

有没有Hi3861能适配的RFID模块

手头有多个Hi3861模块,想使用其和RFID模块通信,目前想和UHF-R200通过Uart串口通信,UHF-R20模块的波特率是115200固定不能设置的,我使用

2023-03-21 21:50:25

Hi3861编译烧录更快捷

Windows环境开发Hi3861,显著提升编译、烧录效率,同时还带来了更多实用的功能及模板,为广大开发者朋友带来更加高效、便捷的开发体验。接下来,让我们来看看吧! 纯Windows环境开发Hi3861,编译烧录

2023-02-11 13:25:04

Hi3861编译烧录更快捷

=1669428623989 更多实用的功能及模板,开发效率轻松翻倍 DevEco Device Tool 3.1 Beta2除了支持纯Windows开发Hi3861之外,还支持生成专有外设驱动模板、支持HCS¹文件

2023-02-10 10:32:34

基于鸿蒙系统+Hi3861的WiFi小车开发

本文简单介绍鸿蒙系统 + Hi3861 的WiFi小车开发,适用于开发润和Hi3861开发板的小伙伴们。

2022-03-03 09:31:42

Hi3861其他驱动的开发示例

摘要:本文简单介绍Hi3861其他驱动的开发示例、包括PWM、SPI、SDIO等。

2022-03-02 18:04:36

基于鸿蒙系统+Hi3861的WiFi小车详解

我们得有一套WiFi小车套件,其实也是Hi3861加上电机、循迹模块、超声波等模块。

2020-11-01 09:41:36

Hi3861开发板介绍

OpenHarmony,并配套提供开放、易用的开发和调试运行环境。图 1 Hi3861 WLAN模组外观图另外,Hi3861 WLAN模组还可以通过与Hi38

2020-09-21 15:15:24
7天热门专题 换一换
相关标签