树莓派串口通信
目錄
- 相關概念
- 簡述半雙工與全雙工
- 串口通信注重什么
- 串口通信編程
- 常用API
- 初次使用需要配置
- 樹莓派和電腦串口之間讀、寫、交互
- 接線
- 編寫程序
- 其他
- 簡單了解為什么說linux一切皆文件
- 查找文件是否存在
相關概念
簡述半雙工與全雙工
全雙工允許通信雙方同時互傳數據;半雙工不可同時,一方發送時,另一方只能接收。串口通信屬于全雙工。
串口通信注重什么
- 數據格式
數據位,停止位,奇偶校驗位
- 波特率
波特率(Baud Rate) 單位 bps – 每秒傳送的 字節數 Byte Per Second.。
串口通信編程
常用API
參考博文
包含頭文件#include <wiringSerial.h>
| int serialOpen (char *device, int baud) | device:串口的地址,即設備所在的目錄。默認"/dev/ttyAMA0" 返回值:正常返回文件描述符,否則返回-1失敗。 | 打開并初始串口 |
| void serialClose (int fd) | fd:文件描述符 | 關閉fd關聯的串口 |
| void serialPutchar (int fd, unsigned char c) | c:要發送的數據 | 發送一個字節的數據到串口 |
| void serialPuts (int fd, char *s) | s:發送的字符串,字符串要以'\0'結尾 | 發送一個字符串到串口 |
| int serialGetchar (int fd) | 返回:讀取到的字符 | 從串口讀取一個字節數據返回。如果串口緩存中沒有可用的數據,則會等待10秒,如果10后還沒有,返回-1。所以在讀取前,通過serialDataAvail判斷。 |
| int serialDataAvail(int fd) | 返回:串口緩存中已經接收的,可讀取的字節數,-1代表錯誤 | 獲取串口緩存中可用的字節數。 |
初次使用需要配置
①修改 cmdline.txt 文件
cd /boot/ sudo vim cmdline.txt- 1
- 2
刪除字符串” console=serial0,115200“
解除串口用于信息的打印,打印樹莓派開機啟動字符以及一些調試界面等。目的是把串口用于正常的數據通信。 想再次利用串口和Secure CRT進行交互的話,再加上去,重啟樹莓派。②重啟
sudo reboot- 1
樹莓派和電腦串口之間讀、寫、交互
接線
TTL與樹莓派TX,RX連接后插入電腦端口
TTL與樹莓派還要共地穩壓,保證數據正常溝通
編寫程序
樹莓派向串口發送字符和字符串:
#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');//serialPuts(fd,"Hello World!\r\n"); // \r回車 \n換行delayMicroseconds(1000000);//微妙函數}return 0; }拓展:若要用于執行指令,例如手機控制繼電器等,可參考下列代碼
int cmd;while(1){while(serialDataAvail(fd) != -1){//當緩沖區有數據時cmd = serialGetchar(fd);printf("cmd = %c\n",cmd);if(cmd == '5'){serialPuts(fd,"do net work\r\n");}}}運行程序,打開PC串口調試助手,可以看到樹莓派發來的消息。
樹莓派讀串口:
#include <wiringPi.h> #include <wiringSerial.h> #include <stdio.h>int main() {int fd;int cmd;if(-1 == wiringPiSetup()){printf("硬件初始化失敗\n");}fd = serialOpen("/dev/ttyAMA0",9600);while(1){while(serialDataAvail(fd) != -1){cmd = serialGetchar(fd);printf("get data is %d\n",cmd);}}return 0; }運行結果:
通常串口調試助手以文本的形式發送2,即發送了一個字符2。此時用%d格式樹莓派端得到的將是2的ASCII碼,值為50,可用%c轉為字符。
樹莓派和PC串口交互:
#include <wiringPi.h> #include <wiringSerial.h> #include <stdio.h>int main() {int fd;int cmd;if(-1 == wiringPiSetup()){printf("硬件初始化失敗\n");}fd = serialOpen("/dev/ttyAMA0",9600);while(1){while(serialDataAvail(fd) != -1){cmd = serialGetchar(fd);if(cmd == '2'){serialPuts(fd,"Pi receive 2 from you!\r\n");}if(cmd == '3'){serialPuts(fd,"Pi receive 3 from you!\r\n");}if(cmd == '4'){serialPuts(fd,"Pi receive 4 from you!\r\n");}}運行效果如下,拓展開來可以進行更多的硬件交互和控制。
其他
簡單了解為什么說linux一切皆文件
設備雖然是硬件,但在linux中還是以文件的形式存在
cd /devttyAMA0 串口
fb0 顯示器
mem 內存
ram0 磁盤。。
進入文件夾
cd input/ ls可以看到鼠標 mice
查找文件是否存在
當前路徑尋找:
find . -name a.out不在同一個目錄下的尋找:(貌似不行?)
find -name a.out總結
- 上一篇: linux台式机双屏幕怎么连接,台式机L
- 下一篇: 视觉SLAM十四讲第五讲