日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

树莓派串口通信

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树莓派串口通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 相關概念
    • 簡述半雙工與全雙工
    • 串口通信注重什么
  • 串口通信編程
    • 常用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 /dev

ttyAMA0 串口
fb0 顯示器
mem 內存
ram0 磁盤。。

進入文件夾

cd input/ ls

可以看到鼠標 mice

查找文件是否存在

當前路徑尋找:

find . -name a.out

不在同一個目錄下的尋找:(貌似不行?)

find -name a.out

總結

以上是生活随笔為你收集整理的树莓派串口通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。