0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

地平線旭日X3派試用-玩轉(zhuǎn)串口通信

地瓜機(jī)器人 ? 2022-07-22 11:27 ? 次閱讀

旭日X3派開發(fā)板提供了40PIN標(biāo)準(zhǔn)接口,方便用戶擴(kuò)展外圍設(shè)備。其中物理引腳編號8和10為串口通信發(fā)送和接收使用(8-TXD,10-RXD)。

pYYBAGLaE8CAE2wjAAdIi78KVQI110.png

40PIN引腳功能和位置編號如下:

pYYBAGLaE7uADuXeAAE1AeazLiE943.png

串口轉(zhuǎn)USB設(shè)備引腳和功能描述如下:

pYYBAGLJQ2OARAB9ABAuIiD4g3g360.png

我們可以使用3根杜邦線 + 一個串口轉(zhuǎn)USB設(shè)備(旭日X3派開發(fā)包附贈) + 一臺筆記本電腦 + putty(串口工具)搭建串口通信開發(fā)環(huán)境。

如下圖示:

1)6號管腳和串口轉(zhuǎn)USB GND連接

2)8號管腳和串口轉(zhuǎn)USB RXD連接

3)10號管腳和串口轉(zhuǎn)USB TXD連接

pYYBAGLaE7yATYOzAAJWpFrGqI8497.jpg

從40PIN管腳功能圖我們知道,8號和10號管腳為UART3,對應(yīng)的設(shè)備文件為 /dev/ttyS3。

環(huán)境搭建完成后,我們來編寫一個簡單的程序庫操作串口。

//頭文件

#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

//實現(xiàn)文件

#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)

測試結(jié)果:

X3派側(cè)echo每隔1s發(fā)送一次遞增數(shù)據(jù),PC側(cè)putty接收并打印。

pYYBAGLaE7uAGV24AADFrS9UlYk048.jpg

文中所有文件,均已打包在附件中。歡迎大家一起來玩轉(zhuǎn)串口通信吧

「地平線旭日X3派,開啟你的嵌入式開發(fā)之旅」,歡迎正在閱讀的你申請試用,一起交流開發(fā)心得

本文轉(zhuǎn)自地平線開發(fā)者社區(qū)

原作者:大道至簡

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5046

    文章

    18817

    瀏覽量

    298553
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    28877

    瀏覽量

    266225
  • 人工智能
    +關(guān)注

    關(guān)注

    1787

    文章

    46061

    瀏覽量

    235015
收藏 人收藏

    評論

    相關(guān)推薦

    地平線Journey 3的電源設(shè)計

    電子發(fā)燒友網(wǎng)站提供《地平線Journey 3的電源設(shè)計.pdf》資料免費(fèi)下載
    發(fā)表于 09-04 10:48 ?0次下載
    <b class='flag-5'>地平線</b>Journey <b class='flag-5'>3</b>的電源設(shè)計

    地平線技術(shù)開放日:余凱勾勒智能駕駛新藍(lán)圖

    在8月28日的地平線技術(shù)開放日上,公司創(chuàng)始人兼CEO余凱以高調(diào)的姿態(tài),詳細(xì)闡述了地平線在智能駕駛領(lǐng)域的雄心壯志與商業(yè)邏輯。他不僅重申了地平線的定位,還明確了SuperDrive智能駕駛解決方案的標(biāo)桿地位,并強(qiáng)調(diào)了軟件在芯片公司生
    的頭像 發(fā)表于 08-30 14:33 ?916次閱讀

    地平線征程家族出貨量破600萬,智駕計算方案領(lǐng)跑市場

    近日,地平線征程家族傳來振奮人心的消息,其車載智能計算方案的出貨量已正式突破600萬套大關(guān),再次刷新行業(yè)記錄,彰顯了地平線在智能駕駛領(lǐng)域的強(qiáng)勁實力與高速增長態(tài)勢。
    的頭像 發(fā)表于 08-22 17:17 ?530次閱讀

    地平線港股IPO獲證監(jiān)會備案

    自動駕駛領(lǐng)域的明星企業(yè)——地平線機(jī)器人(Horizon Robotics),近期獲得了中國證監(jiān)會的批準(zhǔn),將在香港聯(lián)合交易所進(jìn)行首次公開募股(IPO)。此次IPO的順利推進(jìn),標(biāo)志著地平線向資本市場邁出了重要一步。
    的頭像 發(fā)表于 08-13 15:37 ?539次閱讀

    東軟睿馳NeuSAR成功適配地平線征程6系列

    近日,東軟睿馳基礎(chǔ)軟件平臺產(chǎn)品NeuSAR完成地平線征程6系列適配,在安全、高效的軟件平臺基礎(chǔ)之上,將進(jìn)一步聚焦客戶差異化需求,提供兼顧性能、體驗和量產(chǎn)效率的智能汽車基礎(chǔ)軟件平臺解決方案
    的頭像 發(fā)表于 07-29 09:27 ?983次閱讀

    智能駕駛企業(yè)地平線赴港IPO

    智能駕駛科技領(lǐng)軍企業(yè)地平線正式向香港交易所遞交上市申請,此舉立刻引起了市場對智能駕駛板塊的熱烈關(guān)注。地平線作為國內(nèi)自動駕駛芯片及解決方案的佼佼者,其在智能駕駛技術(shù)研發(fā)和市場地位上的卓越表現(xiàn)一直備受矚目。此次上市計劃的啟動,不僅將推動智能駕駛行業(yè)的資本化進(jìn)程,更將為整個產(chǎn)業(yè)
    的頭像 發(fā)表于 03-29 16:32 ?665次閱讀

    智能駕駛頭部企業(yè)地平線赴港IPO

    地平線向港交所遞交了上市申請,正式啟動港股IPO進(jìn)程,這一行動引起了市場的廣泛關(guān)注。在此次上市過程中,高盛、摩根士丹利以及中信建投共同擔(dān)任聯(lián)席保薦人,為地平線的上市之路提供了強(qiáng)大的支持。
    的頭像 發(fā)表于 03-28 16:45 ?668次閱讀

    地平線提交香港IPO申請

    智能駕駛計算方案提供商“地平線”正式遞交港股上市申請。據(jù)其公開文件,地平線在2023年實現(xiàn)了15.5億元的營收,同比顯著增長71.3%,毛利達(dá)到10.94億元,毛利率高達(dá)70.5%。
    的頭像 發(fā)表于 03-27 16:11 ?532次閱讀

    地平線向港交所遞交招股書

    智能駕駛計算方案領(lǐng)軍者地平線,近日正式向港交所遞交了招股書,高盛、摩根士丹利及中信建投為其聯(lián)席保薦人。這并非地平線首次試水資本市場,早在2021年,地平線就計劃科創(chuàng)板上市,并一度傳出赴美IPO的消息,但受資本市場環(huán)境影響,其上市
    的頭像 發(fā)表于 03-27 16:02 ?437次閱讀

    地平線創(chuàng)始人余凱:已超110款量產(chǎn)車型采用地平線芯片

    自2020年以來,地平線已成功與長安汽車合作推出UNI—K、UNI—T、UNI—V等產(chǎn)品;直至今年,已有近30位國內(nèi)車企成為其重要客戶,如比亞迪和理想汽車均為其智能駕駛芯片的主要采購商。
    的頭像 發(fā)表于 03-18 09:49 ?356次閱讀

    地平線正式開源Sparse4D算法

    地平線將業(yè)內(nèi)領(lǐng)先的純視覺自動駕駛算法——Sparse4D系列算法開源,推動行業(yè)更多開發(fā)者共同參與到端到端自動駕駛、稀疏感知等前沿技術(shù)方向的探索中。目前,Sparse4D算法已在GitHub平臺上線,開發(fā)者可關(guān)注地平線GitHub官方賬號“Horizon Robotics”
    的頭像 發(fā)表于 01-23 10:18 ?606次閱讀

    地平線再獲奇瑞協(xié)同創(chuàng)新特別貢獻(xiàn)獎

    在奇瑞汽車2024供應(yīng)鏈生態(tài)圈年會上,地平線榮獲奇瑞汽車頒發(fā)的“協(xié)同創(chuàng)新特別貢獻(xiàn)獎”,這也是地平線連續(xù)第二年榮獲該獎項,地平線總裁陳黎明博士受邀出席并代表公司獲頒獎項。與此同時,陳黎明博士于1月16
    的頭像 發(fā)表于 01-22 11:16 ?1033次閱讀

    地平線機(jī)器人開發(fā)UART串口通信程序

    運(yùn)行示例程序 接下來就可以運(yùn)行串口通信的例程了。 $ sudo python3 test_serial.py 實物接線完成后,在旭日X3
    的頭像 發(fā)表于 11-27 10:55 ?317次閱讀

    地平線開啟合資車企量產(chǎn)落地 啟辰VX6搭載地平線征程3芯片以及Mono 3單目視覺感知方案

    11月3日,地平線與東風(fēng)日產(chǎn)的首款量產(chǎn)合作車型——啟辰VX6正式上市,實現(xiàn)了征程芯片賦能合資車企車型的首次突破。憑借率先交出的量產(chǎn)實績,地平線正在成為合資車企智能化轉(zhuǎn)型的首選合作伙伴,助力更多車企
    的頭像 發(fā)表于 11-10 20:32 ?2143次閱讀

    地平線簽下超過150款車型前裝量產(chǎn)項目定點

    。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 由科沃斯機(jī)器人發(fā)起的科沃斯蒲公英加速器 (X-MAN)以“加速技術(shù)創(chuàng)業(yè)”為使命,一直專注于推進(jìn)機(jī)器人、人工智能等前沿科技領(lǐng)域的創(chuàng)新。而作為長期合作伙伴,地平線與科沃斯自2021年合作以來,不斷以領(lǐng)先的
    的頭像 發(fā)表于 10-07 15:05 ?957次閱讀