hi3861通过uart串口协议与其它开发板进行通信

OpenHarmony开发者社区 OpenHarmony开发者社区     2022-12-03     428

关键词:

一、搭建编译环境

1、下载虚拟机VMware和Ubuntu20.0.14

下载 VMware Workstation Pro | CN

sudo apt-get install nodejs
sudo apt-get install npm
node --version //查看nodejs版本
npm --version //查看npm版本



(2)安装Python编译环境sudo apt-get install python3.8
sudo apt-get install python3-pip
sudo pip3 install setuptools
sudo pip3 install kconfiglib
sudo pip3 install pycryptodome
sudo pip3 install six --upgrade --ignore-installed six
sudo pip3 install ecdsa
(3) 安装SConspython3 -m pip install scons
scons -v //查看版本
如图:
(4)安装hb工具代码测试python3 -m pip install --user ohos-build
vim ~/.bashrc //设置环境变量
export PATH=~/.local/bin:$PATH //将以下命令拷贝到.bashrc文件的最后一行,保存并退出
source ~/.bashrc //更新环境变量
执行"hb -h",有打印以下信息即表示安装成功。
(5) 安装gcc_riscv32下载gcc_riscv32镜像

https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fharmonyos%2Fcompiler%2Fgcc_riscv32%2F7.3.0%2Flinux%2Fgcc_riscv32-linux-7.3.0.tar.gz

设置环境变量

将压缩包解压到根目录

tar -xvf gcc_riscv32-linux-7.3.0.tar.gz -C ~    //文件名需要与下载的文件相匹配
设置环境变量。
vim ~/.bashrc //设置环境变量
export PATH=~/gcc_riscv32/bin:$PATH //将以下命令拷贝到.bashrc文件的最后一行,保存并退出
source ~/.bashrc //更新环境变量
riscv32-unknown-elf-gcc -v //显示版本号,则安装成功


6、修改usr_config.mk文件

文件在OpenHarmony源码目录下

device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config.mk

CONFIG_I2C_SUPPORT=y
CONFIG_PWM_SUPPORT=y


7、修改wifiservice文件夹

文件在OpenHarmony源码目录下

device/hisilicon/hispark_pegasus/hi3861_adapter/hals/communication/wifi_lite/wifiservice/source/wifi_hotspot.c

EnableHotspot函数中屏蔽如下字段
//if (SetHotspotIpConfig() != WIFI_SUCCESS)
// return ERROR_WIFI_UNKNOWN;
//
地址:device/hisilicon/hispark_pegasus/hi3861_adapter/hals/communication/wifi_lite/wifiservice/source/wifi_device.c
DispatchConnectEvent函数下 屏蔽StaSetWifiNetConfig相关代码行
//StaSetWifiNetConfig(HI_WIFI_EVT_CONNECTED);
//StaSetWifiNetConfig(HI_WIFI_EVT_DISCONNECTED);



二、创建项目文件夹

1、在OpenHarmony1.01版本创建一个项目demo

在源码目录下的vendor/team_x创建smart_demo

在scr里面添加我们写的代码:

Hi3861


2、初始化uart串口

首先我们需要创建一个初始化uart串口的程序

将GPIO0初始化为tx端,将GPIO1初始化为rx端

void UartInit(void)
RaiseLog(LOG_LEVEL_INFO,"[2022012x01] entry into UartInit");
IoTGpioInit(HAL_WIFI_IOT_IO_NAME_GPIO_0);
HalIoSetFunc(HAL_WIFI_IOT_IO_NAME_GPIO_0, WIFI_IOT_IO_FUNC_GPIO_0_UART1_TXD);
IoTGpioInit(HAL_WIFI_IOT_IO_NAME_GPIO_1);
HalIoSetFunc(HAL_WIFI_IOT_IO_NAME_GPIO_1, WIFI_IOT_IO_FUNC_GPIO_1_UART1_RXD);
hi_uart_attribute uart_attr =
.baud_rate = UART_BAUD_RATE, /* baud_rate: 9600 */
.data_bits = UART_DATA_BITS, /* data_bits: 8bits */
.stop_bits = UART_STOP_BITS,
.parity = 0,

RaiseLog(LOG_LEVEL_INFO,"[2022012x01] uart_init success");
/* Initialize uart driver */
hi_u32 ret = hi_uart_init(HI_UART_IDX_1, &uart_attr, HI_NULL);
if (ret != HI_ERR_SUCCESS)

printf("[Dustbin_tes3]Failed to init uart! Err code = %d\\n", ret);
return;


3、创建线程任务

static void *uart_demo_task(void)

static uint16_t countSendTimes = 0;
static uint8_t countReceiveTimes = 0;
uartController.isReadBusy = false;
printf("[Initialize uart successfully\\n");
UartInit();
while (1)

osDelay(50);
UartReceiveMessage();//Collecting Serial Port Data
hi_sleep(SMART_BIN_SLEEP_2500MS);

return 0;

static void IotMainEntry(void)

osThreadAttr_t attr;
RaiseLog(LOG_LEVEL_INFO, "DATA:%s Time:%s \\r\\n", __FUNCTION__, __DATE__, __TIME__);

// Create the IoT Main task
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL
attr.stack_size = CONFIG_TASK_MAIN_STACKSIZE;
attr.priority = CONFIG_TASK_MAIN_PRIOR;
attr.name = "IoTMain";
(void) osThreadNew((osThreadFunc_t)uart_demo_task, NULL, (const osThreadAttr_t *)&attr);
return;

APP_FEATURE_INIT(IotMainEntry);


4、接收串口数据

static void UartReceiveMessage(void)

char *recData;
printf("----Listening----\\n");
RaiseLog(LOG_LEVEL_INFO,"Start Listening serial port");
if (UartIsBufEmpty())

return;

if (uartController.isReadBusy)

return;

uartController.isReadBusy = true;
g_ReceivedDatalen = hi_uart_read(UART_NUM, g_uart_buff, UART_BUFF_SIZE);
if (g_ReceivedDatalen > 0)

printf("handleUartReceiveMessage rcvData len:%d,msg:%s.\\n", g_ReceivedDatalen, g_uart_buff);
setVoiceCommand();//Setting voice Commands
memset(g_uart_buff, 0, sizeof(g_uart_buff));
g_ReceivedDatalen = 0;

uartController.isReadBusy = false;


当hi3861开发板接收到其他开发板传输的数据后,可以通过串口打印出来,对此可以写一个解析命令,对发送的字符串,执行相应的命令

Hi3861


注:在接线时,要将tx与另一个开发板的rx连接,因为在UART串口协议中,通过TX(发送引脚)和RX(接收引脚)进行数据传输与接收,需要将TX发送引脚与另一开发板的RX接收引脚相连接,故需要交叉连接以保证两块开发板的正常通信。

Hi3861


Hi3861


开发板试用报告+hi3861开箱(代码片段)

今天Hi3861开发板的快递终于到了,马上给大家带来开箱报告。所有的包装拆开,揭开开发板的“庐山真面目”。![](https://s4.51cto.com/images/blog/202010/20/682a540bb95bade74f47327fd61b9e88.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,col 查看详情

开发板试用报告+hi3861开箱(代码片段)

今天Hi3861开发板的快递终于到了,马上给大家带来开箱报告。所有的包装拆开,揭开开发板的“庐山真面目”。![](https://s4.51cto.com/images/blog/202010/20/682a540bb95bade74f47327fd61b9e88.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,col 查看详情

hi3861学习笔记(18)——uart串口使用(代码片段)

...用信号0:UART0_LOG_TXD,数据发送,Debug和下载串口接口复用信号1:UART1_CTS,UART1的流控管脚,清除发送信号,输入6GPIO_04UART0_LOG_RXD数据接收,Debug和下载串口接口17GPIO_05UART1_RXD,数据接收口18GPIO_06... 查看详情

am57x平台开发板的默认调试串口为uart3改为uart1

...,CPU内集成了多核DSP、多核PRU、IVA-HD、GPU等协处理单元,通过硬件加速的方式极大增强CPU的数据、多媒体处理能力,可满足工业协 查看详情

am57x平台开发板的默认调试串口为uart3改为uart1

...,CPU内集成了多核DSP、多核PRU、IVA-HD、GPU等协处理单元,通过硬件加速的方式极大增强CPU的数据、多媒体处理能力,可满足工业协 查看详情

arduino与air800开发板使用uart通信:传输dht22传感器数据(代码片段)

硬件介绍ArduinoLeonardo在数字引脚0(RX)和1(TX)进行串口通信时是使用“Serial1”,USB的串口通信使用的是“Serial”。在数字引脚0(RX)和1(TX)与USB是相互独立的。Air800使用UART1串口进行通信。代码ArduinoLeonardo代码如下:#include&... 查看详情

openharmony源码编译与下载(代码片段)

开发环境:开发系统:Ubuntu20.04开发板:Pegasus物联网开发板MCU:Hi3861OpenHarmony版本:3.0.1-LTS3.1OpenHarmony源码编译Pegasus物联网开发板基于华为海思Hi3861芯片,对应的产品名字是wifiiot_hispark_pegasus。接下来编译wi... 查看详情

openharmony源码编译与下载(代码片段)

开发环境:开发系统:Ubuntu20.04开发板:Pegasus物联网开发板MCU:Hi3861OpenHarmony版本:3.0.1-LTS3.1OpenHarmony源码编译Pegasus物联网开发板基于华为海思Hi3861芯片,对应的产品名字是wifiiot_hispark_pegasus。接下来编译wi... 查看详情

wifi联网(sta模式)(代码片段)

...了WiFi,因此这里讲解如何使用WiFi联网。5.1使用AT联网串口终端上执行相应的AT命令,即可使Hi3861WLAN模组联网&#x 查看详情

wifi联网(sta模式)(代码片段)

...点名称和密码AT+STASTAT#查看连接结果AT+DHCP=wlan0,1#通过DHCP向AP请求wlan0的IP地址查看Hi3861WLAN模组与网关联通是否正常,如下所示。AT+IFCFG#查看模组接口IPAT+PING=X.X.X.X#检查模组与网关的联通性,其中X.X. 查看详情

stm32f407-串口学习1(uart协议简介)

...如有不足请多多指教。2、UART简介  嵌入式开发中,UART串口通信协议是我们常用的通信协议(UART、I2C、SPI等)之一,全称叫 查看详情

可编程usb转串口适配器开发板的详细接口与功能

可编程USB转串口适配器开发板的详细接口与功能可编程USB转UART/I2C/SMBus/SPI/CAN/1-Wire适配器USB2S(USBToSerialports)是多种数字接口物理层协议转发器,自带强大灵活的S2S协议固件程序,支持嵌入C语言程序开发,可实现Windows/Android/Wince... 查看详情

hi3861使用iic驱动adxl346(代码片段)

开发平台Ubuntu18.04DOPI hi3861lv开发板、adxl346模组Q群:735884031一.配置3861iic1.搭建demo工程,可参考我的上一篇博客2.查看引脚复用,使用GPIO9、GPIO10作为iic0IO3.配置io复用,初始化iic控制器/Hi3861V100R001C00SPC025/app/adxl346$t 查看详情

hi3861使用iic驱动adxl346(代码片段)

开发平台Ubuntu18.04DOPI hi3861lv开发板、adxl346模组Q群:735884031一.配置3861iic1.搭建demo工程,可参考我的上一篇博客2.查看引脚复用,使用GPIO9、GPIO10作为iic0IO3.配置io复用,初始化iic控制器/Hi3861V100R001C00SPC025/app/adxl346$t 查看详情

tq2440开发板学习纪实---设置uart串口,输出helloworld!

0串口,UART,RS232,RS485傻傻分不清0.1串行通信与并行通信串口名字表示采用的通信方式为串行而不是并行。那么串行与并行的区别是啥呢?很简单,串行就是同一时刻只能传输一个bit,而并行则可以同时传... 查看详情

tq2440开发板学习纪实---基于中断的uart串口接收

...个很大的用处,那就是程序陷入死循环是,可以通过UART0发送给ARM一个信号,来终止程序的运行。关键代码片段:1取消相关中断屏蔽位/*unmaskinterruptforUART0*/rI 查看详情

air724ug开发板串口教程(代码片段)

...平,而在开发板中,默认给uart电平为1.8v。如果你的通讯串口不符合该电平有两种做法:使用开发板提供的串口电平转换电路(该开发板只有一个)外搭串口电平转换电路针对于1,我们看一下电路图:首先uart1,2串口电平1.8v连接... 查看详情

mes系统如何与其他管理系统进行集成

...,比如第三方系统开放socket服务端或者我们开放服务端,通过socket编程传输数据。5.Modbus协议,通过这种协议,比较常见的是和设备的对接,直接从设备读取分析数据。6.串口协议,比较常见的是和设备的对接,通过串口编程... 查看详情