当前位置: 首页 > 科技观察

鸿蒙HI3861模块中WiFi IoT智能家居套件 - UART2串口通信实现

时间:2023-03-22 15:22:44 科技观察

HarmonyHI3861模块中的Wi-Fi物联网智能家居套件——实现UART2串口通信在模块中,UART2使用GPIO11和GPIO12引脚。串口通讯一般是单片机最基本的通讯方式。我们一般调试的时候,一是开灯,二是打开串口。虽然现在的开发板已经有了串口输出(UART0),但是这个串口是官方自带的,我们还是需要熟悉一下串口的使用。GPIO11->UART2_TXGPIO12->UART2_RX接下来我们实现UART2的初始化,将UART2接收到的数据从UART2发送出去。硬件连接图串口相关函数如下:code\base\iot_hardware\frameworks\wifiiot_lite\src\wifiiot_uart.c//初始化函数unsignedintUartInit(WifiIotUartIdxid,constWifiIotUartAttribute*param,constWifiIotUartExtraAttr*extraAttr)//读取datafunctionintUartRead(WifiIotUartIdchardxid,unsigned*data,unsignedintdataLen)//写数据函数intUartWrite(WifiIotUartIdxid,constunsignedchar*data,unsignedintdataLen)开发过程:1.在vendor\hisi\hi3861\hi3861\build\config\usr_config.mk中启用UART2并修改CONFIG_UART2_SUPPORT=y2。初始化GPIO为UART2(注意,如果已经执行了步骤1,则不需要此过程)如果配置了CONFIG_UART2_SUPPORT=y,则后面文件中的GPIO11和12会自动初始化为UART2vendor\hisi\hi3861\hi3861\app\wifiiot_app\init\app_io_init.c#ifdefCONFIG_UART2_SUPPORT/*uart2sigma认证使用串口*/hi_io_set_func(HI_IO_NAME_GPIO_11,HI_IO_FUNC_GPIO_11_UART2_TXD);/*uart2tx*/hi_io_set_func(HI_IO_NAME_GPIO_12,HI_IO_FUNC_GPIO_12_UART2_RXD);/*uart2rx*/#endif3.初始化UART2配置intusr_uart2_config(void){intret;//初始化UART2配置,115200,数据位为8,停止位为1,奇偶校验为NONE,流控为NONEWifiIotUartAttributeg_uart2_cfg={115200,8,1,WIFI_IOT_UART_PARITY_NONE,0};ret=UartInit(WIFI_IOT_UART_IDX_2,&g_uart2_cfg,NULL);if(ret!=0){printf("uart2initfail\r\n");}returnret;}4.调用UART读写函数unsignedcharbuff[50]={0};unsignedintlen=0;unsignedintui=0;len=UartRead(WIFI_IOT_UART_IDX_2,buff,50);//接收串口2数据if(len>0){printf("UART2recvlen=%d\r\n",len);for(ui=0;ui#include#include"ohos_init.h"#include"cmsis_os2.h"#include"wifiiot_gpio.h"#include"wifiiot_gpio_ex.h"#include"wifiiot_uart.h"#include"wifiiot_uart_ex.h"/*2020年11月19日作者:hcl0317链接:实现函数:GPIO11->UART2_TXGPIO12->UART2_RX1。修改vendor\hisi\hi3861\hi3861\build\config\usr_config.mk中的CONFIG_UART2_SUPPORT=y2。打开上面的宏定义后,在vendor\hisi\hi3861\hi3861\app\wifiiot_app\init\app_io_init.c中会自动对GPIO11和GPIO12进行初始化//#ifdefCONFIG_UART2_SUPPORT////uart2sigma认证使用串口//hi_io_set_func(HI_IO_NAME_GPIO_11,HI_IO_FUNC_GPIO_11_UART2_TXD);//uart2tx//hi_io_set_func(HI_IO_NAME_GPIO_12,HI_IO_FUNC_GPIO_12_UART2_RXD);//uart2rx//#endif//3。初始化UART2配置,115200,数据位为8,停止位为1,奇偶校验为NONE,流控为NONE//4。在任务中调用串口读写函数,接收什么数据,发送什么数据*/intusr_uart2_config(void){intret;//初始化UART2配置,115200,数据位为8,停止位为1,校验位为NONE,流控为NONEWifiIotUartAttributeg_uart2_cfg={115200,8,1,WIFI_IOT_UART_PARITY_NONE,0};ret=UartInit(WIFI_IOT_UART_IDX_2,&g_uart2_cfg,NULL);if(ret!=0){printf("uart2initfail\r\n");}returnret;}//1.任务处理函数staticvoid*Uart2Demo_Task(constchar*arg){unsignedcharbuff[50]={0};unsignedintlen=0;(void)arg;printf([Uart2Demo]Uart2Demo_Task()\n");GpioInit();//使用GPIO时需要调用该接口printf("UART2init...\r\n");usr_uart2_config();while(1){//logiccodefortaskunsignedintui=0;len=UartRead(WIFI_IOT_UART_IDX_2,buff,50);//接收串口2数据if(len>0){printf("UART2recvlen=%d\r\n",len);for(ui=0;ui