鸿蒙HI3861模块中WiFi IoT智能家居套件 – UART2串口通信落地

串口相关的函数如下:

code\base\iot_hardware\frameworks\wifiiot_lite\src\wifiiot_uart.c


  1. //初始化函数 
  2. unsigned int UartInit(WifiIotUartIdx id, const WifiIotUartAttribute *param, const WifiIotUartExtraAttr *extraAttr) 
  3.  
  4. //读数据函数 
  5. int UartRead(WifiIotUartIdx id, unsigned char *data, unsigned int dataLen) 
  6.  
  7. //写数据函数 
  8. int UartWrite(WifiIotUartIdx id, const unsigned char *data, unsigned int dataLen) 

开发过程:

1. 使能UART2

在 vendor\hisi\hi3861\hi3861\build\config\usr_config.mk 修改 CONFIG_UART2_SUPPORT=y

2. 初始化GPIO为UART2(注意,如果已经执行步骤1,则不需要本过程)

如果已经配置 CONFIG_UART2_SUPPORT=y,则以下文件中的GPIO11,12会被自动初始化为UART2

vendor\hisi\hi3861\hi3861\app\wifiiot_app\init\app_io_init.c


  1. #ifdef CONFIG_UART2_SUPPORT 
  2.     /* uart2 sigma认证使用串口 */ 
  3.     hi_io_set_func(HI_IO_NAME_GPIO_11, HI_IO_FUNC_GPIO_11_UART2_TXD); /* uart2 tx */ 
  4.     hi_io_set_func(HI_IO_NAME_GPIO_12, HI_IO_FUNC_GPIO_12_UART2_RXD); /* uart2 rx */ 
  5. #endif 

3. 初始化UART2配置


  1. int usr_uart2_config(void) 
  2.     int ret; 
  3.  
  4.     //初始化UART2配置,115200,数据bit为8,停止位1,奇偶校验为NONE,流控为NONE 
  5.     WifiIotUartAttribute g_uart2_cfg = {115200, 8, 1, WIFI_IOT_UART_PARITY_NONE, 0}; 
  6.     ret = UartInit(WIFI_IOT_UART_IDX_2, &g_uart2_cfg,NULL); 
  7.  
  8.     if (ret != 0)  
  9.     { 
  10.         printf("uart2 init fail\r\n"); 
  11.     } 
  12.     return ret; 

 4. 调用UART读写函数


  1. unsigned char buff[50] = {0}; 
  2.    unsigned int len = 0; 
  3.    unsigned int ui = 0; 
  4.    len = UartRead(WIFI_IOT_UART_IDX_2, buff, 50);//接收串口2数据 
  5.    if(len > 0) 
  6.    { 
  7.        printf("UART2 recv len=%d\r\n", len); 
  8.        for(ui = 0 ; ui < len; ui++) 
  9.        { 
  10.            printf("0x%x\r\n", buff[ui]); 
  11.        } 
  12.        UartWrite(WIFI_IOT_UART_IDX_2, buff, len);//数据发送给串口2 
  13.    } 

 5. 完整的代码 uart2_demo.c

路径:code\applications\sample\wifi-iot\app\hello_world\uart2_demo.c


  1. #include <stdio.h> 
  2. #include <unistd.h> 
  3. #include "ohos_init.h" 
  4. #include "cmsis_os2.h" 
  5. #include "wifiiot_gpio.h" 
  6. #include "wifiiot_gpio_ex.h" 
  7. #include "wifiiot_uart.h" 
  8. #include "wifiiot_uart_ex.h" 
  9.  
  10. /* 
  11. 2020年11月19日  
  12. 作者:hcl0317 
  13. 链接: 
  14. 实现功能: 
  15. GPIO11->UART2_TX  
  16. GPIO12->UART2_RX  
  17.  
  18. 1. 在 vendor\hisi\hi3861\hi3861\build\config\usr_config.mk 修改 CONFIG_UART2_SUPPORT=y 
  19. 2. 打开上面的宏定义后,在 vendor\hisi\hi3861\hi3861\app\wifiiot_app\init\app_io_init.c中会自动对 GPIO11和GPIO12进行初始化 
  20.  
  21. //#ifdef CONFIG_UART2_SUPPORT 
  22. //    //uart2 sigma认证使用串口 
  23. //    hi_io_set_func(HI_IO_NAME_GPIO_11, HI_IO_FUNC_GPIO_11_UART2_TXD); // uart2 tx  
  24. //    hi_io_set_func(HI_IO_NAME_GPIO_12, HI_IO_FUNC_GPIO_12_UART2_RXD); // uart2 rx  
  25. //#endif 
  26.  
  27. //3.初始化UART2配置,115200,数据bit为8,停止位1,奇偶校验为NONE,流控为NONE 
  28.  
  29. //4.在任务中调用串口读写函数,收到什么数据,发送什么数据 
  30.  
  31. */ 
  32.  
  33. int usr_uart2_config(void) 
  34.     int ret; 
  35.  
  36.     //初始化UART2配置,115200,数据bit为8,停止位1,奇偶校验为NONE,流控为NONE 
  37.     WifiIotUartAttribute g_uart2_cfg = {115200, 8, 1, WIFI_IOT_UART_PARITY_NONE, 0}; 
  38.     ret = UartInit(WIFI_IOT_UART_IDX_2, &g_uart2_cfg,NULL); 
  39.  
  40.     if (ret != 0)  
  41.     { 
  42.         printf("uart2 init fail\r\n"); 
  43.     } 
  44.     return ret; 
  45.  
  46.  
  47. //1.任务处理函数 
  48. static void* Uart2Demo_Task(const char* arg) 
  49.     unsigned char buff[50] = {0}; 
  50.     unsigned int len = 0; 
  51.  
  52.     (void)arg; 
  53.     printf("[Uart2Demo] Uart2Demo_Task()\n"); 
  54.  
  55.     GpioInit();//使用GPIO,都需要调用该接口 
  56.  
  57.     printf("UART2 init…\r\n"); 
  58.     usr_uart2_config(); 
  59.  
  60.  
  61.     while(1) 
  62.     { 
  63.         //logic code for task 
  64.         unsigned int ui = 0; 
  65.         len = UartRead(WIFI_IOT_UART_IDX_2, buff, 50);//接收串口2数据 
  66.         if(len > 0) 
  67.         { 
  68.             printf("UART2 recv len=%d\r\n", len); 
  69.             for(ui = 0 ; ui < len; ui++) 
  70.             { 
  71.                 printf("0x%x\r\n", buff[ui]); 
  72.             } 
  73.             UartWrite(WIFI_IOT_UART_IDX_2, buff, len);//数据发送给串口2 
  74.         } 
  75.  
  76.         //usleep(500000); 
  77.         usleep(100000); 
  78.     } 
【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章