HI3861 UART外设
以下是关于海思 HI3861 芯片 UART 外设 的中文详解,涵盖关键特性、配置步骤和代码示例(基于鸿蒙系统开发环境):
一、HI3861 UART 基础特性
-
通道数量
HI3861 提供 2个独立 UART 通道:- UART0:默认用于系统调试日志输出(建议保留)
- UART1:可用于用户应用程序开发
-
关键参数
- 支持波特率范围: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);
四、调试要点
-
波特率容差
HI3861 对波特率误差敏感,建议使用精准外部晶振,误差 < 2%。 -
电压匹配
确保通信双方电平兼容:- HI3861 为 1.8V TTL,连接 3.3V 设备需加电平转换芯片(如 TXS0108E)
-
抗干扰设计
- 长距离通信时增加 120Ω 终端电阻
- PCB 走线避免穿越高频区域
-
常见错误码 错误码 原因 HI_ERR_IO_TIMEOUT操作超时 HI_ERR_DEVICE_BUSYFIFO 溢出/忙状态
五、进阶功能
-
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); -
硬件流控
启用 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:使能硬件流控
六、典型应用场景
-
设备日志输出(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); } -
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); // 恢复接收
如遇到特定问题(如数据乱码、接收丢包),建议按照以下顺序排查:
- 示波器测量实际波特率与波形质量
- 检查 PCB 接地是否完整
- 降低波特率至 9600 测试基础功能
- 启用误码率统计功能(
hi_uart_get_erro_count())
鸿蒙OpenHarmony【LED外设控制】 (基于Hi3861开发板)
OpenHarmony WLAN模组基于Hi3861平台提供了丰富的外设操作能力,包含I2C、I2S、ADC、UART、SPI、SDIO、GPI
2024-04-23 21:57:27
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
有没有Hi3861能适配的RFID模块
手头有多个Hi3861模块,想使用其和RFID模块通信,目前想和UHF-R200通过Uart串口通信,UHF-R20模块的波特率是115200固定不能设置的,我使用
Hi3861编译烧录更快捷
Windows环境开发Hi3861,显著提升编译、烧录效率,同时还带来了更多实用的功能及模板,为广大开发者朋友带来更加高效、便捷的开发体验。接下来,让我们来看看吧! 纯Windows环境开发Hi3861,编译烧录
2023-02-11 13:25:04
Hi3861编译烧录更快捷
=1669428623989 更多实用的功能及模板,开发效率轻松翻倍 DevEco Device Tool 3.1 Beta2除了支持纯Windows开发Hi3861之外,还支持生成专有外设驱动模板、支持HCS¹文件
Hi3861开发板介绍
OpenHarmony,并配套提供开放、易用的开发和调试运行环境。图 1 Hi3861 WLAN模组外观图另外,Hi3861 WLAN模组还可以通过与Hi38
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览