导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    鸿蒙OS下 XR806串口操作

    Wireless & Analog Series
    2
    6
    2833
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • Z
      zhugx LV 5 最后由 编辑

      大家好,目前的案子需要用到串口来收发数据,在OS下,操作串口并不那么随意就在中断中写代码;我也看了贵司提供的函数(我看UART HAL层的代码并没有开放);只看到了如下代码,例如
      int IoTUartRead(unsigned int id, unsigned char *data, unsigned int dataLen)
      {
      int ret = -1;

      if ((UART_ID)id >= UART_NUM) {
      	printf("IoTUartRead id=%d error\r\n", id);
      	return IOT_FAILURE;
      }
      

      #if (defined(UART_POLL_MODE))
      ret = HAL_UART_Receive_Poll((UART_ID)id, data, dataLen, 1000);
      #endif

      #if (defined(UART_IT_MODE))
      ret = HAL_UART_Receive_IT((UART_ID)id, data, dataLen, 1000);
      #endif

      #if (defined(UART_DMA_MODE))
      ret = HAL_UART_Receive_DMA((UART_ID)id, data, dataLen, 1000);
      #endif

      return ret;
      

      }
      就代码来看
      1、这里面有几个宏,,是对3个串口都起作用的
      也就是开启中断接收宏,3个串口就都是通过中断接收的
      2、接收超时时间设置成了固定的1000ms,这个1000ms能改吗?

      1 条回复 最后回复 回复 引用 分享 1
      • S
        salt_fish LV 3 最后由 编辑

        1、里面的这几个宏,其实是因为hal接口提供了三组接收方式,而鸿蒙仅提供了一种接收方式,所以才这么写的。这里有几个问题,一个是XR806的IO口复用是在device/xradio/xr806/xr_skylark/project/common/board/xr806_dig_ver/board_config.c这个文件里面设置的,当前的配置是UART1和uart2公用一组IO口了,uart0是打印串口,一般不会修改。二是hal接口也是开放的,头文件在在device/xradio/xr806/xr_skylark/include/driver/chip/hal_uart.h这里,源码在device/xradio/xr806/xr_skylark/src/driver/chip/hal_uart.c。但是hal接口可以用,也可以看,但是因为是集成在rom里面的,所以对src文件夹的修改无效。三是你如果希望串口1使用循环接收,串口2使用中断接收,你就需要对IoTUartRead进行修改了,识别到是哪个串口,则进行哪种传输方式。
        2、1000ms是可以改的。这个也是hal接口和鸿蒙借口有冲突的产物。

        Z 1 条回复 最后回复 回复 引用 分享 1
        • Z
          zhugx LV 5 @salt_fish 最后由 编辑

          @salt_fish 我其实想用 串口2、3 串口1作为调试使用和烧录固件,不会改动

          S 1 条回复 最后回复 回复 引用 分享 1
          • S
            salt_fish LV 3 @zhugx 最后由 编辑

            @zhugx 我认为你的意思是希望烧录接口和打印接口分开是吗?首先是烧录口是固定的,这没办法,但是如果你想把串口2变成打印接口的话,可以修改device/xradio/xr806/xr_skylark/project/common/board/xr806_dig_ver/board_config.h里面的BOARD_MAIN_UART_ID的值,改成UART2_ID即可。

            Z 1 条回复 最后回复 回复 引用 分享 1
            • Z
              zhugx LV 5 @salt_fish 最后由 编辑

              @salt_fish 串口1做为打印串口不动,我需要串口2和串口3来控制设备

              S 1 条回复 最后回复 回复 引用 分享 1
              • S
                salt_fish LV 3 @zhugx 最后由 编辑

                @zhugx 串口2和串口3直接调用接口即可。你是担心配置串口2会影响到串口1吗?不会的,串口之间是相互独立的。

                1 条回复 最后回复 回复 引用 分享 1
                • 1 / 1
                • First post
                  Last post

                Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

                行为准则 | 用户协议 | 隐私权政策