加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 使用open()函數(shù)打開串口設(shè)備
    • 獲取當(dāng)前配置參數(shù)
    • 寫配置
    • 清空緩沖區(qū)
    • 配置生效
    • 串口接收函數(shù)
    • 串口發(fā)送函數(shù)
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-串口通訊編程示例之串口編寫程序

10/24 17:04
1350
閱讀需 3 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

使用open()函數(shù)打開串口設(shè)備

首先使用open()函數(shù)打開串口設(shè)備/dev/ttymxc6,設(shè)備使用了O_RDWR | O_NOCTTY | O_NDELAY標(biāo)志,分別代表以讀寫方式打開、不讓設(shè)備成為控制終端且設(shè)置非阻塞模式,也就是當(dāng)無法打開設(shè)備時(shí),不會(huì)在原地等待,會(huì)馬上返回;

上面使用了if語句判斷文件描述符fd,如果open()返回的文件描述符<0,則代表設(shè)備打開失敗,輸出“Can't Open Serial Port /dev/ttymxc6”;

如果是其他情況,則說明設(shè)備打開成功,把設(shè)備的波特率,數(shù)據(jù)位,停止位,校驗(yàn)位打印出來;

獲取當(dāng)前配置參數(shù)

前面介紹過tcgetattr()函數(shù)的用法,在這里就是獲取上面open()函數(shù)返回的文件描述符fd作為tcgetattr()的參數(shù),然后創(chuàng)建一個(gè)termios名為oldtio來儲(chǔ)存串口舊的參數(shù)。

寫配置

程序中是對(duì)newtio結(jié)構(gòu)體中的c_cflag加上CLOCAL | CREAD,意為使驅(qū)動(dòng)程序啟動(dòng)接收字符裝置,同時(shí)忽略串口信號(hào)線的狀態(tài)。

另外對(duì)c_cflag與上了~CSIZE,即設(shè)置數(shù)據(jù)位。

清空緩沖區(qū)

使用tcflush()函數(shù)清空緩沖區(qū),避免本次將之前殘存的數(shù)據(jù)發(fā)送出去引起混亂。

配置生效

前面已經(jīng)完成了對(duì) struct termios 結(jié)構(gòu)體各個(gè)成員進(jìn)行配置,但是配置還未生效,需要將配置參數(shù)寫入到終端設(shè)備(串口硬件),使其生效。通過 tcsetattr()函數(shù)將配置參數(shù)寫入到硬件設(shè)備。

串口接收函數(shù)

使用read()函數(shù)讀緩沖區(qū)的數(shù)據(jù),即串口接收:

串口發(fā)送函數(shù)

使用write()函數(shù)發(fā)送緩沖區(qū)的數(shù)據(jù),即串口發(fā)送:

相關(guān)推薦

電子產(chǎn)業(yè)圖譜