樹莓派3 B+ 的串列埠(USART)使用問題 (也是用C寫的)
這個也是用C寫的
摘自:https://www.cnblogs.com/uestc-mm/p/7204429.html
樹莓派3 B+ 的串列埠(USART)使用問題
轉載:http://ukonline2000.com/?p=880
最新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
結果如下:
附加:關於Raspberry Zero W的相關配置可以參考這篇文章:https://blog.csdn.net/RambleMY/article/details/81206090
這裡親自測試過可以使用,轉載再次,方便自己查閱:
S1.修改cmdline.txt檔案
sudo nano /boot/cmdline.txt
原來檔案中的內容是:
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=a05c3c8f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
去掉其中所有何console相關的內容,結果如下:
dwc_otg.lpm_enable=0 root=PARTUUID=a05c3c8f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
S2.關閉板載藍芽
sudo systemctl disable hciuart
編輯config.txt檔案
sudo nano /boot/config.txt
新增如下的內容:
dtoverlay=pi3-disable-bt
重啟樹莓派
sudo shutdown -r now
S3.禁用串列埠的控制檯功能
編輯config.txt檔案,增加如下一行:
enable_uart=1
測試並執行.
轉載請註明出處!感謝GISPALAB實驗室的老師和同學們的幫助和支援~
相關文章
- 啟用樹莓派3B串列埠通訊能力樹莓派串列埠
- 樹莓派4B基於OpenCV的C++環境的串列埠通訊樹莓派OpenCVC++串列埠
- 沒有樹莓派顯示器,鍵盤,滑鼠,串列埠, 樹莓派怎麼無線上網?樹莓派串列埠
- 樹莓派使用入門:用樹莓派學 Linux樹莓派Linux
- 樹莓派使用入門:慶祝樹莓派的 14 天樹莓派
- 樹莓派使用樹莓派
- 樹莓派使用入門:如何更新樹莓派樹莓派
- 樹莓派 | 修改樹莓派3熱點的名稱和密碼樹莓派密碼
- 樹莓派使用入門:如何啟動一個新的樹莓派樹莓派
- 樹莓派是什麼 樹莓派能做什麼 樹莓派的功能用途樹莓派
- 樹莓派使用入門:教孩子們用樹莓派學程式設計的 5 種方法樹莓派程式設計
- 串列埠,COM口,UART,USART串列埠
- 樹莓派使用入門:進入物理世界 —— 如何使用樹莓派的 GPIO 針腳樹莓派
- 「玩轉樹莓派」樹莓派 3B+ 配置無線WiFi樹莓派WiFi
- 樹莓派使用入門:如何用樹莓派來娛樂樹莓派
- 樹莓派使用入門:如何購買一個樹莓派樹莓派
- 售$35 樹莓派B+升級版正式登場樹莓派
- 5、樹莓派3 Model B ——— 樹莓派PWM控制直流電機速度樹莓派
- 樹莓派 3 新手指南樹莓派
- 樹莓派:開機使用樹莓派
- 樹莓派除錯PCF8591遇到的小問題樹莓派除錯
- 樹莓派使用入門:如何為樹莓派社群做出貢獻樹莓派
- 樹莓派:最好的安排樹莓派
- 樹莓派的連線樹莓派
- 樹莓派的啟動樹莓派
- C#控制樹莓派入門C#樹莓派
- 使用holer從外網ssh訪問樹莓派樹莓派
- 樹莓派外網ssh訪問樹莓派
- 樹莓派opencv的安裝樹莓派OpenCV
- 樹莓派:光陰的故事樹莓派
- 用 Node.js 給樹莓派寫了個控制檯Node.js樹莓派
- 樹莓派3B--4*4矩陣按鍵模組的使用樹莓派矩陣
- 用樹莓派玩轉藍芽樹莓派藍芽
- 樹莓派已經通過網路連線通過串列埠通訊在串列埠除錯小助手列印與操作樹莓派串列埠除錯
- 樹莓派 4B 修復 USB-C 供電問題的新版已出貨樹莓派
- 【.NET 與樹莓派】使用 GPIO 庫樹莓派
- 學習使用樹莓派的 7 個資源樹莓派
- 樹莓派CM4(四):樹莓派映象替換核心樹莓派