① linux C 配置串口
配置串口需要包含頭文件
其中最核心的配置結構體為:
如何獲取該結構呢?我們操作串口跟操作文件一樣,也是調用 open() 函數來打開串口,
這樣我們就能夠得到一個文件描述符 fd ,然後就可以調用 tcgetattr() 函數來獲取上述配置結構體了。
Linux 串口默認的配置為:波特率 9600,數據位 8 位,無奇偶校驗,停止位 1 位,無 CTS/RTS 。
以下介紹一些常用的配置項:波特率、奇偶校驗、數據位、停止位、硬體控制流。
相關介面:
Linux 將串口的波特率分為了輸入波特率和輸出波特率,不過最常用的場景是將兩者設置成一樣。
cfgetispeed() 函數獲取輸入波特率, cfgetospeed() 函數獲取輸出波特率。 cfsetispeed() 函數設置輸入波特率, cfsetospeed() 函數用於設置輸出波特率,當然 cfsetspeed() 函數擴展為同時設置輸入和輸出波特率。
上述介面中的 speed_t 是一系列波特率的標志位,例如常用的 115200 波特率就為 B115200,參考下述選項:
設置奇偶校驗位可以通過修改 termios 結構體中的 c_cflag 成員來實現,若無校驗,則將 PARENB 位設為 0;若有校驗,則 PARENB 為 1。之後再根據 PARODD 來區分奇偶校驗, PARODD 為 1 表示奇校驗, PARODD 為 0 表示偶校驗。例如設置無奇偶校驗位:
設置數據位可以通過修改 termios 結構體中的 c_cflag 成員來實現,CS5、CS6、CS7 和 CS8 分別代表數據位 5、6、7 和 8。不過在設置數據位之前,需要先用 CSIZE 來做屏蔽欄位,清楚這幾個標志位,例如設置數據位為 8 位:
設置停止位可以通過修改 termios 結構體中的 c_cflag 成員來實現, CSTOPB 位為 1 表示 2 位停止位, CSTOPB 位為 0 標志 1 位停止位。例如設置停止位為 1 位:
設置硬體控制流可以通過修改 termios 結構體中的 c_cflag 成員來實現, CRTSCTS 為 1 表示使用硬體控制流,為 0 表示不使用硬體控制流。例如使能硬體控制流:
當然,最後還需要用 tcflush() 拋棄存儲在 fd 里的未接收的數據。
再利用介面 tcsetattr() 函數將配置信息寫入文件描述符 fd :
這樣整個串口最常用的用法就配置完成了。
具體的配置使用可以參考我的項目 HCI-Middleware 里的 hci_transport_uart_linux.c 文件。
參考:
② 怎麼查看linux命令中系統自帶串口驅動的時鍾頻率
通過adb查看。串口列印中通過指令查看,查看linux命令中系統燃明枝自帶串口驅動的時鍾頻率通過adb查槐純看。Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務皮敏、支持多線程和多CPU的操作系統。
③ linux查找串口
1、設備入口
可以查/dev/ttyS* 、/dev/*uart*(主設備號4或者204),第一串口一般為ttyS0、*uart0等
USB轉串口設備一般為/dev/ttyUSB*(主設備號188),第一口一般為ttyUSB0
2、以上/dev下只是串口的入口,具體設備存在與否需要按關鍵字(ttyS、ttyUSB、uart)查詢/proc/devices以確定。
3、串口為通訊埠,有多個串口設備時,要確定正在被連接的串口是哪個,需要檢測一下,如:
cat /dev/ttyS0
④ 如何在Linux檢查並使用串口
linux 提供了各種工具, Linux 使用 ttySx 作為一個串口設備的名稱。例如,COM1 (DOS/Windows 名字) 是 ttyS0, COM2 是 ttyS1 等等。
任務: 顯示檢測到的系統串口支持
簡單的運行 dmesg 命令
$ dmesg | grep tty
輸出:
[ 37.531286] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 37.531841] 00:0b: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 37.532138] 0000:04:00.3: ttyS1 at I/O 0x1020 (irq = 18) is a 16550A
setserial 命令
setserial 是一個程序用於設定並/或報告某個串口關聯的配置信息。該信息包括串口用到的I/O 埠和中斷號,以及Break鍵是否應被解釋為Secure Attention Key 等等。 僅僅是輸出如下的命令:
$ setserial -g /dev/ttyS[0123]
輸出:
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x1020, IRQ: 18
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3
帶-g選項的setserial幫助找到你的Linux板子上的物理串口。
Linux 串口控制台程序
一旦串口被確定了,你就能使用許多的工具來配置Linux板子:
minicom- 用於控制modem和連接到mp 設備的最好的串口通信程序。
wvidial or other GUI dial up networking program - 一個內建智能PPP 撥號器。
getty / agetty - agetty 打開一個 tty 埠, 提示登錄名稱並調用 /bin/login 命令。
grub / lilo configuration - 配置串口為系統控制台。
⑤ linux如何查看哪個串口是真實串口,哪個串口
1.使用ls -l ttyS*命令顯示如下
crw-rw----. 1 root dialout 4, 64 5月 17 02:24 /dev/ttyS0
crw-rw----. 1 root dialout 4, 65 5月 17 02:24 /dev/ttyS1
crw-rw----. 1 root dialout 4, 66 5月 17 02:24 /dev/ttyS2
crw-rw----. 1 root dialout 4, 67 5月 17 02:24 /dev/ttyS3
但你不知到哪個是真實的串口,雖然一般都是ttyS0,但也不敢妄然確定。
2.使用cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:unknown port:000002F8 irq:3
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3
我們發現串口0的uart值時16550A,tx值為0,rx值也為0,因此我們斷定本機只有一個串口,是串口0,即ttyS0
3.也可以用dmesg | grep ttyS*,但這個不是很好用,當然你可以自己使用正則法則取找到。
注意:還應查看是否有USB轉串口,這個就很簡單了:ls ttyUSB*,全部搞定。
⑥ linux 查看某個串口參數(波特率,數據位等)命令什麼
用CAT命令查看
#cat /proc/tty/driver/serial
如果需要配置串口參數,minicom是個很好的選擇。
一、安裝
sudo apt-get install minicom
二、配置
配置minicom的參數
運行$ sudo minicom -s
便進入了minicom的配置界面,使用上下鍵選擇Serial port setup,回車。此時游標在「change which setting」後面停留,它的上面有如下菜單:
只需輸入上面對應的字母,就可以進如相應的菜單進行設置。設置完成,回車,游標會回到「change which setting」後面,如此重復。完成按回車返回主菜單即可。
⑦ Linux串口相關的操作及綁定
@ toc
可在控制台輸入
也可以用stty設置串口參數
使用後相當於串口回傳,發什麼回什麼
發送數據
可以對串口發送數據比如對com1口
一般情況下串口的名稱全部在dev下面,如果你沒有外插串口卡的話默認是dev下的ttyS* ,一般ttyS0對應com1,ttyS1對應com2,當然也不一定是必然的;
如果有ttyS設備,再看/dev/有沒有ttyS*,如沒有就建立一個:
如果板子的設備中沒有標准串口設備ttyS0,也沒有ttySAC0。/dev下應該有一個USB串口:/dev/ttyUSB0.
當一個串列卡或數據卡被偵測到時,它會被指定成為第一個可用的串列設備。通常是/dev/ttyS1(cua1)或/dev/ttyS2(cua2),這完成看原已內建的串口數目。ttyS*設備會被報告在/var/run/stab內。
PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC
可能是linux下的串口設備沒有打開,需要改變串口設備
的許可權,或者根據文章頭添加用戶到組處理
可以通過以下命令 查看 板子上的硬體埠的內核設備名
該條命令會將 ttyUSB0所對應的硬體埠的kernel設備名 顯現出來, 得到KERNEL== '1-5.5.4', 而不是之前的ttyUSB0
cmd.sh如下:
./getUSB.py 調用當前路徑下的getUSB.py這個Python語言,明確此次是哪個,ttyUSB0,或者ttyUSB1掛載在埠3-1.1上
getUSB.py:
完成之後 ,設置開機啟動cmd.sh(在/etc/rc.local中設置)則每次開機之後,會從/dev/ttydata獲取到固定埠的數據
方式一
寫入內容如下:
方式二
我的硬體序列號:ATTRS{serial}=="FTSYWCXZ"這個號是唯一的
可以通過/dev/usb_0打開串口設備
常用的匹配類型: