HaaS100串口UART使用介绍

简介: HaaS100串口UART使用介绍

1. HaaS100串口UART硬件说明

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

1) UART 0

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

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

UART 0作为调试口时,使用Micro USB数据线连接串口即可。

UART 0作为RS232使用时,在板子上的位置如下图所示:

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

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

2)UART 1

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

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

2)UART 2 (HaaS100常用)

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

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

串口去初始化接口。


3. 使用案例

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

1)实现功能

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

2)硬件连接

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

3)软件代码

  • 串口初始化:

  1. uart_dev_t uart_ttl = {0};

  2. void uart_test_init()

  3. {

  4.    uart_ttl.port = 2;  /*ttl use uart 2*/

  5.    uart_ttl.config.baud_rate = 115200;

  6.    uart_ttl.config.data_width = DATA_WIDTH_8BIT;

  7.    uart_ttl.config.flow_control = FLOW_CONTROL_DISABLED;

  8.    uart_ttl.config.mode = MODE_TX_RX;

  9.    uart_ttl.config.parity = NO_PARITY;

  10.    uart_ttl.config.stop_bits = STOP_BITS_1;

  11.    hal_uart_init(&uart_ttl);

  12. }

  • 数据收送

  1. void uart_test()

  2. {

  3. int ret       = 0;

  4. int recv_size = 0;

  5. int index     = 5;

  6.    char buf[128] = {0};

  7.    buf[0] = 'r';

  8.    buf[1] = 'e';

  9.    buf[2] = 'c';

  10.    buf[3] = 'v';

  11.    buf[4] = '=';

  12. while (1) {

  13.        ret = -1;

  14.        recv_size = 0;

  15.        ret = hal_uart_recv_II(&uart_ttl, &buf[index], 1, &recv_size, 2000);

  16. if ((ret == 0) && (recv_size == 1)) {

  17. if (buf[index] == '\n') {

  18.                hal_uart_send(&uart_ttl, buf, index + 1, AOS_WAIT_FOREVER);

  19. index = 5;

  20.                aos_msleep(10);

  21. continue;

  22.            }

  23. index ++;

  24. if(index >= 128) {

  25.                hal_uart_send(&uart_ttl, buf, index, AOS_WAIT_FOREVER);

  26. index = 5;

  27.            }

  28.        }

  29.        aos_msleep(10);

  30.    }

  31. }

4)测试方法

第一步:

在solutions/helloworld_demo/helloworld.c中,增加头文件#include "aos/hal/uart.h",增加上面串口初始化及传输数据收发的代码。

请参考下面文档下载代码、编译及烧录

HaaS100快速开始

代码详见:

  1. /*

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

  3. */

  4. #include

  5. #include

  6. #include

  7. #include

  8. #include "aos/init.h"

  9. #include "board.h"

  10. #include

  11. #include "aos/hal/uart.h"

  12. uart_dev_t uart_ttl = {0};

  13. void uart_test_init()

  14. {

  15.    uart_ttl.port = 2;  /*ttl use uart 2*/

  16.    uart_ttl.config.baud_rate = 115200;

  17.    uart_ttl.config.data_width = DATA_WIDTH_8BIT;

  18.    uart_ttl.config.flow_control = FLOW_CONTROL_DISABLED;

  19.    uart_ttl.config.mode = MODE_TX_RX;

  20.    uart_ttl.config.parity = NO_PARITY;

  21.    uart_ttl.config.stop_bits = STOP_BITS_1;

  22.    hal_uart_init(&uart_ttl);

  23. }

  24. void uart_test()

  25. {

  26. int ret       = 0;

  27. int recv_size = 0;

  28. int index     = 5;

  29. char buf[128] = {0};

  30.    buf[0] = 'r';

  31.    buf[1] = 'e';

  32.    buf[2] = 'c';

  33.    buf[3] = 'v';

  34.    buf[4] = '=';

  35. while (1) {

  36.        ret = -1;

  37.        recv_size = 0;

  38.        ret = hal_uart_recv_II(&uart_ttl, &buf[index], 1, &recv_size, 2000);

  39. if ((ret == 0) && (recv_size == 1)) {

  40. if (buf[index] == '\n') {

  41.                hal_uart_send(&uart_ttl, buf, index + 1, AOS_WAIT_FOREVER);

  42.                index = 5;

  43.                aos_msleep(10);

  44. continue;

  45.            }

  46.            index ++;

  47. if(index >= 128) {

  48.                hal_uart_send(&uart_ttl, buf, index, AOS_WAIT_FOREVER);

  49.                index = 5;

  50.            }

  51.        }

  52.        aos_msleep(10);

  53.    }

  54. }

  55. int application_start(int argc, char *argv[])

  56. {

  57. int count = 0;

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

  59.    uart_test_init();

  60.    uart_test();

  61. }

第二步:

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

相关文章
|
2月前
|
弹性计算 ice
阿里云4核8G云服务器配置价格:热门ECS实例及CPU处理器型号说明
阿里云2025年4核8G服务器配置价格汇总,涵盖经济型e实例、计算型c9i等热门ECS实例,CPU含Intel Xeon及AMD EPYC系列,月费159元起,年付低至1578元,按小时计费0.45元起,实际购买享折扣优惠。
426 1
|
Java 编译器 API
protobuf万字语法详解
当用protocol buffer编译器来运行.proto文件时,编译器将生成所选择语言的代码,这些代码可以操作在.proto文件中定义的消息类型,包括获取、设置字段值,将消息序列化到一个输出流中,以及从一个输入流中解析消息。
241 0
protobuf万字语法详解
|
JavaScript
JS设置日期为0时0分0秒
项目中经常要给设置默认值,搜索从哪天开始,这时候,如果直接通过new Date()来获取时间,会有时分秒,如果快速设置为0时0分0秒?
597 0
|
存储 SQL 分布式计算
Parquet与ORC高性能列式存储
Parquet与ORC高性能列式存储
1085 0
Parquet与ORC高性能列式存储
|
边缘计算 C++ 开发者
.NET 9 中没有 wasi 实验性支持
【11月更文挑战第2天】.NET 9 引入了对 WASI(WebAssembly System Interface)的实验性支持。WASI 扩展了 WebAssembly 的使用场景,使其不仅限于浏览器,还能在服务器端和边缘计算等环境中运行。.NET 9 的 WASI 支持包括构建可在 WASI 环境下运行的应用程序、增强与其他 WASI 模块的互操作性,以及针对 WASI 环境进行性能优化。
211 6
|
9月前
|
人工智能 IDE Java
通义灵码2.0 寻找AI程序员{头号玩家}
通义灵码联合 CHERRY 中国发起“头号玩家”活动,寻找 AI 程序员!体验 AI 智能编码新功能,如图生代码、单元测试、跨语言编程等。完成任意两个任务即可赢取联名定制机械键盘、折扣券及社区积分等奖品。活动截止至4月15日,点击链接参与,探索未来编程乐趣!
148 6
|
监控 安全 数据挖掘
网络游戏服务器如何有效防护DDoS与CC攻击
随着网络游戏行业的蓬勃发展,其背后的服务器架构日益复杂,同时也面临着前所未有的网络安全威胁。其中,分布式拒绝服务(DDoS)和CC(Challenge Collapsar,一种针对网页的攻击方式)攻击尤为突出,它们通过大量伪造请求或恶意流量,使服务器资源耗尽,导致服务中断或响应缓慢。因此,保障网络游戏服务器的安全,有效防护DDoS与CC攻击,已成为游戏行业亟待解决的问题。
|
10月前
|
搜索推荐
企业CRM新选择——轻巧强大的阿里云上的Salesforce CN 企业版正式发布!
企业CRM新选择——轻巧强大的阿里云上的Salesforce CN 企业版正式发布!
|
SQL 关系型数据库 MySQL
MySQL中的 where 1=1会不会影响性能?看完官方文档就悟了!
本文探讨了在Mybatis中使用`where 1=1`进行动态SQL拼接是否会影响性能。通过MySQL官方资料和实际测试表明,`where 1=1`在MySQL 5.7及以上版本中会被优化器优化,因此对性能影响不大。文中详细对比了`where 1=1`与`<where>`标签的使用方法,并建议根据MySQL版本和团队需求选择合适的方式。最后,推荐查找官方资料以确保技术路线正确。
292 4
|
消息中间件 中间件 数据库
NServiceBus:打造企业级服务总线的利器——深度解析这一面向消息中间件如何革新分布式应用开发与提升系统可靠性
【10月更文挑战第9天】NServiceBus 是一个面向消息的中间件,专为构建分布式应用程序设计,特别适用于企业级服务总线(ESB)。它通过消息队列实现服务间的解耦,提高系统的可扩展性和容错性。在 .NET 生态中,NServiceBus 提供了强大的功能,支持多种传输方式如 RabbitMQ 和 Azure Service Bus。通过异步消息传递模式,各组件可以独立运作,即使某部分出现故障也不会影响整体系统。 示例代码展示了如何使用 NServiceBus 发送和接收消息,简化了系统的设计和维护。
255 3

热门文章

最新文章