和文件一樣,open /dev/ttyS0就是串口1 然后設(shè)置波特率,停止位 奇偶校驗(yàn)?zāi)切?,之后read write就可以了 頭文件是termios.h
創(chuàng)新互聯(lián)是一家專(zhuān)注于網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),鐵嶺網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:鐵嶺等地區(qū)。鐵嶺做網(wǎng)站價(jià)格咨詢(xún):18982081108
由于linux的內(nèi)核參數(shù)信息都存在內(nèi)存中,因此可以通過(guò)命令直接修改,并且修改后直接生效。但是,當(dāng)系統(tǒng)重新啟動(dòng)后,原來(lái)設(shè)置的參數(shù)值就會(huì)丟失,而系統(tǒng)每次啟動(dòng)時(shí)都會(huì)自動(dòng)去/etc/sysctl.conf文件中讀取內(nèi)核參數(shù),因此將內(nèi)核的參數(shù)配置寫(xiě)入這個(gè)文件中,是一個(gè)比較好的選擇。
首先打開(kāi)/etc/sysctl.conf文件,查看如下兩行的設(shè)置值,這里是:
kernel.shmall = 2097152
kernel.shmmax = 4294967295 如果系統(tǒng)默認(rèn)的配置比這里給出的值大,就不要修改原有配置。同時(shí)在/etc/sysctl.conf文件最后,添加以下內(nèi)容:
fs.file-max = 6553600
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144
這里的“fs.file-max = 6553600”其實(shí)是由“fs.file-max = 512 * processes”得到的,我們指定processes的值為12800,即為“fs.file-max =512 *12800”。
sysctl.conf文件修改完畢后,接著執(zhí)行“sysctl -p”使設(shè)置生效。
[root@localhost ~]# sysctl -p 常用的內(nèi)核參數(shù)的含義如下。
kernel.shmmax:表示單個(gè)共享內(nèi)存段的最大值,以字節(jié)為單位,此值一般為物理內(nèi)存的一半,不過(guò)大一點(diǎn)也沒(méi)關(guān)系,這里設(shè)定的為4gb,即“4294967295/1024/1024/1024=4g”。
kernel.shmmni:表示單個(gè)共享內(nèi)存段的最小值,一般為4kb,即4096bit.
kernel.shmall:表示可用共享內(nèi)存的總量,單位是頁(yè),在32位系統(tǒng)上一頁(yè)等于4kb,也就是4096字節(jié)。
fs.file-max:表示文件句柄的最大數(shù)量。文件句柄表示在linux系統(tǒng)中可以打開(kāi)的文件數(shù)量。
ip_local_port_range:表示端口的范圍,為指定的內(nèi)容。
kernel.sem:表示設(shè)置的信號(hào)量,這4個(gè)參數(shù)內(nèi)容大小固定。
net.core.rmem_default:表示接收套接字緩沖區(qū)大小的缺省值(以字節(jié)為單位)。
net.core.rmem_max :表示接收套接字緩沖區(qū)大小的最大值(以字節(jié)為單位)
net.core.wmem_default:表示發(fā)送套接字緩沖區(qū)大小的缺省值(以字節(jié)為單位)。
net.core.wmem_max:表示發(fā)送套接字緩沖區(qū)大小的最大值(以字節(jié)為單位)。
配置串口需要包含頭文件
其中最核心的配置結(jié)構(gòu)體為:
如何獲取該結(jié)構(gòu)呢?我們操作串口跟操作文件一樣,也是調(diào)用 open() 函數(shù)來(lái)打開(kāi)串口,
這樣我們就能夠得到一個(gè)文件描述符 fd ,然后就可以調(diào)用 tcgetattr() 函數(shù)來(lái)獲取上述配置結(jié)構(gòu)體了。
Linux 串口默認(rèn)的配置為:波特率 9600,數(shù)據(jù)位 8 位,無(wú)奇偶校驗(yàn),停止位 1 位,無(wú) CTS/RTS 。
以下介紹一些常用的配置項(xiàng):波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位、硬件控制流。
相關(guān)接口:
Linux 將串口的波特率分為了輸入波特率和輸出波特率,不過(guò)最常用的場(chǎng)景是將兩者設(shè)置成一樣。
cfgetispeed() 函數(shù)獲取輸入波特率, cfgetospeed() 函數(shù)獲取輸出波特率。 cfsetispeed() 函數(shù)設(shè)置輸入波特率, cfsetospeed() 函數(shù)用于設(shè)置輸出波特率,當(dāng)然 cfsetspeed() 函數(shù)擴(kuò)展為同時(shí)設(shè)置輸入和輸出波特率。
上述接口中的 speed_t 是一系列波特率的標(biāo)志位,例如常用的 115200 波特率就為 B115200,參考下述選項(xiàng):
設(shè)置奇偶校驗(yàn)位可以通過(guò)修改 termios 結(jié)構(gòu)體中的 c_cflag 成員來(lái)實(shí)現(xiàn),若無(wú)校驗(yàn),則將 PARENB 位設(shè)為 0;若有校驗(yàn),則 PARENB 為 1。之后再根據(jù) PARODD 來(lái)區(qū)分奇偶校驗(yàn), PARODD 為 1 表示奇校驗(yàn), PARODD 為 0 表示偶校驗(yàn)。例如設(shè)置無(wú)奇偶校驗(yàn)位:
設(shè)置數(shù)據(jù)位可以通過(guò)修改 termios 結(jié)構(gòu)體中的 c_cflag 成員來(lái)實(shí)現(xiàn),CS5、CS6、CS7 和 CS8 分別代表數(shù)據(jù)位 5、6、7 和 8。不過(guò)在設(shè)置數(shù)據(jù)位之前,需要先用 CSIZE 來(lái)做屏蔽字段,清楚這幾個(gè)標(biāo)志位,例如設(shè)置數(shù)據(jù)位為 8 位:
設(shè)置停止位可以通過(guò)修改 termios 結(jié)構(gòu)體中的 c_cflag 成員來(lái)實(shí)現(xiàn), CSTOPB 位為 1 表示 2 位停止位, CSTOPB 位為 0 標(biāo)志 1 位停止位。例如設(shè)置停止位為 1 位:
設(shè)置硬件控制流可以通過(guò)修改 termios 結(jié)構(gòu)體中的 c_cflag 成員來(lái)實(shí)現(xiàn), CRTSCTS 為 1 表示使用硬件控制流,為 0 表示不使用硬件控制流。例如使能硬件控制流:
當(dāng)然,最后還需要用 tcflush() 拋棄存儲(chǔ)在 fd 里的未接收的數(shù)據(jù)。
再利用接口 tcsetattr() 函數(shù)將配置信息寫(xiě)入文件描述符 fd :
這樣整個(gè)串口最常用的用法就配置完成了。
具體的配置使用可以參考我的項(xiàng)目 HCI-Middleware 里的 hci_transport_uart_linux.c 文件。
參考:
分享題目:linux配置串口命令行 linux串口發(fā)送數(shù)據(jù)命令
路徑分享:http://aaarwkj.com/article46/docjphg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)公司、ChatGPT、網(wǎng)站收錄、網(wǎng)站維護(hù)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)