Linux 串口编程三 使用termios与API进行串口程序开发
在 termios 結構體以及內部終端控制標志中,并非所有的參數對于實際的物理串口都是有效的,在使用過程中也不需要對于所有標志的作用都有所理解。事實上,快速掌握一項技術的核心點也是一種學習能力。對于使用,熟悉并掌握操作框架十分有用。對于串口編程,核心步驟也十分鮮明,下面首先介紹 termios 相關的 API 函數。
核心配置函數
1. int tcgetattr(int fd, struct termios *termios_p);
函數功能:獲取當前終端接口配置并將配置寫入參數 termios_p 指向的 termios 結構體。一般操作時將配置保存為 old_termios,可以在需要時通過 tcsetattr 函數對終端接口進行重新配置。
2.?int tcsetattr(int fd, int actions, const struct termios *termios_p);
函數功能:使用 termios_p 指向的 termios 結構體對終端接口進行配置,參數 actions 控制修改方式,共有3種修改方式,如下所示:
- TCSANOW:立刻對配置進行修改。
- TCSADRAIN:等當前輸出完成后再對配置進行修改。
- TCSAFLUSH:等當前輸出完成后再對配置進行修改,但丟棄還未從 read 調用返回的當前可用的任何輸入。
終端速度函數
1.speed_t cfgetispeed(const struct termios *);
函數功能:獲取終端讀取速度。
2.speed_t cfgetospeed(const struct termios *);
函數功能:獲取終端輸出速度。
3.int cfsetispeed(const struct termios *, speed_t speed);
函數功能:設置終端讀取速度。
4.int cfgetispeed(const struct termios *, speed_t speed);
函數功能:設置終端輸出速度。
Note:輸入與輸出速度是分開控制的;根據函數形參,這些函數只作用于 termios 結構,而不是直接作用于設備。因此如果要設置速度,就要首先使用 tcgetattr 獲取當前終端配置,然后使用上述函數設置速度,最后使用 tcsetattr 將 termios 配置寫入設備。此外,還要注意系統支持的波特率范圍,通過查看 termios.h 可以獲取到。
其他控制函數
1.int tcdrain(int fd);
函數功能:讓調用程序一直等待,直到所有排隊的輸出都已發送完畢。
2.int tcflow(int fd, int flowtype);
函數功能:用于暫停或重新開始輸出。
3.int tcflush(int fd, int in_out_selector);
函數功能:用于清空輸入、輸出或者兩者同時清空。
Note:如果串口程序發生阻塞,檢查程序中是否調用了上述 API。在打開終端或者串口設備之前,對應的輸入或者待輸出數據緩存在驅動程序中,因此要根據實際需求選擇是否調用 tcflush 清空相應緩沖區數據。關于終端串口 API 函數的講解本篇就到這里,在實際應用開發中必須明確程序中配置的標志位和函數的作用,在不確定作用的情況下最好保持默認設置。
關于 Linux 串口編程的其他文章,可以移步至以下鏈接:
有想法或者疑問可以給我郵件或者評論,覺得本文對你有幫助就點贊吧~:-D
總結
以上是生活随笔為你收集整理的Linux 串口编程三 使用termios与API进行串口程序开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十种代码字体
- 下一篇: Rational Rose 2003 下