基於C 實現ARM串列埠控制庫

2021-10-20 20:49:36 字數 3063 閱讀 8496

表明串列埠控制留出的介面

#ifndef _cserial_h_

#define _cserial_h_

#include

//標準函式庫定義

#include

//unix標準函式定義

#include

#include

#include

//檔案控制定義

#include

//posix中斷控制定義

#include

//錯誤號定義

#include

using

namespace std;

//串列埠資訊

typedef

struct port_info

*pport_info;

class

cserial

;#endif

串列埠控制實現

#include

"cserial.h"

cserial::

cserial()

; //設定可支援的波特率

// name_arr[8] = ;

}cserial::

~cserial()

int cserial::

uartinit

(pport_info p_info)

void cserial::

uartclose

(int fd)

int cserial::

uartsend

(int fd,

void

*buf,

int len)

else

}int cserial::

uartrecv

(int fd,

void

*buf,

int len)

// 返回值為所讀到的位元組數

else

if(ret >0)

}return ret;

}int cserial::

setparity

(int fd,

int baudrate,

int databits,

int stopbits,

int parity)

opt.c_cflag |

=(clocal | cread)

;//一般必設定的標誌

/* for(int i = 0; i < sizeof(speed_arr) / sizeof(int); i++) // 設定波特率

tcflush(fd, tcioflush);}}

*///設定波特率

switch

(baudrate)

tcflush

(fd, tcioflush)

;//setup input/output baudrate

cfsetispeed

(&opt,baudrate)

;//printf("cfsetispeed::c_cflag = %x\r\n", new_opt.c_cflag);

cfsetospeed

(&opt,baudrate)

;//printf("cfsetospeed::c_cflag = %x\r\n", new_opt.c_cflag);if(

tcsetattr

(fd, tcsanow,

&opt)!=0

)switch

(databits)

//設定資料位數

switch

(parity)

//設定校驗位

switch

(stopbits)

//設定停止位

//修改控制模式,保證程式不會占用串列埠且可正常讀取輸入資料

opt.c_cflag |

=(clocal | cread)

;//在用write傳送資料時沒有鍵入回車,資訊就傳送不出去,這主要是因為我們在輸入輸出時是按照規範模式》接收到回車或換行才傳送,

opt.c_lflag &=~

(icanon | echo | echoe | isig)

; opt.c_oflag &

=~opost;

//傳送字元0x0d的時候,往往接收端得到的字元是0x0a,

//原因是因為在串列埠設定中c_iflag和c_oflag中存在從nl-cr和cr-nl的對映,即串列埠能把回車和換行當成同一

個字元,可以進行如下設定遮蔽之

opt.c_oflag &=~

(onlcr | ocrnl)

; opt.c_iflag &=~

(icrnl | inlcr)

;//c_cc陣列的vstart和vstop元素被設定成dc1和dc3,

//代表ascii標準的xon和xoff字元,如果在傳輸這兩個字元的時候就傳不過去,需要把軟體流控制遮蔽,

opt.c_iflag &=~

(ixon | ixoff | ixany)

;tcflush

(fd, tciflush)

; opt.c_cc[vtime]=0

;//設定超時為15sec

opt.c_cc[vmin]=0

;//update the opt and do it nowif(

tcsetattr

(fd, tcsanow,

&opt)!=0

)return0;

}int cserial::

opendev

(char

*dev)

else

return fd;

}

#include

"cserial.h"

#include

#include

#include

intmain()

uart3.

uartclose

(fd)

;return0;

}~

基於C 實現串列埠通訊Demo

24 getportnames 方法 獲取當前計算機的串列埠名的陣列 25 foreach string com in system.io.ports.serialport.getportnames 26 29 30 cbcom.selectedindex 0 31 sp1.baudrate 960...

python實現串列埠控制

使用rs232串列埠線或者是rs232轉usb的這一類的介面,會需要com口作為介面來進行輸入輸出調式,寫了個指令碼來控制com口,用到了python內建的serial庫 如下 coding utf 8 import serial import time def settout t print ol...

Python程式設計 基於serial庫串列埠通訊實戰

在python中進行串列埠的相關應用程式設計,需要借助pyserial這個庫。安裝串列埠庫 pip3 install pyserial 如果你使用的是python2.x,那麼你使用pip安裝的方式如下 pip install pyserialclass uartinit object def ini...