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

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

    关注

    5209

    文章

    20622

    浏览量

    336752
  • AI
    AI
    +关注

    关注

    91

    文章

    40922

    浏览量

    302511
  • 人工智能
    +关注

    关注

    1819

    文章

    50287

    浏览量

    266826
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    地平线11篇论文强势入选CVPR 2026

    论文收录结果。地平线凭借深厚的技术积淀与前瞻的科研布局,共有11篇论文成功入选,覆盖端到端自动驾驶、3D重建、世界模型、具身智能等多个核心领域,充分彰显地平线在前沿技术领域的顶尖研发水平。
    的头像 发表于 03-18 15:18 773次阅读
    <b class='flag-5'>地平线</b>11篇论文强势入选CVPR 2026

    地平线正式开源HoloBrain VLA基座模型

    2月13日,地平线正式宣布其HoloBrain-0基座模型及框架全面开源。本次开源不仅包括HoloBrain-0核心算法,地平线同步开放完整基础设施RoboOrchard。作为地平线机器人实验室
    的头像 发表于 02-26 10:05 441次阅读
    <b class='flag-5'>地平线</b>正式开源HoloBrain VLA基座模型

    地平线与行深智能达成战略合作

    12月9日,在“向高 同行丨2025地平线技术生态大会”上,地平线与无人驾驶技术与智慧物流产品提供商行深智能正式签署战略合作协议,行深智能将基于地平线征程6P打造L4级物流场景自动驾驶方案,并计划于2026年6月启动量产部署,为
    的头像 发表于 12-16 16:18 1348次阅读

    地平线与元戎启行达成战略合作

    在市场需求与技术演进的共同驱动下,高阶辅助驾驶的规模化普及已步入关键窗口期。12月9日,在“向高 同行丨2025地平线技术生态大会”上,地平线与国际领先的人工智能企业元戎启行达成合作,双方将
    的头像 发表于 12-16 16:08 464次阅读

    四维图新亮相2025地平线技术生态大会

    2025年12月8日-9日,在深圳举办的“向高同行——2025地平线技术生态大会”上,四维图新及参股公司鉴智机器人联合亮相,集中展示了基于地平线芯片打造的核心辅助驾驶系统及高阶智驾方案。
    的头像 发表于 12-12 17:13 1004次阅读

    知行科技亮相2025地平线技术生态大会

    12月8日、9日,知行科技作为地平线征程6BEM系列芯片软硬件合作伙伴亮相地平线技术生态大会,并展出了基于征程6BEM系列芯片打造的组合辅助驾驶解决方案,覆盖主动安全到高阶领航功能;同时,知行科技iRC100P具身AI BOX也亮相大会,成为知行科技与
    的头像 发表于 12-12 12:50 1454次阅读

    地平线HSD量产先锋品鉴会圆满落幕

    2025年11月19日-24日,地平线在广州举办Drive on Horizon·HSD量产先锋品鉴会。首搭地平线HSD及征程6P的星途ET5、搭载征程6的深蓝L06开启辅助驾驶体验,以出色的实际
    的头像 发表于 11-27 11:27 532次阅读

    地平线助力博世中阶智能辅助驾驶方案量产交付

    2025年4月,地平线与博世深化战略合作,双方基于征程6系列加速智能辅助驾驶方案的研发与应用。近日,搭载征程6M的博世中阶智能辅助驾驶方案的全新量产合作车型东风奕eπ007+、北京越野BJ40增程元境智行版先后上市,标志着地平线
    的头像 发表于 11-19 11:47 667次阅读

    地平线与Unity中国达成战略合作

    近日,中国智驾科技领军企业地平线与全球领先的实时3D内容创作和运营平台Unity正式签署战略合作协议。双方将深度融合地平线HSD (Horizon SuperDrive) 人机交互系统与Unity
    的头像 发表于 11-03 16:43 1658次阅读

    地平线与哈啰正式签署战略合作协议

    9月11日,在2025Inclusion·外滩大会上,地平线与哈啰正式签署战略合作协议。双方将基于Robotaxi运营场景和需求,发挥各自技术优势,共同打造极致低成本、高安全、高可靠、高可用的智能
    的头像 发表于 09-12 14:25 1034次阅读

    星途ET5搭载地平线HSD及征程6P亮相2025成都车展

    8月29日,成都国际车展首日,星途汽车旗下全新中型SUV——星途ET5携地平线HSD及征程6P计算方案正式亮相。作为全球首款搭载地平线HSD城区辅助驾驶系统的车型,星途ET5的亮相标志着地平线HSD
    的头像 发表于 09-01 11:11 995次阅读

    Arm携手地平线推动汽车智能化变革

    近日,地平线在上海举办了 2025 年度产品发布会,推出了 L2 城区辅助驾驶系统——地平线 HSD,不仅集中展示了自身领先的技术实力,更深刻诠释了汽车智能化加速普及的产业发展趋势,成为上海车展的前哨。地平线征程 6P 作为技术
    的头像 发表于 04-28 14:28 1369次阅读

    地平线与博世达成战略合作

    近日,地平线正式宣布与全球领先的汽车技术与服务供应商博世达成战略合作。根据协议,博世将基于地平线征程6B打造新一代多功能摄像头,并基于征程6E/M打造博世纵横辅助驾驶升级版。目前,基于征程6系列开发的博世新一代多功能摄像头与博世纵横辅助驾驶升级版均获得多家车企的项目定点。
    的头像 发表于 04-27 13:43 1337次阅读

    地平线城区辅助驾驶系统HSD解读

    近日,在2025地平线年度产品发布会上,地平线城区辅助驾驶系统HSD正式发布。作为国内首个软硬结合全栈开发的城区辅助驾驶系统,地平线HSD搭载当前最高性能的国产智驾计算方案征程6P,采用一段式端到端
    的头像 发表于 04-22 14:44 2599次阅读

    征程6P全球首发!HSD炸裂登场,地平线携手奇瑞发布首款量产车型

    地平线创始人兼CEO余凯宣布,地平线重磅推出L2城区辅助驾驶系统——地平线HSD,构建体验“类人”、用户“信任”的城区辅助驾驶新解。现场,地平线创始人兼CEO余凯和奇瑞控股集团董事长尹
    的头像 发表于 04-21 18:07 3646次阅读
    征程6P全球首发!HSD炸裂登场,<b class='flag-5'>地平线</b>携手奇瑞发布首款量产车型