1. 程式人生 > >樹莓派3B的串列埠設定與簡單除錯

樹莓派3B的串列埠設定與簡單除錯

小派買回來很久都沒用,突然接到一個要在一個linux環境下做命令翻譯器的工作。所以想拿小派來客串一下,但是不走運的我百度了很多樹莓派3B串列埠設定的方法試了很久才試通,所以覺得有必要整理一下。因為本人是小白,所以我覺得小白都可以看懂,嘻嘻。

那麼首先,我轉載一個很有用的東西如下(這個非常詳細有用我也是看到這個才試通的):

主要為了記錄下來下次再配置時的方便。

通常學習一塊新的硬體平臺,大家第一個工程便是流水燈,實際上這屬於IO口的基本控制,這與上篇文章VS使用wiringPi庫控制樹莓派的GPIO是異曲同工的,接下來便應該是開始使用其通訊介面,而通訊接口裡面最簡單的又屬串列埠(uart),雖然簡單但目前仍然有很多模組是以串列埠作為通訊介面的,如一些藍芽模組、低速wifi模組、GPS模組、GPRS模組等。樹莓派3代與之前的樹莓派相比除了CPU效能上的提升外,還有一個顯著的特色便是板載集成了WIFI及藍芽,正是由於整合的這個藍芽模組,又使得樹莓派3代的串列埠使用相比於之前版本有了些麻煩,本文的目的便是解決這些麻煩並編寫驗證了一個簡單的串列埠程式碼。

樹莓派3代串列埠的麻煩

樹莓派從大的方向來說一共出了3代,每一代的CPU外設基本相同,但核心不同,外設裡面一共包含兩個串列埠,一個稱之為硬體串列埠(/dev/ttyAMA0),一個稱之為mini串列埠(/dev/ttyS0)。硬體串列埠由硬體實現,有單獨的波特率時鐘源,效能高、可靠,mini串列埠效能低,功能也簡單,並且沒有波特率專用的時鐘源而是由CPU核心時鐘提供,因此mini串列埠有個致命的弱點是:波特率受到核心時鐘的影響。核心若在智慧調整功耗降低主頻時,相應的這個mini串列埠的波特率便受到牽連了,雖然你可以固定核心的時鐘頻率,但這顯然不符合低碳、節能的口號。在所有的樹莓派板卡中都通過排針將一個串列埠引出來了,目前除了樹莓派3代以外 ,引出的串列埠預設是CPU的那個硬體串列埠。而在樹莓派3代中,由於板載藍芽模組,因此這個硬體串列埠被預設分配給與藍芽模組通訊了,而把那個mini串列埠預設分配給了排針引出的GPIO Tx Rx,下圖是樹莓派3的介面圖

QQ截圖20170129145844

其中紅框中就是引出的串列埠IO,如果我們需要通過UART外接模組,預設情況下必須得使用效能很低的mini串列埠了,而且隨著核心主頻的變化,還會造成波特率的變化導致通訊的失敗,幾乎很難使用。所以我們希望恢復硬體串列埠與GPIO 14/15的對映關係,使得我們能夠通過GPIO使用高效能的硬體串列埠來連線我們的串列埠裝置。

將樹莓派3的硬體串列埠與mini串列埠預設對映對換

樹莓派可以配置檔案來修改裝置樹,我的理解是可以通過配置檔案來修改管腳的對映關係,這在許多Cortex-M3核心的微控制器中也很常見,可以將同一個串列埠對映到不同的管腳上,以方便PCB的佈線。

為了在樹莓派3中通過GPIO使用高效能的硬體串列埠,我們必須將分配給藍芽使用的硬體串列埠與分配給IO排針的mini串列埠進行對換,這必然會使得藍芽模組的功能受到影響,但還好,藍芽並不是必須的。

在樹莓派系統中

/boot/overlays/

目錄下,提供了一個pi3-miniuart-bt-overlay.dtb的檔案,這個檔案的作用可以通過該目錄下的README檔案檢視

如果沒有pi3-miniuart-bt-overlay.dtb這個檔案,點選http://ukonline2000.com/wp-content/uploads/2016/03/下載

QQ截圖20170129153256
QQ截圖20170129153541

README檔案中說明了這個檔案的功能是將樹莓派3的藍芽切換到mini串列埠(ttyS0),並且恢復硬體串列埠(ttyAMA0)到GPIO 14&15腳中。並且給出了載入的方法。

首先在樹莓派命令終端中通過命令檢視樹莓派3當前的串列埠對映關係

1

ls -l /dev

QQ截圖20170129151839

紅色框中體現的應該是一種對映關係,此處暫時沒有做深究,簡單理解 serial0 就是GPIO對映的串列埠,此時GPIO對映的串列埠是預設的/dev/ttyS0這個mini串列埠。

使用下面這條指令編輯 /boot/config.txt 檔案

sudo nano /boot/config.txt

在該檔案中增加一行程式碼

dtoverlay=pi3-miniuart-bt

然後儲存檔案,重啟樹莓派使之生效。

再通過 ls -l /dev 命令檢視修改後的對映關係

QQ截圖20170129154121

對比修改前的關係,可以看出serial0和serial1 與 ttyAMA0和ttyS0的對映關係對換完成了,也就是ttyAMA0對映到了引出的GPIO Tx Rx上。

禁用串列埠的控制檯功能

前面的步驟已經交換了硬體串列埠與mini串列埠的對映關係,但現在想使用樹莓派外接串列埠模組進行通訊還不行,因為樹莓派IO引出的串列埠預設是用來做控制檯使用的,它的初衷是為了在沒有網路介面時,通過串列埠對樹莓派進行相關的配置。因此需要禁用這個預設功能,使得串列埠為我們自由使用。

在樹莓派命令視窗中分別通過如下兩個命令停止和禁用串列埠的控制檯功能

sudo systemctl stop [email protected]

sudo systemctl disable [email protected]

由於我們前面已經交換了串列埠的對映關係,因此這裡注意是ttyAMA0。

然後通過下列指令編輯cmdline.txt檔案

sudo nano /boot/cmdline.txt

然後看到裡面類似如下的內容

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

把console=serial0,115200刪掉console=serial0,115200,剩下的內容類似如下

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

編寫一個簡單的串列埠程式

wiringpi實際上不只提供了基本的IO口的讀寫函式,還提供了串列埠操作庫函式。

樹莓派的串列埠預設為串列埠終端除錯使用,如要正常使用串列埠則需要修改樹莓派設定。關閉串列埠終端除錯功能後則不能再通過串列埠登陸訪問樹莓派,需從新開啟後才能通過串列埠控制樹莓派。

一、釋放串列埠

執行如下命令進入樹莓派配置

sudo raspi-config
1 sudo raspi-config

選擇 Advanced Options  ->Serial ->no 關閉串列埠除錯功能

開啟/boot/config.txt檔案,找到如下配置語句使能串列埠,如果沒有,可新增在檔案最後面。

1 enable_uart=1

二、使用minicom除錯串列埠

    設定完之後串列埠便可以正常使用了,便可測試一下樹莓派的UART是否正常工作,Pioneer600擴充套件板帶有USBUART功能,用USB線連線到電腦。minicom便是一個簡單好用的工具。minicomlinux平臺串列埠除錯工具,相當於windows上的串列埠除錯助手。

   1、minicom安裝
1 sudo apt-get install minicom

2、minicom啟動

1 minicom -D /dev/ttyAMA0

預設波特率為115200,如需設定波特率為9600加引數 -b 9600,-D代表埠,/dev/ttyAMA0 類似於windows中的COM1

樹莓派中安裝wiringPi方法:

mkdir temp
cd temp
wget http://project-downloads.drogon.net/files/wiringPi.tgz
tar xf wiringPi.tgz
cd wiringPi/wiringPi/
sudo apt-get install libi2c-dev 
make
sudo make install

由於身邊沒有usb轉ttl的裝置,只用一根杜邦線短接TX和RX端也可以檢查串列埠是否可以用了,於是寫了如下程式碼:(程式碼的執行命令為

gcc –Wall uart.c –o uart –lwiringPi
sudo ./uart

這裡一定要記得輸入-lwiringPi不然wiringPi庫裡的函式都用不了)

01 #include <stdio.h>
02 #include <wiringpi.h>
03 #include <wiringserial.h>
04
05 int main()
06 {
07 int fd;
08 if(wiringPiSetup() < 0)return 1;
09 if((fd = serialOpen("/dev/ttyAMA0",115200)) < 0)return 1;
10 printf("serial test start ...\n");
11 serialPrintf(fd,"Hello World!!!\n");
12 while(1)
13 {  
14 serialPutchar(fd,serialGetchar(fd));         printf("Can recive the message...\n");
15 }  
16 serialClose(fd);
17 return 0;
18 }                                                                         

相關推薦

樹莓3B串列設定簡單除錯

小派買回來很久都沒用,突然接到一個要在一個linux環境下做命令翻譯器的工作。所以想拿小派來客串一下,但是不走運的我百度了很多樹莓派3B串列埠設定的方法試了很久才試通,所以覺得有必要整理一下。因為本人是小白,所以我覺得小白都可以看懂,嘻嘻。 那麼首先,我轉載一個很有用的東西

樹莓 3b 串列啟用

網上搜到的方法都沒用,不知道是不是系統版本的原因。以下方法是試出來的。。。   uname -aLinux raspberrypi 4.14.79-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l GNU/Linux   關於串列埠設

樹莓3B+ 串列除錯修改配置

在2018-10-09-raspbian-stretch.img映象中,要使用串列埠來除錯裝置,需要修改conig.txt檔案。 1. sudo systemctl disable hciuart 禁

樹莓3b串列(UART)使用問題的解決方法!及關閉板載藍芽方法

        原因是樹莓派CPU內部有兩個串列埠,一個是硬體串列埠(官方稱為PL011 UART),一個是迷你串列埠(官方成為mini-uart)。在樹莓派2B/B+這些老版樹莓派上,官方設計時都是將“硬體串列埠”分配給GPIO的UART(GPIO14&GPIO15),因此可以獨立調整串列埠的速率

樹莓3B串列UART配置

樹莓派2017-11-29-raspbian-stretch-lite版本配置親測只需2步可以搞定1.   sudo systemctl disable hciuart禁用藍芽2.   sudo nano /boot/config.txt在最後加上一行dtoverlay=pi

樹莓通過串列計算機通訊

希望此文可以解決部分朋友的問題。 第一步:用“USB TO TTL”將樹莓派和計算機連線。 第二步:在計算機安裝“USB TO TTL”的驅動 第三步:在計算機上安裝串列埠除錯助手。 第四步:到https://pypi.org/project/pyserial/上下載pyserial

樹莓3 串列使用 raspberry pi 3B+ uart boot overlay(最全樹莓串列使用)

         今天要說說樹莓派3的UART串列埠的使用問題,該串列埠問題的官方反饋及回覆請參考這兩篇官方博文http://www.briandorey.com/post/Raspberry-Pi-3-UART-Boot-Overlay-Part-Two        

樹莓 3b jupyter notebook 設定為後臺服務

情景說明: 樹莓派上已經搭建好了jupyter,命令jupyter notebook可以啟動,在區域網/外網都可以通過瀏覽器訪問.在終端內執行jupyter notebook會一直佔據命令列. 後臺實現:jupyter notebook > output.file 2&>

樹莓串列通訊

工具有:   樹莓派zero v1.3   CH340 USB轉串列埠工具   電腦端的串列埠除錯助手 硬體接線如圖:    配置: 樹莓派的串列埠預設為串列埠終端除錯使用,如要正常使用串列埠則需要修改樹莓派設定。關閉串列埠終端除錯功能後則不能再通過串列埠登陸訪問樹莓派,需從新開啟後才能通過串列

樹莓安裝串列除錯助手xgom

一、安裝 xgcom所需要的工具 sudo apt-get update sudo apt-get install automake libglib2.0-dev libvte-dev libgtk2.

樹莓---wiringPi串列使用(win10+樹莓3+usb轉串列

參考 準備 在樹莓派上用Qt寫串列埠傳送資料的程式 serialTEST.pro QT += core QT -= gui TARGET = test CONFIG +=

樹莓3串列(UART)使用問題的解決方法!

根據官方的反饋和回覆,我們瞭解到樹莓派3上使用者目前無法正常是使用GPIO中的UART串列埠(GPIO14&GPIO15),也就是說使用者無論是想用串列埠來除錯樹莓派,還是想用GPIO中的串列埠來連線GPS,藍芽,XBEE等等串列埠外設目前都是有問題的。 原因是樹

樹莓3串列(UART)使用問題(板載藍芽和串列)!!

根據官方的反饋和回覆,我們瞭解到樹莓派3上使用者目前無法正常是使用GPIO中的UART串列埠(GPIO14&GPIO15),也就是說使用者無論是想用串列埠來除錯樹莓派,還是想用GPIO中的串列埠來連線GPS,藍芽,XBEE等等串列埠外設目前都是有問題的。 原因是樹莓派CPU內部有兩個串列埠,一個

樹莓串列配置

在樹莓派3B的外設裡面一共包含兩個串列埠,一個稱之為硬體串列埠(/dev/ttyAMA0),一個稱之為mini串列埠(/dev/ttyS0)。硬體串列埠由硬體實現,有單獨的波特率時鐘源,效能高、可靠,mini串列埠效能低,功能也簡單,並且沒有波特率專用的時鐘源而是由CPU核

樹莓3B vnc解析度設定

樹莓派3B在使用vnc的時候解析度特別低,甚至無法顯示整個桌面,所以需要對vnc登入的解析度進行設定。其實在樹莓派3上設定vnc的解析度很簡單,只需要用sudo raspi-config命令就能設定。       設定方

玩轉樹莓3 -- 串列問題的解決

買到樹莓派3,想通過串列埠控制檯來玩一下 結果發現,串列埠是不能用的 這就意味著,開機過程當中,看不到那些字串列印,之後,也使用不了串列埠控制檯 查了一下網上的相關文章 主要原因是,樹莓派3帶有藍芽功能,而該藍芽模組是通過硬體串列埠UART0/ttyAMA0連線的 另外還

樹莓_Linux串列程式設計_實現自發自收

串列埠是計算機上一種非常通用裝置通訊的協議,常用PC機上包含的是RS232規格的串列埠,具有連線線少,通訊簡單,得到廣泛的使用。 Linux對所有裝置的訪問是通過裝置檔案來進行的,串列埠也是這樣,為了訪問串列埠,只需開啟其裝置檔案即可操作串列埠裝置。在linux系統下面,每

樹莓3b電腦串列互相通訊進行資料傳輸的配置過程

    我們經常需要用串列埠來互發訊息,但是樹莓派的串列埠不像微控制器那樣,稍微有點麻煩。本文參考彙總網上的關於樹莓派串列埠相關資料,快速設定好串列埠。參考連結:1.https://blog.csdn.net/qq_31396093/article/details/58640

2018最新最詳細 樹莓3B+ QT5 串列收發配置使用者程式開機自啟方法圖文教程

2018.9.6 由於實驗室專案需要處理資料並用串列埠進行傳送,最後還要開機自啟,專門鼓搗了一番。由於網上的方案隨著樹莓派本身版本變化而不適應,因此除錯過程中也實在耗費了不少功夫。最有價值的除錯方案還是官方的英文教程:Raspberry Pi 3 UART Boot Ove

【最新】 樹莓3B 設定通用(UART)串列的方法

    去年入手了一個樹莓派3B,和很多人一樣,在使用串列埠時遇見了問題。因為新的樹莓派增加了藍芽功能,而這個功能恰好佔用了我們想要使用的串列埠,並且這種佔用是預設的。因此,我們需要關閉藍芽功能並更改串列埠配置。我找尋了很多網上的資料及教程,但可能由於我是一個十足的新手,