HarmonyOS系统中内核实现UART串口通信方法

简介: 大家好,今天主要聊一聊,如何使用鸿蒙系统实现UART数据的读写方法。

c9d7b515f3374676b8a3e7a750204187.png

第一:串口通信基本原理    

1、同步通信(SYNC-synchronous data communication)

 同步通信有时钟信号来做同步,在约定的通信速率下,发送端和接收端的时钟信号频率和相位始终保持一致(同步),这样就保证了通信双方在发送和接收时具有完全一致的定时关系;


同步串行通信SPI(Serial Peripheral Interface串行外围设备接口简称),SPI总线系统是一种同步串行的外设接口,它可以是MCU与各种外围设备以串行方式进行通信以交换信息。


2、异步通信(ASYNC-asynchronous data communication)


    以字符为单位进行传输,字符之间没有固定的时间间隔要求,而每个字符中的各位则固定的时间传送。异步通信中,收发双方去的同步是通过在字符格式中设置起始位和停止位的方式来实现的。具体来说就是,在一个有效字符正式发送之前,发送器先发送一个起始位,然后发送有效字符位,在字符结束时再发送一个停止位,起始位和停止位构成一帧。停止位和下一个起始位之间是不定长的空闲位,并且规定起始位为低电平(逻辑值为0),停止位和空闲位都是高电平(逻辑值为1),这样就保证了起始位开始处一定会有一个下跳沿,由此就可以标志一个字符传输的起始;根据起始位和停止位就很容易的实现了字符的界定和同步。


异步串行通信UART(无时钟信号)(UniverSal Asynchronous Receiver/Transmitter),即通用异步接收/发送;


UART包含TTL电平和RS232电平,TTL电平是3.3V的,RS232是负逻辑电平,它定义+3 ~ +15为低电平,而-15 ~ -3为高电平,通常PC机串口与单片机串口通信需要电平转换芯片,例如:MAX232;


显然,采用异步通信时,发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,可以互不同步

第二:鸿蒙UART API分析

UartInit()

unsigned int UartInit (WifiIotUartIdx id, const WifiIotUartAttribute * param, const WifiIotUartExtraAttr * extraAttr )

功能描述:

配置一个UART设备。 参数:

名字 描述
id UART端口号.
param 表示基本UART属性
extraAttr 表示扩展UART属性

UartWrite()

int UartWrite (WifiIotUartIdx id, const unsigned char * data, unsigned int dataLen )

功能描述:将数据写入UART设备

参数:

名字 描述
id UART端口号.
data 表示指向要写入数据的起始地址的指针
dataLen 表示读取数据的长度

UartRead()

int UartRead (WifiIotUartIdx id, unsigned char * data, unsigned int dataLen )

功能描述:

从UART设备读取数据。

参数:

名字 描述
id UART端口号.
data 表示指向要读取数据的起始地址的指针
dataLen 表示读取数据的长度

第三:硬件设计

 本实例使用鸿蒙开发板的UART作为测试,如原理图所示第 18 和 19 脚分别为 TXD 和 RXD ,连接了主控芯片的 GPIO_6 和 GPIO_5 ,所以在编写软件的时候需要将 GPIO_6 和 GPIO_5 分别复用为 TXD 和 RXD 。

2063a8bed6de4271812706f0e7e8ff8e.png

第四:软件设计

这部分代码为UART初始化的代码,首先要在 uart_attr 结构体这配置波特率、数据位、停止位、奇偶检验位,然后通过 UartInit() 函数对串口1进行配置。

WifiIotUartAttribute uart_attr = {
    .baudRate = 9600, /* baud_rate: 9600 */
    .dataBits = 8,      /* data_bits: 8bits */
    .stopBits = 1,
    .parity = 0,
};
/* Initialize uart driver */
ret = UartInit(WIFI_IOT_UART_IDX_1, &uart_attr, NULL);
if (ret != WIFI_IOT_SUCCESS) {
    printf("Failed to init uart! Err code = %d\n", ret);
    return;
}

这部分的代码主要实现通过 UartWrite() 函数在串口1发送一串数据,然后通过 UartRead() 函数将数据都回来,并通过 debug 串口打印出来。

UartWrite(WIFI_IOT_UART_IDX_1, (unsigned char *)data, strlen(data));    // 通过串口1发送数据
UartRead(WIFI_IOT_UART_IDX_1,uart_buff_ptr,UART_BUFF_SIZE);             // 通过串口1接收数据
printf("%s",uart_buff_ptr);

第五:编译调试

  修改BUILD.gn

  修改 applications\BearPi\BearPi-HM_Nano\sample 路径下 BUILD.gn 文件,指定 uart_example 参与编译。

#"B1_basic_led_blink:led_example",
#"B2_basic_button:button_example",
#"B3_basic_pwm_led:pwm_example",
#"B4_basic_adc:adc_example",
#"B5_basic_i2c_nfc:i2c_example",
"B6_basic_uart:uart_example",

第六:运行结果

示例代码编译烧录代码后,按下开发板的RESET按键, 将开发板上E53接口的UART_TX和UART_RX用杜邦线短接 通过串口助手查看日志,串口1实现自发自收。

=======================================
*************UART_example**************
=======================================
Uart1 read data:Hello, BearPi!
=======================================
*************UART_example**************
=======================================
Uart1 read data:Hello, BearPi!
目录
相关文章
|
8天前
|
移动开发 JavaScript 前端开发
HarmonyOS鸿蒙应用开发——探索原生与H5通信框架DSBridge
HarmonyOS版DSBridge是一个桥梁库,允许鸿蒙原生环境与JavaScript交互。它兼容Android和iOS的第三方DSBridge核心功能,支持同步和异步调用、命名空间API管理、进度回调及页面关闭监听等功能。主要特性包括适配鸿蒙NEXT版本、支持串行异步并发任务、兼容DSBridge 2.0与3.0版本JS脚本,并提供类形式集中管理API及自定义页面组件注册。源码仓库:HarmonyOS版 - DSBridge-HarmonyOS。安装命令为`ohpm install @hzw/ohos-dsbridge`。通过该库,开发者可以方便地在鸿蒙系统中实现原生与JS的高效交互。
73 1
|
6天前
|
Android开发 iOS开发
鸿蒙开发:适配系统深浅色模式
无论是Android还是iOS,在系统设置中,都有着深色和浅色两种外观模式,同样,鸿蒙系统中也存在这样的外观切换,如何让自己的应用,跟随着系统的模式进行动态切换呢?目前系统给我们提供了两种方式可以实现,一种是资源形式,一种是动态的代码形式。
57 15
鸿蒙开发:适配系统深浅色模式
|
7天前
|
安全 API 数据安全/隐私保护
自学记录HarmonyOS Next DRM API 13:构建安全的数字内容保护系统
在完成HarmonyOS Camera API开发后,我深入研究了数字版权管理(DRM)技术。最新DRM API 13提供了强大的工具,用于保护数字内容的安全传输和使用。通过学习该API的核心功能,如获取许可证、解密内容和管理权限,我实现了一个简单的数字视频保护系统。该系统包括初始化DRM模块、获取许可证、解密视频并播放。此外,我还配置了开发环境并实现了界面布局。未来,随着数字版权保护需求的增加,DRM技术将更加重要。如果你对这一领域感兴趣,欢迎一起探索和进步。
63 18
|
3天前
|
开发框架 物联网 API
HarmonyOS开发:串行通信开发详解
在电子设备和智能系统的设计中,数据通信是连接各个组件和设备的核心,串行通信作为一种基础且广泛应用的数据传输方式,因其简单、高效和成本效益高而被广泛采用。HarmonyOS作为一个全场景智能终端操作系统,不仅支持多种设备和场景,还提供了强大的开发框架和API,使得开发者能够轻松实现串行通信功能。随着技术的不断进步,串行通信技术也在不断发展。在HarmonyOS中,串行通信的开发不仅涉及到基本的数据发送和接收,还包括设备配置、错误处理和性能优化等多个方面。那么本文就来深入探讨在HarmonyOS中如何开发串行通信应用,包括串行通信的基础知识、HarmonyOS提供的API、开发步骤和实际代码示例
16 2
|
2月前
|
JavaScript 前端开发 物联网
「Mac畅玩鸿蒙与硬件1」鸿蒙开发环境配置篇1 - 认识鸿蒙系统与开发工具
本篇将介绍鸿蒙操作系统(HarmonyOS)的基本概念以及在 Mac 环境下进行鸿蒙开发所需的工具。通过了解鸿蒙系统和开发工具的特点,为后续的学习和实践奠定基础。
149 1
「Mac畅玩鸿蒙与硬件1」鸿蒙开发环境配置篇1 - 认识鸿蒙系统与开发工具
|
3月前
|
存储 数据管理 调度
HarmonyOS架构理解:揭开鸿蒙系统的神秘面纱
【10月更文挑战第21天】华为的鸿蒙系统(HarmonyOS)以其独特的分布式架构备受关注。该架构包括分布式软总线、分布式数据管理和分布式任务调度。分布式软总线实现设备间的无缝连接;分布式数据管理支持跨设备数据共享;分布式任务调度则实现跨设备任务协同。这些特性为开发者提供了强大的工具,助力智能设备的未来发展。
173 1
|
3月前
|
安全 物联网 大数据
基于开元鸿蒙(OpenHarmony)的【智能药房与药品管理综合应用系统
基于开元鸿蒙(OpenHarmony)的【智能药房与药品管理综合应用系统
116 8
|
3月前
|
传感器 监控 算法
基于开源鸿蒙(OpenHarmony)的【智能家居综合应用】系统
基于开源鸿蒙(OpenHarmony)的【智能家居综合应用】系统
159 6
|
3月前
|
传感器 人工智能 监控
【基于开源鸿蒙(OpenHarmony)的智慧农业综合应用系统】
【基于开源鸿蒙(OpenHarmony)的智慧农业综合应用系统】
214 6
|
3月前
|
搜索推荐 物联网 开发工具
基于OpenHarmony(开源鸿蒙)的智慧医疗综合应用系统
基于OpenHarmony(开源鸿蒙)的智慧医疗综合应用系统
142 5

热门文章

最新文章