樹莓派 Linux 下的串列埠通訊 (C語言)

2021-09-05 12:38:16 字數 2876 閱讀 4143

執行環境:ubuntu14.04、樹莓派3b+

功能:實現串列埠資料的收發

main.c檔案

#include "com.h" 

#define buffer_size 30 /*最大快取區*/

char *pstr=;

int main(int argc, char *argv)

//傳送資料

dowhile(!read_buffer_size);

printf("read[%d][%s]\n", read_buffer_size,read_buffer);

} }while(1);

close(fd);

return 0;

}

com.c檔案

#include "com.h"

/*struct termios

*//****************************************/

/************開啟串列埠函式****************/

/****************************************/

int open_port(int com_port)

; /* 使用 usb 轉串列埠 */

char *dev = ;

printf("open dev [%s]\n",dev[com_port]);

//o_ndelay 同 o_nonblock。

fd = open(dev[com_port], o_rdwr|o_noctty);

if (fd < 0)

//恢復串列埠為阻塞狀態

//非阻塞:fcntl(fd,f_setfl,fndelay)

//阻塞:fcntl(fd,f_setfl,0)

if (fcntl(fd, f_setfl, 0) < 0)

/*測試是否為終端裝置*/

if (isatty(stdin_fileno) == 0)

return fd;

} /***********************************/

/************串列埠配置***************/

/***********************************/

int set_com_config(int fd,int baud_rate,int data_bits, char parity, int stop_bits)

/* 設定字元大小*/

//opt = opt;

//cfmakeraw(&opt);//配置為原始模式

&= ~csize;//c_cflag 控制模式標誌

/*設定波特率*/

switch (baud_rate)

cfsetispeed(&opt, speed);

cfsetospeed(&opt, speed);

tcsetattr(fd,tcsanow,&opt);

opt.c_cflag &= ~csize;

/*設定資料位*/

switch (data_bits)

break;//7個資料位

default:break;//8個資料位

} /*設定奇偶校驗位*/

switch (parity) //n

break;

case 'o':case 'o':

break;

case 'e':case 'e':

break;

case 's':case 's': /*as no parity*/

break;

default:

break;

}/*設定停止位*/

switch (stop_bits)

break;

case 2: break;

default: break;

} /*處理未接收字元*/

tcflush(fd, tciflush);

/*設定等待時間和最小接收字元*/

opt.c_cc[vtime] = 11;

opt.c_cc[vmin] = 0;

/*關閉串列埠回顯*/

opt.c_lflag &= ~(icanon|echo|echoe|echok|echonl|noflsh);

/*啟用新配置*/

if((tcsetattr(fd, tcsanow, &opt)) != 0)

return 0;

}

com.h檔案

#ifndef _com_h_

#define _com_h_

#include #include #include #include #include #include #include #include #include int set_com_config(int fd,int baud_rate,int data_bits, char parity, int stop_bits);

int open_port(int com_port);

#endif

在樹莓派3b+中的編譯結果和執行結果如下:

通過上位機傳送乙個字串「test string」,樹莓派會按順序返回乙個字串"no1"~"no4"。

樹莓派串列埠通訊python 樹莓派串列埠通訊設定

實驗環境樹莓派 3b 開發板 2018 06 27 raspbian stretch 樹莓派作業系統 使用 windows 10 通過網線連線遠端登陸訪問方式控制樹莓派 實驗目的 為了將樹莓派構建成乙個智慧型家居的資料中心,我們需要在樹莓派上連線 zigbee 無線通訊模組,實現與感測器的一對多通訊...

樹莓派串列埠通訊編碼 樹莓派UDP通訊及串列埠通訊

bin env python import serial import string import time import threading import socket host port 10001 s socket.socket socket.af inet,socket.sock dgram...

樹莓派串列埠通訊 python篇

修改 boot 目錄下的cmdline.txt 修改內容為 dwc otg.lpm enable 0 console tty1 root dev mmcblk0p2 rootfstype ext4 elevator deadline fsck.repair yes rootwait安裝python ...