当前位置: 首页 > Web前端 > HTML

Hi3861通过UART串口协议与其他开发板通信

时间:2023-03-28 12:34:49 HTML

一、搭建编译环境1、下载虚拟机??VMware和Ubuntu20.0.14下载VMwareWorkstationPro|CNhttps://www.vmware.com/cn/pro...Ubuntu系统下载|Ubuntuhttps://cn.ubuntu.com/download2.安装vm后打开vm,点击新建虚拟机3.选择Typical点击Next,选择下载的Ubuntu,点击Next,创建完成后,虚拟的机器自动安装Ubuntu4。安装完成后,可以参考https://docs.openharmony.cn/p...五、安装编译工具(1)安装Node.js,打开Ubuntu终端输入命令安装:sudoapt-getinstallnodejssudoapt-getinstallnpmnode--version//查看nodejs版本npm--version//查看npm版本(二)安装Python编译环境sudoapt-getinstallpython3.8sudoapt-getinstallpython3-pipsudopip3installsetuptoolssudopip3installkconfiglibsudopip3installpycryptodomesudopip3installsix--upgrade--ignore-installedsixsudopip3installecdsa(3)InstallSConspython3-mpipinstallsconsscons-v//查看版本如图:(4)安装hb工具代码测试python3-mpipinstall--userohos-buildvim~/.bashrc//设置环境变量exportPATH=~/.local/bin:$PATH//复制以下命令到最后一行.bashrc文件,保存退出source~/.bashrc//更新环境变量,执行“hb-h”,re是一种类型打印如下信息表示安装成功(5)安装gcc_riscv32并下载gcc_riscv32镜像https://gitee.com/link?target...设置环境变量,将压缩包解压到根目录tar-xvfgcc_riscv32-linux-7.3.0。tar.gz-C~//文件名需要和下载的文件一致才能设置环境变量。vim~/.bashrc//设置环境变量exportPATH=~/gcc_riscv32/bin:$PATH//将以下命令复制到.bashrc文件的最后一行,保存退出source~/.bashrc//更新environmentvariableriscv32-unknown-elf-gcc-v//显示版本号,则安装成功6.修改OpenHarmony源码目录device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config中的usr_config.mk文件.mkCONFIG_I2C_SUPPORT=yCONFIG_PWM_SUPPORT=y7,修改OpenHarmony源码目录下device/hisilicon/hispark_pegasus/hi3861_adapter/hals/communication/wifi_lite/wifiservice/source/wifi_hotspot.cEnableHotspot函数中的wifiservice文件夹文件屏蔽以下字段//if(SetHotspotIpConfig()!=WIFI_SUCCESS){//返回ERROR_WIFI_UNKNOWN;//}地址:device/hisilicon/hispark_pegasus/hi3861_adapter/hals/communication/wifi_lite/wifiservice/source/wifi_device.cDispatchConnectEvent函数下屏落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终端。voidUartInit(void){RaiseLog(LOG_LEVEL_INFO,[2022012x01]进入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_attributeuart_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,"[2022012_initx01]成功"uart);/*初始化uart驱动*/hi_u32ret=hi_uart_init(HI_UART_IDX_1,&uart_attr,HI_NULLER)!{printf("[Dustbin_tes3]初始化uart失败!错误代码=%d\n",ret);返回;}}3。创建线程任务静态void*uart_demo_task(void){staticuint16_tcountSendTimes=0;静态uint8_tcountReceiveTimes=0;uartController.isReadBusy=false;printf("[初始化串口成功\n");串口初始化();while(1){osDelay(50);UartReceiveMessage();//采集串口数据hi_sleep(SMART_BIN_SLEEP_2500MS);}return0;}staticvoidIotMainEntry(void){osThreadAttr_tattr;RaiseLog(LOG_LEVEL_INFO,"DATA:%sTime:%s\r\n",__FUNCTION__,__DATE__,__TIME__);//创建物联网主任务attr.attr_bits=0U;属性.cb_mem=NULL;属性.cb_size=0U;attr.stack_mem=NULLattr.stack_size=CONFIG_TASK_MAIN_STACKSIZE;attr.priority=CONFIG_TASK_MAIN_PRIOR;attr.name="IoTMain";(void)osThreadNew((osThreadFunc_t)uart_demo_task,NULL,(constosThreadAttr_t*)&attr);return;}APP_FEATURE_INIT(IotMainEntry);4、接收串口数据staticvoidUartReceiveMessage(void){字符*recData;printf("----听力----\n");RaiseLog(LOG_LEVEL_INFO,"开始监听串口");如果(UartIsBufEmpty()){返回;}如果(uartController.isReadBusy){返回;}uartController.isReadBusy=true;g_ReceivedDatalen=hi_uart_read(UART_NUM,g_uart_buff,UART_BUFF_SIZE);if(g_ReceivedDatalen>0){printf("handleUartReceiveMessagercvDatalen:%d,msg:%s.\n",g_ReceivedDatag_uart_buff);setVoiceCommand();//设置语音命令memset(g_uart_buff,0,sizeof(g_uart_buff));g_ReceivedDatalen=0;}uartController.isReadBusy=false;}hi3861开发板接收到其他开发板传来的数据时,可以通过串口打印出来。你可以为此写一个解析命令,对发送的字符串执行相应的命令。注意:接线时,将tx连接到另一块开发板的rx,因为在UART串口TX(发送引脚)和RX(接收引脚)进行数据收发时,需要将TX发送引脚连接到另一块开发板的RX接收引脚另一块开发板,所以需要交叉连接,保证两块开发板通讯正常