请选择 进入手机版 | 继续访问电脑版
查看: 3056|回复: 3

EMW3080(B) 用户串口如何使用?

[复制链接]

1

主题

2

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2018-12-6 16:58:59 | 显示全部楼层 |阅读模式
本帖最后由 zhoujie 于 2018-12-6 17:09 编辑

现在需要从“用户串口”读写数据(也就是AT指令串口,Windows设备管理器显示的“Enhanced Com Port”),已经测试过,烧录AT透传应用固件 MX1290_0000.0000.A212是可以正常使用的,此时用户串口 Enhanced Com Port 可以收发AT指令/响应,调试串口也可以正常输出调试信息;

前提条件:
1.使用MXKit-Base V1.3 + Core 3080 V2.0;
2.已经安装好 MiCoder,编译环境准备OK;
3.在实例工程的基础上修改: https://code.aliyun.com/mico/helloworld.git

代码编写如下:
  1. const uint8_t uart_test_data[] = "#############abcdefghahaha############\r\n";

  2. int application_start(void)
  3. {
  4.     OSStatus status;
  5.     const mico_uart_config_t uart_config =
  6.     {
  7.         .baud_rate = 115200,
  8.         .data_width = DATA_WIDTH_8BIT,
  9.         .parity = NO_PARITY,
  10.         .stop_bits = STOP_BITS_1,
  11.         .flow_control = FLOW_CONTROL_DISABLED,
  12.         .flags = UART_WAKEUP_DISABLE,
  13.     };
  14.     /* Output on debug serial port */
  15.     os_helloworld_log("Hello world!");
  16.     application_start1();
  17.     //application_start();
  18.     //application_start_mutex();
  19.     //application_start_timer();
  20. #if 0
  21.     status = MicoUartFinalize(MICO_UART_1);
  22.     if (status != kNoErr)
  23.     {
  24.         os_helloworld_log("error %d while deinit uart1\r\n", status);
  25.     }
  26. #endif
  27.     status = MicoUartInitialize(MICO_UART_1, &uart_config, NULL);
  28.     if (status != kNoErr)
  29.     {
  30.         os_helloworld_log("error %d while init uart1\r\n", status);
  31.     }
  32.     status = MicoUartSend(MICO_UART_1, uart_test_data, strlen(uart_test_data));
  33.     if (status != kNoErr)
  34.     {
  35.         os_helloworld_log("error %d while send uart1\r\n", status);
  36.     }
  37.     /* Trigger MiCO system led available on most MiCOKit */
  38.     while (1)
  39.     {
  40.         os_helloworld_log("Hello world! %d", __LINE__);
  41.         //mico_gpio_output_toggle(MICO_SYS_LED);
  42.         mico_rtos_delay_milliseconds(1000);
  43.     }
  44. }
复制代码
问题来了:
1.当串口号(line 28,33)改为 MICO_UART_2时,可以正常输出,不过是从调试串口,也就是Windows设备管理器中显示的“Standard Com Port”,不符合要求;
2.当串口号(line 28,33)为 MICO_UART_1时,显示初始化失败 -6705 参数错误,忽略失败,直接调用发送函数,用户串口也没有数据输出;
最后我想咨询下庆科的大神:

MICO_UART_2 MICO_UART_1 怎么和模块实际的串口对应的?光从API文档里面我没找到说明。


回复

使用道具 举报

0

主题

9

帖子

35

积分

新手上路

Rank: 1

积分
35
发表于 2018-12-9 16:00:59 | 显示全部楼层
有用过alios吗
回复

使用道具 举报

3

主题

11

帖子

104

积分

注册会员

Rank: 2

积分
104
发表于 2018-12-21 09:40:40 | 显示全部楼层
本帖最后由 youngsir 于 2018-12-21 09:46 编辑

引脚定义上UART0是用户串口,UART1是调试串口。-6705不知道是不是 MicoUartInitialize 的第三个参数没有传一个buffer缓冲区,影响的?
阳光下像个孩子,风雨里像个大人。
回复

使用道具 举报

1

主题

2

帖子

30

积分

新手上路

Rank: 1

积分
30
 楼主| 发表于 2019-9-9 11:12:11 | 显示全部楼层
已经搞定了,以下是正常工作的代码:

  1. int user_uart_init()
  2. {
  3.     OSStatus err;
  4.     const mico_uart_config_t uart_config =
  5.     {
  6.         .baud_rate = 115200,
  7.         .data_width = DATA_WIDTH_8BIT,
  8.         .parity = NO_PARITY,
  9.         .stop_bits = STOP_BITS_1,
  10.         .flow_control = FLOW_CONTROL_DISABLED,
  11.         .flags = UART_WAKEUP_DISABLE,
  12.     };

  13.     err = ring_buffer_init((ring_buffer_t*) &uart_rx_buffer,
  14.                            (uint8_t*) uart_rx_data,
  15.                            UART_ONE_PACKAGE_LENGTH);
  16.     if (err != kNoErr)
  17.     {
  18.         app_log("ERROR: Unable to init buffer.");
  19.         return err;
  20.     }

  21.     err = MicoUartInitialize(UART_FOR_APP,
  22.                              &uart_config,
  23.                              (ring_buffer_t*) &uart_rx_buffer);
  24.     if (err != kNoErr)
  25.     {
  26.         app_log("ERROR: Unable to init app_uart.");
  27.         return err;
  28.     }
  29.     // test
  30.     err = MicoUartSend(UART_FOR_APP,
  31.                        "test",
  32.                        4);
  33.     if (err != kNoErr)
  34.     {
  35.         app_log("ERROR: Unable to send test string.");
  36.         return err;
  37.     }

  38.     err = mico_rtos_init_semaphore(&uart_resp_sem,
  39.                                    1); // 0/1 binary semaphore || 0/N semaphore
  40.     return err;

  41. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表