Linux串列埠程式設計
阿新 • • 發佈:2018-11-02
- 串列埠通訊是指一次只傳送一個數據位。雖然在通訊的時候串列埠有 8 位或者 9 位等,但是在物理層面傳輸的時候,它仍然是以單個 bit 的方式傳輸的
- 一般特指 RS232 標準的介面
- 在 linux 下串列埠程式設計流程如下:
開啟串列埠
核心是用open函式開啟串列埠
if((fd = open(uart3,O_RDWR|O_CREAT,0777))<0){
printf("open %s failed!\n",uart3);
}
else{
printf("open %s is success!\n" ,uart3);
}
串列埠初始化
初始化一般無論在哪個平臺都有現成程式碼,直接使用即可。這裡的介面形式為int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
- fd為串列埠控制代碼
- nSpeed為設定的波特率
- nBites為資料位
- nEvent為校驗位
- nStop為停止位
- 例如
set_opt(fd, 115200, 8, 'N', 1);
串列埠傳送
核心是通過write函式傳送資料
if((fd = open(uart3, O_RDWR|O_NOCTTY|O_NDELAY))<0 ){
printf("open %s is failed",uart3);
}
else{
printf("open %s is success\n",uart3);
set_opt(fd, 115200, 8, 'N', 1);
while(i--)
{
wr_static = write(fd,buffer, strlen(buffer));
if(wr_static<0)
printf("write failed\n" );
else{
printf("wr_static is %d\n",wr_static);
}
sleep(1);
}
}
close(fd);
串列埠接收
核心是通過read和write來讀取資料
if((fd = open(uart3, O_RDWR|O_NOCTTY))<0)
printf("open %s is failed",uart3);
else{
set_opt(fd, 115200, 8, 'N', 1);
write(fd,uart_out, strlen(uart_out));
while(1){
while((nByte = read(fd, buffer, 512))>0){
buffer[nByte+1] = '\0';
write(fd,buffer,strlen(buffer));
memset(buffer, 0, strlen(buffer));
nByte = 0;
}
}
}