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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

树莓派UART串口编程--使用wiringPi库-C开发【1-基础应用】

發布時間:2023/12/10 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树莓派UART串口编程--使用wiringPi库-C开发【1-基础应用】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、串口說明

莓派3B+上UART串口位于GPIO的8腳和10腳,分別為GPIO8=Tx,GPIO10=Rx。在連接外部接口時,需要交換接口,即GPIO8連接到外設的Rx,GPIO10連接到外設的Tx。Rpi3的接口如下:

Rpi3B+的GPIO8和GPIO10該串口不能直接用,Rpi3B+包含兩組串口,一組硬串口ttyAMA0和一組軟串口ttyS0,硬串口就是GPIO8和GPIO10,系統默認分配給了藍牙設備,查詢設備外設智能看到ttyS0。因此,需要將硬串口釋放出來。

二、ttyAMA0硬串口配置

查看串口配置情況:? ls -l /dev

找到serial,看它映射的是哪個設備。有可能是顯示的一個,有可能是兩個。

1、關閉ttyAMA0服務

sudo systemctl stop serial-getty@ttyAMA0.servicesudo systemctl disable serial-getty@ttyAMA0.service

2、刪除控制臺串口輸出

sudo vi /boot/cmdline.txt ,刪除語句 console=serial0,115200,變成如下:

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

3、切換藍牙為軟串口,釋放硬件串口

sudo vi /boot/config.txt ,最后一行增加

dtoverlay=pi3-miniuart-bt

4、重啟Rpi3

sudo reboot

5、查看設備信息

ls -l /dev

三、使用wiringPi庫開發串口

安裝wiringPi庫后,可以在/usr/linclude找到wiringPi相關的頭文件:

要查找wiringPi庫的包含頭文件在哪里,可以使用find命令查找:

sudo find / -name wiring*

主要是四個頭文件:

  • wiringPi.h?基本IO驅動和常用配置定義;
  • wiringPiI2C.h I2C驅動的頭文件;
  • wiringPiSPI.h SPI驅動的頭文件;
  • wiringSerial.h Serial驅動的頭文件;
  • 串口驅動庫主要提供以下接口:

  • extern int???serialOpen??????(const char *device, const int baud) ;//打開串口,輸入設備描述符和串口波特率,返回串口的設備ID
  • extern void??serialClose?????(const int fd) ;//關閉串口,
  • extern void??serialFlush?????(const int fd) ;//清空緩存區
  • extern void??serialPutchar???(const int fd, const unsigned char c) ;//輸出一個字符
  • extern void??serialPuts??????(const int fd, const char *s) ;//輸出字符串
  • extern void??serialPrintf????(const int fd, const char *message, ...) ;//格式化輸出
  • extern int???serialDataAvail (const int fd) ;//返回設備緩存區接收到的數據個數
  • extern int???serialGetchar???(const int fd) ;//從設備ID讀取一個字符
  • 新建一個文件myuart.c,如下代碼進行測試:

    #include<wiringPi.h> #include<wiringSerial.h> #include<stdio.h> #include<string.h> #include<time.h> void delay_ms(int ms); int main() {int filedevid;int recbytenum;int i;char buf[1024];memset(buf,0,1024);wiringPiSetup();if((filedevid=serialOpen("/dev/ttyAMA0",115200))<0){printf("/dev/ttyAMA0 Open Faild\r\n");return -1;}else{printf("/dev/ttyAMA0 Open with 115200, success\r\n");while(1){recbytenum = serialDataAvail(filedevid);if(recbytenum > 0){i=0;while(recbytenum--){buf[i++] = serialGetchar(filedevid);}printf("Rpi uart recv: %s\r\n",buf);serialPrintf(filedevid,"Rpi uart send: %s\r\n",buf);memset(buf,0,1024);}}} }

    四、編譯和測試

    編譯命令:

    gcc myuart.c -o runuart.o -l wiringPi

    運行:

    五、分析和討論

    上面的方法主要記錄了Rpi3的Uart基本操作,但是存在以下問題:

    1、串口無法修改奇偶校驗、數據位數;

    2、數據接收存在分包現象,主要是由于wiringPi庫只提供了serialDataAvail函數,因此該串口驅動還需要進一步優化和改進。

    可以參考下一篇博文:樹莓派UART串口編程--使用wiringPi庫-C開發【2-修改驅動】

    總結

    以上是生活随笔為你收集整理的树莓派UART串口编程--使用wiringPi库-C开发【1-基础应用】的全部內容,希望文章能夠幫你解決所遇到的問題。

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