文章目錄
- 參考博文
- 序列槽通信的工作方式
-
- 序列槽通信注重什麼
- 一、常用API
-
- 初次使用需要配置
- 樹莓派向電腦序列槽每隔1s發送一個字元c
-
- 運作程式,打開PC序列槽調試助手
- 發送資料 傳回字元串
參考博文
https://www.cnblogs.com/lulipro/p/5992172.html
序列槽通信的工作方式
全雙工允許通信雙方同時互傳資料;半雙工不可同時,一方發送時,另一方隻能接收。序列槽通信屬于全雙工。
序列槽通信注重什麼
-
資料格式
資料位,停止位,奇偶校驗位
-
波特率
波特率(Baud Rate) 機關 bps – 每秒傳送的 位元組數 Byte Per Second.。
波特率(Baud Rate) 機關 bps – 每秒傳送的 位元組數 Byte Per Second.。
一、常用API
包含頭檔案#include <wiringSerial.h>
函數 | 參數 | 作用 |
---|---|---|
int serialOpen (char *device, int baud) | device:序列槽的位址,即裝置所在的目錄。預設"/dev/ttyAMA0" 傳回值:正常傳回檔案描述符,否則傳回-1失敗。 | 打開并初始序列槽 |
int serialDataAvail(int fd) | 傳回:序列槽緩存中已經接收的,可讀取的位元組數,-1代表錯誤 | 擷取序列槽緩存中可用的位元組數。 |
void serialPutchar (int fd, unsigned char c) | c:要發送的資料 | 發送一個位元組的資料到序列槽 |
void serialPuts (int fd, char *s) | s:發送的字元串,字元串要以’\0’結尾 | 發送一個字元串到序列槽 |
int serialGetchar (int fd) | 傳回:讀取到的字元 | 從序列槽讀取一個位元組資料傳回。如果序列槽緩存中沒有可用的資料,則會等待10秒,如果10後還沒有,傳回-1。是以在讀取前,通過serialDataAvail判斷。 |
初次使用需要配置
cd /boot/
sudo vim cmdline.txt
删除字元串”console=ttyAMA0,115200“
解除序列槽用于資訊的列印,列印啟動字元以及一些調試界面等。目的是把序列槽用于正常的資料通信
②重新開機
sudo reboot
樹莓派向電腦序列槽每隔1s發送一個字元c
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdio.h>
int main()
{
int fd;
if(-1 == wiringPiSetup()){
printf("硬體初始化失敗\n");
}
fd = serialOpen("/dev/ttyAMA0",9600);
while(1){
serialPutchar(fd,'c');
delayMicroseconds(1000000);
}
return 0;
}
運作程式,打開PC序列槽調試助手
發送資料 傳回字元串
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdio.h>
int main()
{
int fd;
int cmd;
wiringPiSetup(); //硬體初始化
fd = serialOpen("/dev/ttyAMA0",9600); //和檔案描述符很像 先打開序列槽 波特率9600 後續操作用fd
while(1){
while(serialDataAvail(fd)!= -1){ //先判斷序列槽是否有資料 沒有就阻塞 有的話傳回值非-1 進入循環
cmd = serialGetchar(fd); //cmd接受得到的字元
if(cmd == '1'){ //根據字元 輸出相應内容
serialPuts(fd,"haha1\r\n");
}else if(cmd=='2'){
serialPuts(fd,"haha2\r\n");
}else if(cmd=='3'){
serialPuts(fd,"haha3\r\n");
}
}
}
return 0;
}