• 150403

    文章

  • 888

    评论

  • 13

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

HaaS100 串口UART使用介绍


1、HaaS100串口UART硬件说明

HaaS100开发板上有3个物理串口(UART)。

1.1、UART 0

UART 0是调试串口,已用USB转UART芯片转为USB口,可通过Micro USB线与电脑连接,用于串口打印及shell命令输入。同时,可以通过板子上硬件电阻切换成RS232。

UART 0调试串口在板子上的位置如下图红框所示:

image.png

UART 0作为调试口时,使用Micro USB数据线连接串口即可;UART 0作为RS232使用时,在板子上的位置如下图所示:

image.png

RS232由于与调试串口共用UART 0,使用时,需要修改板子上的硬件,把UART 0切换成RS232,修改方法如下:

image.png

如上图,将图示中红框中的2个焊点短接,UART0切换成RS232接口,此时USB口无法使用。

 

1.2、UART 1

UART 1扩展成RS485接口,如下图红框所示:

image.png

上图中标准的A、B、G表示RS485协议中的A、B和GND。

 

1.3、UART 2

UART 2为TTL,在42PIN排针上,具体位置如下图所示:

image.png

 

2、软件接口说明

UART接口在头文件include/aos/hal/uart.h中,主要接口如下表:

接口

说明

hal_uart_init

UART初始化,接口中设置UART的端口号、波特率、数据位宽等

hal_uart_send

通过指定UART发送数据接口

hal_uart_send_poll

该接口HaaS100上未实现

hal_uart_recv

该接口HaaS100上未实现

hal_uart_recv_poll

该接口HaaS100上未实现

hal_uart_recv_II

通过指定UART接收指定长度的串口数据

hal_uart_finalize

串口去初始化接口。

具体接口使用说明,可以参考AliOS Things接口帮助文档 https://help.aliyun.com/document_detail/161062.html?spm=a2c4g.11186623.6.574.64c67c26w3auXW

 

3、使用案例

下面以UART 2使用方式为例,介绍一下UART口的使用方法。

3.1、实现功能

通过UART 2连接电脑,电脑上的串口工具输入一个字符串,按回车后,HaaS100通过UART2往电脑发送"recv="加相同的字符串。

3.2、硬件连接

UART 2为TTL接口,需要通过一个TTL转USB的转接设备连接。如下图所示:

image.png

3.3、软件代码

  • 串口初始化:
uart_dev_t uart_ttl = {0};

void uart_test_init()
{
    uart_ttl.port = 2;  /*ttl use uart 2*/
    uart_ttl.config.baud_rate = 115200;
    uart_ttl.config.data_width = DATA_WIDTH_8BIT;
    uart_ttl.config.flow_control = FLOW_CONTROL_DISABLED;
    uart_ttl.config.mode = MODE_TX_RX;
    uart_ttl.config.parity = NO_PARITY;
    uart_ttl.config.stop_bits = STOP_BITS_1;
    
    hal_uart_init(&uart_ttl);
}
  • 数据收送
void uart_test()
{
    int ret       = 0;
    int recv_size = 0;
    int index     = 5;
    char buf[128] = {0};

    buf[0] = 'r';
    buf[1] = 'e';
    buf[2] = 'c';
    buf[3] = 'v';
    buf[4] = '=';
    while (1) {
        ret = -1;
        recv_size = 0;
        ret = hal_uart_recv_II(&uart_ttl, &buf[index], 1, &recv_size, 2000);
        if ((ret == 0) && (recv_size == 1)) {
            if (buf[index] == '\n') {
                hal_uart_send(&uart_ttl, buf, index + 1, AOS_WAIT_FOREVER);
                index = 5;
                aos_msleep(10);
                continue;
            }
            index ++;
            if(index >= 128) {
                hal_uart_send(&uart_ttl, buf, index, AOS_WAIT_FOREVER);
                index = 5;
            }
        }
        aos_msleep(10);
    }
}

 

3.4、测试方法

第一步:

在application/example/helloworld_demo/appdemo.c中,增加头文件#include "aos/hal/uart.h",增加上面串口初始化及传输数据收发的代码,然后执行命令aos make helloworld_demo@haas100 -c config; aos make命令编译。

代码详见:

/*
 * Copyright (C) 2015-2021 Alibaba Group Holding Limited
 */

#include <stdio.h>
#include <stdlib.h>
#include <aos/errno.h>
#include <aos/kernel.h>
#include "aos/init.h"
#include "board.h"
#include <k_api.h>
#include "aos/hal/uart.h"

uart_dev_t uart_ttl = {0};

void uart_test_init()
{
    uart_ttl.port = 2;  /*ttl use uart 2*/
    uart_ttl.config.baud_rate = 115200;
    uart_ttl.config.data_width = DATA_WIDTH_8BIT;
    uart_ttl.config.flow_control = FLOW_CONTROL_DISABLED;
    uart_ttl.config.mode = MODE_TX_RX;
    uart_ttl.config.parity = NO_PARITY;
    uart_ttl.config.stop_bits = STOP_BITS_1;

    hal_uart_init(&uart_ttl);
}

void uart_test()
{
    int ret       = 0;
    int recv_size = 0;
    int index     = 5;
    char buf[128] = {0};

    buf[0] = 'r';
    buf[1] = 'e';
    buf[2] = 'c';
    buf[3] = 'v';
    buf[4] = '=';
    while (1) {
        ret = -1;
        recv_size = 0;
        ret = hal_uart_recv_II(&uart_ttl, &buf[index], 1, &recv_size, 2000);
        if ((ret == 0) && (recv_size == 1)) {
            if (buf[index] == '\n') {
                hal_uart_send(&uart_ttl, buf, index + 1, AOS_WAIT_FOREVER);
                index = 5;
                aos_msleep(10);
                continue;
            }
            index ++;
            if(index >= 128) {
                hal_uart_send(&uart_ttl, buf, index, AOS_WAIT_FOREVER);
                index = 5;
            }
        }
        aos_msleep(10);
    }
}

int application_start(int argc, char *argv[])
{
    int count = 0;

    printf("uart test entry here!\r\n");

    uart_test_init();
    uart_test();
}

 

第二步:

将编译出来的版本烧录到HaaS100中,烧录方法参考:HaaS100快速开始。

按照硬件连接章节图示连接HaaS100和电脑。在电脑上,使用串口工具打开UART2对应的串口,输入字符串后,按回车。串口会打印出recv=加输入的字符串。如下图:

image.png

4、开发者技术支持

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号

更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客