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

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

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

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

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

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

pYYBAGLaE8CAE2wjAAdIi78KVQI110.png

40PIN引腳功能和位置編號(hào)如下:

pYYBAGLaE7uADuXeAAE1AeazLiE943.png

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

pYYBAGLJQ2OARAB9ABAuIiD4g3g360.png

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

如下圖示:

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

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

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

pYYBAGLaE7yATYOzAAJWpFrGqI8497.jpg

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

環(huán)境搭建完成后,我們來(lái)編寫一個(gè)簡(jiǎn)單的程序庫(kù)操作串口。

//頭文件

#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

//實(shí)現(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); }}

//測(cè)試文件

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

測(cè)試結(jié)果:

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

pYYBAGLaE7uAGV24AADFrS9UlYk048.jpg

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

「地平線旭日X3派,開(kāi)啟你的嵌入式開(kāi)發(fā)之旅」,歡迎正在閱讀的你申請(qǐng)?jiān)囉?,一起交流開(kāi)發(fā)心得

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

原作者:大道至簡(jiǎn)

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

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

    關(guān)注

    5082

    文章

    19126

    瀏覽量

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

    關(guān)注

    87

    文章

    30898

    瀏覽量

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

    關(guān)注

    1791

    文章

    47282

    瀏覽量

    238534
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    光庭信息獲地平線堅(jiān)實(shí)后盾獎(jiǎng)

    后盾獎(jiǎng)”,高度肯定了雙方過(guò)往在智駕領(lǐng)域的合作成效。 過(guò)去兩年內(nèi),光庭信息基于地平線 J3、J5 及 J6 等多個(gè)平臺(tái),打造了“泊車與駕駛一體化解決方案”,提供高性能的自動(dòng)駕駛和泊車功能,可以輕松實(shí)現(xiàn)跨平臺(tái)遷移和新應(yīng)用開(kāi)發(fā),有效幫助
    的頭像 發(fā)表于 12-28 15:07 ?167次閱讀

    地平線榮獲嵐圖汽車“優(yōu)秀合作伙伴獎(jiǎng)”

    近日,以“領(lǐng)航鏈動(dòng),共創(chuàng)共贏”為主題的2024年度嵐圖合作伙伴大會(huì)在武漢召開(kāi)。在此次大會(huì)上,地平線憑借在智駕領(lǐng)域的突出貢獻(xiàn),榮獲嵐圖汽車頒發(fā)的“優(yōu)秀合作伙伴”獎(jiǎng)。該獎(jiǎng)項(xiàng)不僅是嵐圖汽車對(duì)地平線智駕技術(shù)實(shí)力和工程能力的充分認(rèn)可,更是對(duì)地平線
    的頭像 發(fā)表于 12-06 15:56 ?183次閱讀

    地平線征程家族出貨量突破700萬(wàn)

    近日,地平線征程家族出貨量正式突破700萬(wàn)套,在刷新百萬(wàn)量產(chǎn)速度的同時(shí),也標(biāo)志著地平線軟硬結(jié)合的高級(jí)輔助駕駛與高階智駕解決方案實(shí)現(xiàn)大規(guī)模量產(chǎn)落地!
    的頭像 發(fā)表于 11-13 13:38 ?273次閱讀

    地平線榮獲比亞迪“最佳合作伙伴獎(jiǎng)”

    近日,比亞迪舉辦2024年比亞迪新能源汽車核心供應(yīng)商大會(huì)。在此次大會(huì)上,地平線榮獲“最佳合作伙伴獎(jiǎng)”,成為唯一獲得該殊榮的智駕方案供應(yīng)商。該獎(jiǎng)項(xiàng)高度肯定了地平線在智駕技術(shù)和量產(chǎn)能力方面的突出貢獻(xiàn)。地平線創(chuàng)始人兼CEO余凱受邀出席
    的頭像 發(fā)表于 11-06 14:15 ?386次閱讀

    智駕科技企業(yè)地平線登陸港交所

    近日,智駕科技企業(yè)地平線地平線機(jī)器人-W,股票代碼:9660.HK)在香港交易所主板成功掛牌上市,募資總額高達(dá)54.07億港元,成為港股今年最大的科技IPO。
    的頭像 發(fā)表于 10-28 16:37 ?277次閱讀

    ETAS支持地平線征程6 AUTOSAR版本發(fā)布

    地平線于2024年北京車展期間推出了覆蓋自動(dòng)駕駛?cè)珗?chǎng)景的征程6產(chǎn)品。征程6是地平線新一代家族系列產(chǎn)品,能夠覆蓋從主動(dòng)安全ADAS到城區(qū)全場(chǎng)景NOA的智能駕駛需求。
    的頭像 發(fā)表于 10-15 17:34 ?721次閱讀

    智駕科技企業(yè)地平線通過(guò)港交所聆訊 IPO進(jìn)入倒計(jì)時(shí)

    10月8日,中國(guó)智能駕駛軟硬一體化方案地平線迎來(lái)IPO的最新進(jìn)展:港交所網(wǎng)站掛出地平線PHIP版招股書(shū),這意味著智駕科技企業(yè)地平線(Horizon Robotics)正式通過(guò)港交所聆訊,即將踏入港股市場(chǎng)。根據(jù)網(wǎng)站掛出的信息顯示,
    的頭像 發(fā)表于 10-09 10:05 ?4167次閱讀
    智駕科技企業(yè)<b class='flag-5'>地平線</b>通過(guò)港交所聆訊 IPO進(jìn)入倒計(jì)時(shí)

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

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

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

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

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

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

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

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

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

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

    地平線提交香港IPO申請(qǐng)

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

    地平線向港交所遞交招股書(shū)

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

    地平線正式開(kāi)源Sparse4D算法

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