Hi3861 通过UART串口协议与其它开发板进行通信
Posted OpenHarmony开发者社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hi3861 通过UART串口协议与其它开发板进行通信相关的知识,希望对你有一定的参考价值。
一、搭建编译环境
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镜像
设置环境变量
将压缩包解压到根目录
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里面添加我们写的代码:
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开发板接收到其他开发板传输的数据后,可以通过串口打印出来,对此可以写一个解析命令,对发送的字符串,执行相应的命令
注:在接线时,要将tx与另一个开发板的rx连接,因为在UART串口协议中,通过TX(发送引脚)和RX(接收引脚)进行数据传输与接收,需要将TX发送引脚与另一开发板的RX接收引脚相连接,故需要交叉连接以保证两块开发板的正常通信。
以上是关于Hi3861 通过UART串口协议与其它开发板进行通信的主要内容,如果未能解决你的问题,请参考以下文章
#盲盒+码#FFH学习设备开发之Hi3861-TCPclient-开关灯
AM57x平台开发板的默认调试串口为UART3改为uart1
AM57x平台开发板的默认调试串口为UART3改为uart1