張兵
就讀于貴州黔南科技學院
首期OpenHarmony開源開發者成長計劃“智能語音垃圾桶”項目開發者
一、搭建編譯環境
1、下載虛擬機VMware和Ubuntu20.0.14下載 VMware Workstation Pro | CN
https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html
Ubuntu系統下載 | Ubuntu
https://cn.ubuntu.com/download
2、 安裝vm完成后打開vm,點擊創建新的虛擬機

3、選擇典型點擊下一步,選擇下載的Ubuntu,點擊下一步,創建完成后虛擬機自動安裝Ubuntu

4、安裝完成后獲取OpenHarmony源碼可參考
https://docs.openharmony.cn/pages/v3.1/zh-cn/device-dev/get-code/sourcecode-acquire.md/
5、安裝編譯工具
(1)安裝Node.js 打開Ubuntu終端輸入命令安裝:(2)安裝Python編譯環境sudo apt-get install nodejssudo apt-get install npmnode --version //查看nodejs版本npm--version//查看npm版本
(3) 安裝SConssudo apt-get install python3.8sudo apt-get install python3-pipsudo pip3 install setuptoolssudo pip3 install kconfiglibsudo pip3 install pycryptodomesudo pip3 install six --upgrade --ignore-installed sixsudopip3installecdsa
如圖:python3 -m pip install sconsscons-v//查看版本

執行"hb -h",有打印以下信息即表示安裝成功。python3 -m pip install --user ohos-buildvim ~/.bashrc //設置環境變量export PATH=~/.local/bin:$PATH //將以下命令拷貝到.bashrc文件的最后一行,保存并退出source~/.bashrc//更新環境變量

(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
設置環境變量
將壓縮包解壓到根目錄
6、修改usr_config.mk文件 文件在OpenHarmony源碼目錄下 device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config.mktar -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//顯示版本號,則安裝成功
7、修改wifiservice文件夾 文件在OpenHarmony源碼目錄下 device/hisilicon/hispark_pegasus/hi3861_adapter/hals/communication/wifi_lite/wifiservice/source/wifi_hotspot.cCONFIG_I2C_SUPPORT=yCONFIG_PWM_SUPPORT=y
EnableHotspot函數中屏蔽如下字段//if (SetHotspotIpConfig() != WIFI_SUCCESS) {// return 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端
3、創建線程任務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 ", ret);return;}}
4、接收串口數據static void *uart_demo_task(void){static uint16_t countSendTimes = 0;static uint8_t countReceiveTimes = 0;uartController.isReadBusy = false;printf("[Initialize uart successfully ");UartInit();while (1){osDelay(50);UartReceiveMessage();//Collecting Serial Port Datahi_sleep(SMART_BIN_SLEEP_2500MS);}return 0;}static void IotMainEntry(void){osThreadAttr_t attr;RaiseLog(LOG_LEVEL_INFO, "DATA:%s Time:%s ", __FUNCTION__, __DATE__, __TIME__);// Create the IoT Main taskattr.attr_bits = 0U;attr.cb_mem = NULL;attr.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, (const osThreadAttr_t *)&attr);return;}APP_FEATURE_INIT(IotMainEntry);
static void UartReceiveMessage(void){char *recData;printf("----Listening---- ");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. ", g_ReceivedDatalen, g_uart_buff);setVoiceCommand();//Setting voice Commandsmemset(g_uart_buff, 0, sizeof(g_uart_buff));g_ReceivedDatalen = 0;}uartController.isReadBusy = false;}
當hi3861開發板接收到其他開發板傳輸的數據后,可以通過串口打印出來,對此可以寫一個解析命令,對發送的字符串,執行相應的命令

注:在接線時,要將tx與另一個開發板的rx連接,因為在UART串口協議中,通過TX(發送引腳)和RX(接收引腳)進行數據傳輸與接收,需要將TX發送引腳與另一開發板的RX接收引腳相連接,故需要交叉連接以保證兩塊開發板的正常通信。

-
uart
+關注
關注
22文章
1314瀏覽量
106641 -
開發板
+關注
關注
26文章
6291瀏覽量
118076 -
VMware
+關注
關注
1文章
301瀏覽量
23118 -
Hi3861
+關注
關注
1文章
64瀏覽量
7627
原文標題:Hi3861 通過UART串口協議與其它開發板進行通信
文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
鴻蒙OpenHarmony【集成三方SDK】 (基于Hi3861開發板)
鴻蒙開發板Hi3861燒錄報錯?
如何使用 HiBurn 工具燒錄鴻蒙的 .bin 文件到 Hi3861 開發板
openharmony開發版 openharmony開發板
自制Hi3861開發板(附原理圖和電路圖)
潤開鴻Hi3861開發板介紹
鴻蒙OpenHarmony【輕量系統編譯】 (基于Hi3861開發板)
鴻蒙OpenHarmony南向:【Hi3861開發板介紹】
Hi3861開發板與其它開發板的通信
評論