树莓派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.service2、刪除控制臺串口輸出
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 rootwait3、切換藍牙為軟串口,釋放硬件串口
sudo vi /boot/config.txt ,最后一行增加
dtoverlay=pi3-miniuart-bt4、重啟Rpi3
sudo reboot5、查看設備信息
ls -l /dev三、使用wiringPi庫開發串口
安裝wiringPi庫后,可以在/usr/linclude找到wiringPi相關的頭文件:
要查找wiringPi庫的包含頭文件在哪里,可以使用find命令查找:
sudo find / -name wiring*主要是四個頭文件:
串口驅動庫主要提供以下接口:
新建一個文件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-基础应用】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软登录界面加载不出_微软要硬了,做出这
- 下一篇: 光子浏览器_烟台招聘信息烟台光子信息科技