成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

剖析非標(biāo)準(zhǔn)波特率的設(shè)置和使用于Linux操作系統(tǒng)中

運維 系統(tǒng)運維
Linux操作系統(tǒng)最近幾年的發(fā)展超過了微軟的想象,大有趕上微軟的趨勢,于是也就有大部分人開始學(xué)習(xí)Linux操作系統(tǒng),通常,在Linux下面,設(shè)置串口使用終端IO的相關(guān)函數(shù)設(shè)置,如tcsetattr等函數(shù)。

Linux操作系統(tǒng)最近幾年的發(fā)展超過了微軟的想象,大有趕上微軟的趨勢,于是也就有大部分人開始學(xué)習(xí)Linux操作系統(tǒng),通常,在Linux下面,設(shè)置串口使用終端IO的相關(guān)函數(shù)設(shè)置,如tcsetattr等函數(shù),Linux內(nèi)部有一個對常用波特率列表的索引,根據(jù)設(shè)置的波特率用底層驅(qū)動來設(shè)置異步通信芯片的寄存器

對于非標(biāo)準(zhǔn)的任意波特率需要用ioctl(fd, TIOCGSERIAL, p)和ioctl(fd, TIOCSSERIAL, p)的配合,ioctl的***一個參數(shù)是struct serial_struct *類型,在Linux/serial.h中定義。其中baud_base是基準(zhǔn)晶振頻率/16,通常是115200,你需要設(shè)的是custom_divisor這個值,最終的波特率為baud_base/custom_divisor,比如你需要28800,因為115200/4=28800,所以要設(shè)置custom_divisor=4,。

具體過程為,先設(shè)置波特率設(shè)為38400(tcsetattr),然后用TIOCGSERIAL得到當(dāng)前的設(shè)置,將flags設(shè)置ASYNC_SPD_CUST位,設(shè)置custom_divisor,***用TIOCSSERIAL設(shè)置。

使用setserial其實就是利用上述方法,來設(shè)置baud_base, custom_divisor等, 其內(nèi)部實現(xiàn)就是使用ioctl來進行設(shè)置,

另外還可以用硬件更換晶振,根據(jù)比例來達到使用一些非標(biāo)準(zhǔn)的波特率的目的.

參考:http://blog.ednchina.com/seam_liu/7181/post.aspx

  1. #include <termios.h> 
  2. #include <sys/ioctl.h> 
  3. #include <Linux/serial.h> 
  4. struct serial_t {  
  5.     int     fd;  
  6.     char    *device;/*/dev/ttyS0,...*/  
  7.     int     baud;  
  8.     int     databit;/*5,6,7,8*/  
  9.     char    parity;/*O,E,N*/  
  10.     int    stopbit;/*1,2*/  
  11.     int    startbit;/*1*/  
  12.     struct termios    options;  
  13. }; 

//設(shè)置為特訴波特率,比如28800

  1. int serial_set_speci_baud(struct serial_t *tty,int baud)  
  2. {  
  3.     struct serial_struct ss,ss_set;  
  4.     cfsetispeed(&tty->options,B38400);  
  5.     cfsetospeed(&tty->options,B38400);  
  6.     tcflush(tty->fd,TCIFLUSH);/*handle unrecevie char*/  
  7.     tcsetattr(tty->fd,TCSANOW,&tty->options);  
  8.     if((ioctl(tty->fd,TIOCGSERIAL,&ss))<0){  
  9.         dprintk("BAUD: error to get the serial_struct info:%s\n",strerror(errno));  
  10.         return -1;  
  11.     }  
  12.     ss.flags = ASYNC_SPD_CUST;  
  13.     ssss.custom_divisor = ss.baud_base / baud;  
  14.     if((ioctl(tty->fd,TIOCSSERIAL,&ss))<0){  
  15.         dprintk("BAUD: error to set serial_struct:%s\n",strerror(errno));  
  16.         return -2;  
  17.     }  
  18.     ioctl(tty->fd,TIOCGSERIAL,&ss_set);  
  19.     dprintk("BAUD: success set baud to %d,custom_divisor=%d,baud_base=%d\n",  
  20.             baud,ss_set.custom_divisor,ss_set.baud_base);  
  21.     return 0;  

用法:只要指定serial_t的baud就可以了

  1. static struct serial_t __seri_conf[] = {  
  2.     [0] = {//connect with b board, ttyS0  
  3.         .device = "/dev/ttyS0",  
  4.         .baud = 28800,  
  5.         .databit = 8,  
  6.         .parity = 'N',  
  7.         .stopbit = 1,  
  8.     },  
  9. }; 

以上就Linux操作系統(tǒng)下非標(biāo)準(zhǔn)波特率的設(shè)置和使用。

責(zé)任編輯:小霞 來源: fengfly.com
相關(guān)推薦

2020-12-02 17:58:33

LinuxKubernetes操作系統(tǒng)

2012-08-27 09:50:12

2009-01-11 10:11:22

Linux操作系統(tǒng)測試

2020-10-28 10:24:40

Linux操作系統(tǒng)

2009-12-16 14:45:35

Linux操作系統(tǒng)

2012-08-29 13:39:29

2021-07-22 23:16:15

2010-02-06 14:02:26

Android操作系統(tǒng)

2016-07-19 14:51:16

比特率波特率比特位

2010-04-29 14:08:38

Unix操作系統(tǒng)

2009-12-02 14:50:28

操作系統(tǒng)

2009-12-23 16:16:57

Linux操作系統(tǒng)

2012-02-22 21:54:57

UnixLinuxCron

2017-11-28 09:21:53

LinuxWindowsDocker

2009-12-09 17:25:19

Linux操作系統(tǒng)

2010-02-06 14:44:26

Android操作系統(tǒng)

2013-12-12 17:03:57

Lua腳本語言

2012-05-29 09:42:08

Linux服務(wù)器窗口管理

2009-12-22 13:44:33

Linux操作系統(tǒng)

2010-03-03 10:38:59

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美一级黄色片免费观看 | 91精品久久久久久久久中文字幕 | 国产精品视频网站 | 国产精品99免费视频 | 亚洲国产一区二区在线 | 欧美成人激情视频 | 成人在线免费观看 | 国产激情在线观看 | 欧美在线观看网站 | 电影91久久久 | 国产精品激情 | 日日夜夜天天综合 | 久久综合激情 | 国产视频二区在线观看 | 免费精品一区 | 日日射夜夜骑 | 国产精品一区久久久 | 日韩精品在线观看免费 | 久久中文字幕一区 | 欧美激情一区二区三区 | 亚洲精品99久久久久久 | 久久小视频 | 成人亚洲精品 | 欧美精品网| 日本三级线观看 视频 | 7777精品伊人久久精品影视 | 色吧久久| 国产精品污www一区二区三区 | jdav视频在线观看免费 | 性欧美hd| 一区在线观看 | 亚洲一区二区视频 | a级片网站 | 男人天堂网站 | 毛片韩国| 国产在线中文字幕 | www免费视频| 蜜桃av鲁一鲁一鲁一鲁 | 午夜影院在线观看免费 | 在线看片国产精品 | 日韩一级一区 |