0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

地平线旭日X3派试用-玩转串口通信

地瓜机器人 2022-07-22 11:27 次阅读

旭日X3派开发板提供了40PIN标准接口,方便用户扩展外围设备。其中物理引脚编号8和10为串口通信发送和接收使用(8-TXD,10-RXD)。

pYYBAGLaE8CAE2wjAAdIi78KVQI110.png

40PIN引脚功能和位置编号如下:

pYYBAGLaE7uADuXeAAE1AeazLiE943.png

串口转USB设备引脚和功能描述如下:

pYYBAGLJQ2OARAB9ABAuIiD4g3g360.png

我们可以使用3根杜邦线 + 一个串口转USB设备(旭日X3派开发包附赠) + 一台笔记本电脑 + putty(串口工具)搭建串口通信开发环境。

如下图示:

1)6号管脚和串口转USB GND连接

2)8号管脚和串口转USB RXD连接

3)10号管脚和串口转USB TXD连接

pYYBAGLaE7yATYOzAAJWpFrGqI8497.jpg

从40PIN管脚功能图我们知道,8号和10号管脚为UART3,对应的设备文件为 /dev/ttyS3。

环境搭建完成后,我们来编写一个简单的程序库操作串口。

//头文件

#ifndef SERIAL_H#define SERIAL_Htypedef struct Serial Serial;struct Serial{ int (*Open)(Serial *pDevice, const char *sDevice, int baudrate); void (*Close)(Serial *pDevice); int (*Write)(Serial *pDevice, const char *buf, int len); int (*Read)(Serial *pDevice, char *buf, int len);};Serial* CreateSerialDevice();void DestroySerialDevice(Serial *pDevice);#endif //SERIAL

//实现文件

#include #include #include #include #include #include #include #include "serial.h"typedef struct SerialImpl{ Serial base; int handle; int baudrate; char sDevice[64];}SerialImpl;int speed_arr[] = {B1500000, B1152000, B1000000, B921600, B576000, B500000, B460800, B230400, B115200, B57600, B38400, B19200, B9600, B4800, B2400, B1800, B1200, B600, B300, B200, B150, B134, B110, B75, B50, B0};int baudrate_arr[] = {1500000, 1152000, 1000000, 921600, 576000, 500000, 460800, 230400, 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1800, 1200, 600, 300, 200, 150, 134, 110, 75, 50, 0};int serial_setting(Serial *pDevice, int baudrate);void serial_close(Serial *pDevice);int serial_comspeed_get(int baudrate){ for (int i = 0; i < sizeof(baudrate_arr)/ sizeof(baudrate_arr[0]); ++i) { if (baudrate_arr[i] == baudrate) { return speed_arr[i]; } } return -1;}int serial_open(Serial *pDevice, const char *sDevice, int baudrate){ int handle = -1; SerialImpl *impl = (SerialImpl*)pDevice; if (!impl) { return -1; } if (!sDevice || sDevice[0] == '\0') { return -2; } handle = open(sDevice, O_RDWR, 0); if (-1 == handle) { perror("open"); return -3; } impl->handle = handle; snprintf(impl->sDevice, sizeof(impl->sDevice), "%s", sDevice); if (0 != serial_setting(pDevice, baudrate)) { serial_close(pDevice); return -4; } return 0;}int serial_setting(Serial *pDevice, int baudrate){ int handle = -1; int speed = 0; struct termios options; SerialImpl *impl = (SerialImpl*)pDevice; if (!impl) { return -1; } handle = impl->handle; if (handle <= 0) { return -2; } speed = serial_comspeed_get(baudrate); if (speed < 0) { return -3; } impl->baudrate = baudrate; if (tcgetattr(handle, &options) != 0) { perror("tcgetattr"); return -4; } if (cfsetispeed(&options, speed) != 0 || cfsetispeed(&options, speed) != 0) { perror("cfsetispeed"); return -5; } //no partity options.c_cflag &= ~PARENB; options.c_iflag &= ~INPCK; //8bits options.c_cflag |= CS8; //stop 1bits options.c_cflag &= ~CSTOPB; //no flow control options.c_cflag &= ~CRTSCTS; options.c_cflag &= ~CSIZE; if (tcsetattr(handle, TCSANOW, &options) != 0) { perror("tcsetattr"); return -6; } return 0;}int serial_read(Serial *pDevice, char *buf, int len){ int handle = -1; int size = 0; SerialImpl *impl = (SerialImpl*)pDevice; if (!impl) { return -1; } handle = impl->handle; if (handle <= 0) { return -2; } if (!buf || len <= 0) { return -3; } size = read(handle, buf, len); if (-1 == size) { perror("read"); return -4; } return size;}int serial_write(Serial *pDevice, const char *buf, int len){ int handle = -1; int size = 0; SerialImpl *impl = (SerialImpl*)pDevice; if (!impl) { return -1; } handle = impl->handle; if (handle <= 0) { return -2; } if (!buf || len <= 0) { return -3; } size = write(handle, buf, len); if (-1 == size) { perror("write"); return -4; } return size;}void serial_close(Serial *pDevice){ int handle = -1; SerialImpl *impl = (SerialImpl*)pDevice; if (!impl) { return; } handle = impl->handle; if (handle != -1) { close(handle); }}Serial* CreateSerialDevice(){ SerialImpl *pDevice = (SerialImpl*)malloc(sizeof(SerialImpl)); if (pDevice) { pDevice->base.Open = serial_open; pDevice->base.Close = serial_close; pDevice->base.Write = serial_write; pDevice->base.Read = serial_read; pDevice->handle = -1; pDevice->baudrate = 0; pDevice->sDevice[0] = '\0'; } return (Serial*)pDevice;}void DestroySerialDevice(Serial *pDevice){ if (pDevice) { pDevice->Close(pDevice); free(pDevice); }}

//测试文件

#include #include #include #include #include "serial.h"int main(int argc, char *argv[]){ char sbuf[128]; int count; int size; int ret; Serial *port = CreateSerialDevice(); assert(port != NULL); ret = port->Open(port, "/dev/ttyS3", 921600); assert(ret == 0); while (1) { snprintf(sbuf, sizeof(sbuf), "%d", count++); size = port->Write(port, sbuf, strlen(sbuf)); assert(size != -1); usleep(1000*1000); } port->Close(port); DestroySerialDevice(port); return 0;}

//工程文件

cmake_minimum_required(VERSION 3.0)project(serial)set(CMAKE_BUILD_TYPE "Debug")add_library(serial SHARED serial.c)add_executable(echo echo.c)target_link_libraries(echo serial)

测试结果:

X3派侧echo每隔1s发送一次递增数据,PC侧putty接收并打印。

pYYBAGLaE7uAGV24AADFrS9UlYk048.jpg

文中所有文件,均已打包在附件中。欢迎大家一起来玩转串口通信吧

「地平线旭日X3派,开启你的嵌入式开发之旅」,欢迎正在阅读的你申请试用,一起交流开发心得

本文转自地平线开发者社区

原作者:大道至简

原链接:https://developer.horizon.ai/forumDetail/98129540173361338

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19108

    浏览量

    304836
  • AI
    AI
    +关注

    关注

    87

    文章

    30757

    浏览量

    268902
  • 人工智能
    +关注

    关注

    1791

    文章

    47206

    浏览量

    238274
收藏 人收藏

    评论

    相关推荐

    地平线荣获岚图汽车“优秀合作伙伴奖”

    近日,以“领航链动,共创共赢”为主题的2024年度岚图合作伙伴大会在武汉召开。在此次大会上,地平线凭借在智驾领域的突出贡献,荣获岚图汽车颁发的“优秀合作伙伴”奖。该奖项不仅是岚图汽车对地平线智驾技术实力和工程能力的充分认可,更是对地平线
    的头像 发表于 12-06 15:56 168次阅读

    地平线征程家族出货量突破700万

    近日,地平线征程家族出货量正式突破700万套,在刷新百万量产速度的同时,也标志着地平线软硬结合的高级辅助驾驶与高阶智驾解决方案实现大规模量产落地!
    的头像 发表于 11-13 13:38 247次阅读

    地平线荣获比亚迪“最佳合作伙伴奖”

    近日,比亚迪举办2024年比亚迪新能源汽车核心供应商大会。在此次大会上,地平线荣获“最佳合作伙伴奖”,成为唯一获得该殊荣的智驾方案供应商。该奖项高度肯定了地平线在智驾技术和量产能力方面的突出贡献。地平线创始人兼CEO余凯受邀出席
    的头像 发表于 11-06 14:15 373次阅读

    智驾科技企业地平线登陆港交所

    近日,智驾科技企业地平线地平线机器人-W,股票代码:9660.HK)在香港交易所主板成功挂牌上市,募资总额高达54.07亿港元,成为港股今年最大的科技IPO。
    的头像 发表于 10-28 16:37 269次阅读

    ETAS支持地平线征程6 AUTOSAR版本发布

    地平线于2024年北京车展期间推出了覆盖自动驾驶全场景的征程6产品。征程6是地平线新一代家族系列产品,能够覆盖从主动安全ADAS到城区全场景NOA的智能驾驶需求。
    的头像 发表于 10-15 17:34 695次阅读

    地平线成功通过港交所聆讯,即将登陆港股市场

    近日,智能驾驶科技企业地平线(Horizon Robotics)正式通过港交所聆讯,即将踏入港股市场,开启新的篇章。这一里程碑式的进展标志着地平线在智能驾驶领域的技术实力和市场表现得到了广泛认可。
    的头像 发表于 10-09 16:31 350次阅读

    智驾科技企业地平线通过港交所聆讯 IPO进入倒计时

    10月8日,中国智能驾驶软硬一体化方案地平线迎来IPO的最新进展:港交所网站挂出地平线PHIP版招股书,这意味着智驾科技企业地平线(Horizon Robotics)正式通过港交所聆讯,即将踏入港股市场。根据网站挂出的信息显示,
    的头像 发表于 10-09 10:05 4151次阅读
    智驾科技企业<b class='flag-5'>地平线</b>通过港交所聆讯 IPO进入倒计时

    地平线Journey 3的电源设计

    电子发烧友网站提供《地平线Journey 3的电源设计.pdf》资料免费下载
    发表于 09-04 10:48 0次下载
    <b class='flag-5'>地平线</b>Journey <b class='flag-5'>3</b>的电源设计

    地平线技术开放日:余凯勾勒智能驾驶新蓝图

    在8月28日的地平线技术开放日上,公司创始人兼CEO余凯以高调的姿态,详细阐述了地平线在智能驾驶领域的雄心壮志与商业逻辑。他不仅重申了地平线的定位,还明确了SuperDrive智能驾驶解决方案的标杆地位,并强调了软件在芯片公司生
    的头像 发表于 08-30 14:33 1144次阅读

    地平线港股IPO获证监会备案

    自动驾驶领域的明星企业——地平线机器人(Horizon Robotics),近期获得了中国证监会的批准,将在香港联合交易所进行首次公开募股(IPO)。此次IPO的顺利推进,标志着地平线向资本市场迈出了重要一步。
    的头像 发表于 08-13 15:37 688次阅读

    智能驾驶企业地平线赴港IPO

    智能驾驶科技领军企业地平线正式向香港交易所递交上市申请,此举立刻引起了市场对智能驾驶板块的热烈关注。地平线作为国内自动驾驶芯片及解决方案的佼佼者,其在智能驾驶技术研发和市场地位上的卓越表现一直备受瞩目。此次上市计划的启动,不仅将推动智能驾驶行业的资本化进程,更将为整个产业
    的头像 发表于 03-29 16:32 774次阅读

    智能驾驶头部企业地平线赴港IPO

    地平线向港交所递交了上市申请,正式启动港股IPO进程,这一行动引起了市场的广泛关注。在此次上市过程中,高盛、摩根士丹利以及中信建投共同担任联席保荐人,为地平线的上市之路提供了强大的支持。
    的头像 发表于 03-28 16:45 854次阅读

    地平线提交香港IPO申请

    智能驾驶计算方案提供商“地平线”正式递交港股上市申请。据其公开文件,地平线在2023年实现了15.5亿元的营收,同比显著增长71.3%,毛利达到10.94亿元,毛利率高达70.5%。
    的头像 发表于 03-27 16:11 720次阅读

    地平线向港交所递交招股书

    智能驾驶计算方案领军者地平线,近日正式向港交所递交了招股书,高盛、摩根士丹利及中信建投为其联席保荐人。这并非地平线首次试水资本市场,早在2021年,地平线就计划科创板上市,并一度传出赴美IPO的消息,但受资本市场环境影响,其上市
    的头像 发表于 03-27 16:02 560次阅读

    地平线正式开源Sparse4D算法

    地平线将业内领先的纯视觉自动驾驶算法——Sparse4D系列算法开源,推动行业更多开发者共同参与到端到端自动驾驶、稀疏感知等前沿技术方向的探索中。目前,Sparse4D算法已在GitHub平台上线,开发者可关注地平线GitHub官方账号“Horizon Robotics”
    的头像 发表于 01-23 10:18 767次阅读