最新64位樹莓派3已經發布快兩週了,玩家們陸陸續續也開始使用上樹莓派3了,隨着玩家的增多,雖然擁有強大硬件配置的樹莓派3也出現了各種各樣的BUG,官方也在對這些BUG進行修復中。今天要說說樹莓派3的UART串口的使用問題,該串口問題的官方反饋及回覆請參考這兩篇官方博文“https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=137932”和“https://www.raspberrypi.org/forums/viewtopic.php?f=107&t=138223”
根據官方的反饋和回覆,我們瞭解到樹莓派3上用戶目前無法正常是使用GPIO中的UART串口(GPIO14&GPIO15),也就是說用戶無論是想用串口來調試樹莓派,還是想用GPIO中的串口來連接GPS,藍牙,XBEE等等串口外設目前都是有問題的。
原因是樹莓派CPU內部有兩個串口,一個是硬件串口(官方稱爲PL011 UART),一個是迷你串口(官方成爲mini-uart)。在樹莓派2B/B+這些老版樹莓派上,官方設計時都是將“硬件串口”分配給GPIO中的UART(GPIO14&GPIO15),因此可以獨立調整串口的速率和模式。而樹莓派3的設計上,官方在設計時將硬件串口分配給了新增的藍牙模塊上,而將一個沒有時鐘源,必須由內核提供時鐘參考源的“迷你串口”分配給了GPIO的串口,這樣以來由於內核的頻率本身是變化的,就會導致“迷你串口”的速率不穩定,這樣就出現了無法正常使用的情況。
目前解決方法就是,關閉藍牙對硬件串口的使用,將硬件串口重新恢復給GPIO的串口使用,也就意味着樹莓派3的板載藍牙和串口,現在成了魚和熊掌,兩者無法兼得。
下面我就講講如何恢復硬件串口的方法:
1.下載pi3-miniuart-bt-overlay文件,解壓出pi3-miniuart-bt-overlay.dtb文件,並將dtb文件拷貝到/boot/overlays/目錄下
2.編輯/boot目錄下的config.txt文件
sudo nano /boot/config.txt
添加下面兩行:
dtoverlay=pi3-miniuart-bt-overlay force_turbo=1
3.編輯/boot目錄下的cmdline.txt文件
sudo nano /boot/cmdline.txt
修改爲如下內容:
dwc_otg.lpm_enable=0 console=serial1,115200 console=tty1 root=/dev/mmcblk0p2 kgdboc=serial1,115200 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
保存退出
關閉板載藍牙的方法:
1.SSH登錄樹莓派3後,輸入下面命令關閉hciuart使用uart0.
sudo systemctl disable hciuart
2.編輯/lib/systemd/system/hciuart.server 將 “ttyAMA0”修改爲“ttyS0”
sudo nano /lib/systemd/system/hciuart.service
將 “ttyAMA0”修改爲“ttyS0”
保存退出(注:這裏的我修改完之後,有自動的被修改回來成了dev-serial1.device,應該是系統自己修改的,我們修改完不需要動他就行了)
3.更新並重啓
sudo apt-get update sudo apt-get upgrade sudo reboot
上面就完成了硬件方面的設置,現在開始在樹莓派中編寫串口的程序:
#include <wiringSerial.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> int main(int argc, int *argv[]) //int serialOpen (const char *device, const int baud) { int fd; if((fd = serialOpen("/dev/ttyAMA0", 115200)) < 0) { fprintf(stderr,"Unable to open serial device: %s\n", strerror(errno)); return 1; } serialPuts(fd, "Usart send Test,Just by launcher!"); for(;;) { if(serialDataAvail(fd) > 0) { putchar(serialGetchar(fd)); } } return 0; }
編寫makefile:
main.o:main.c
gcc main.c -o main.o -l wiringPi
最終的到的文件如下圖所示:
安裝CH340串口驅動程序(下載鏈接:http://download.csdn.net/download/u012654756/7731601),連接好CH340模塊和樹莓派的串行接口GPIO14&GPIO15:
串口安裝驅動結果USB-SERIAL CH340(COM4) 硬件連接圖GPIO14 & GPIO15
打開串口調試助手:
運行樹莓派上的程序:
sudo ./main.o
結果如下: