目錄
一、樹莓派串口通信模塊介紹
二、樹莓派藍(lán)牙、串口引腳映射對(duì)換步驟
1.啟動(dòng)串口
2. 禁用藍(lán)牙(硬件串口與mini串口映射對(duì)換)
3.驗(yàn)證是否交換成功
三、樹莓派安裝mini串口調(diào)試助手
四、樹莓派與電腦串口調(diào)試
五、樹莓派與STM32串口調(diào)試
一、樹莓派串口通信模塊介紹
樹莓派串口通信與藍(lán)牙模塊的基本介紹
樹莓派3/4B有兩個(gè)串口,分別為 “硬件串口”/dev/ttyAMA0 和“mini串口” /dev/ttyS0。
“硬件串口”有單獨(dú)的波特率時(shí)鐘源,性能高、可靠,“mini串口”性能低,功能也簡單,并且沒有波特率專用的時(shí)鐘源而是由CPU內(nèi)核時(shí)鐘提供,因此“mini串口”有個(gè)致命的弱點(diǎn)是:波特率受到內(nèi)核時(shí)鐘的影響,內(nèi)核若在智能調(diào)整功耗降低主頻時(shí),相應(yīng)的這個(gè)mini串口的波特率便受到牽連。
簡單概括來說:“硬件串口”是全功能的,而“mini串口”則是閹割過的。
在實(shí)際項(xiàng)目中遇到的問題是,如果使用“mini串口”/dev/ttyS0,在通訊需要奇偶校驗(yàn)時(shí)會(huì)報(bào)錯(cuò)。所以項(xiàng)目中為了穩(wěn)定還是推薦使用“硬件串口” /dev/ttyAMA0 。
在樹莓派3/4B中,由于板載藍(lán)牙模塊,因此這個(gè)“硬件串口”被默認(rèn)分配給與藍(lán)牙模塊通信了,而把“mini串口”默認(rèn)分配給了排針引出的GPIO Tx Rx。在開啟串口通訊不做任何設(shè)置的時(shí)候,默認(rèn)的串口通訊使用的是“mini串口”。
因此,如果要在項(xiàng)目中使用,為了通訊穩(wěn)定,需要進(jìn)行“硬件串口”與“mini串口”默認(rèn)映射對(duì)換,把“硬件串口”/dev/ttyAMA0映射分配給GPIO的Tx Rx。
二、樹莓派藍(lán)牙、串口引腳映射對(duì)換步驟
1.啟動(dòng)串口
首先打開此設(shè)置界面
然后選擇此界面:
此舉是將串口打開,點(diǎn)擊OK,再重啟樹莓派。
2. 禁用藍(lán)牙(硬件串口與mini串口映射對(duì)換)
映射對(duì)換的目的是將硬件串口作用在GPIO接口的Tx Rx上。我的項(xiàng)目上沒有用到藍(lán)牙通訊,所以禁用藍(lán)牙后也沒有再次開啟,也沒有測試再次開啟藍(lán)牙通訊是否正常,如果項(xiàng)目中有用到藍(lán)牙通訊,那么進(jìn)行這一步的時(shí)候要謹(jǐn)慎。
打開終端輸入:
ls /dev -al?
查看所有串口映射,下拉找到這一行,如下圖所示:
此時(shí)我們可以發(fā)現(xiàn)我們的serial0,也就是主串口映射為ttyS0,也就是主串口指向的是mini串口,前文我們提到mini串口效率低不穩(wěn)定,所以這里我們需要將主串口指向硬件串口,也就是ttyAMA0
打開終端,輸入:
sudo nano /boot/config.txt
滾輪到末尾最下方,加入內(nèi)容:
dtoverlay=pi3-disable-bt
這樣,ttyAMA0 得以釋放,這時(shí)候樹莓派也自動(dòng)交換了ttyAMA0和ttyS0,把serial0 分配給了 ttyAMA0 。
3.驗(yàn)證是否交換成功
打開終端,再次輸入:
ls /dev -al
就可以看到如下圖所示,這樣我們就配置成功了。
三、樹莓派安裝mini串口調(diào)試助手
打開終端,輸入:
sudo apt-get install minicom?
等待安裝完成。
安裝完成之后,接下來就是使用串口助手。在終端輸入命令:
minicom -D /dev/ttyAMA0 -b 115200?
回車即可進(jìn)入。這里 -D /dev/ttyAMA0 就是指向我們打開的串口端口號(hào),和COM1這種是一樣的, -b 115200是配置波特率,這一項(xiàng)我們在minicom中輸入 Ctrl+A 在下方也是可以看到我們的波特率。
注意:這里我遇到了一個(gè)問題,就是提示打開 ttyAMA0 的時(shí)候沒有權(quán)限,如果你也遇見了沒有權(quán)限打開tty8的這種提示,打開終端輸入:
sudo chmod 777 /dev/ttyUSB0
這里的 ttyUSB0 對(duì)應(yīng)你提示沒有權(quán)限的串口,然后回車就OK解決了。
minicom打開之后如圖所示:
我打開minicom串口助手的時(shí)候,會(huì)發(fā)現(xiàn)鍵盤失靈,就是在minicom下,鍵盤跟沒插似的。如果你沒有遇到這種情況,就可以跳過這一小節(jié)。那么具體解決辦法,參考這個(gè)博主的博文,里面有著詳細(xì)的操作步驟:
https://blog.csdn.net/weixin_41276153/article/details/128037288?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168207712316800186528500%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168207712316800186528500&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-128037288-null-null.142^v86^wechat,239^v2^insert_chatgpt&utm_term=%E6%A0%91%E8%8E%93%E6%B4%BE%E4%B8%8Estm32%E4%B8%B2%E5%8F%A3%E9%80%9A%E4%BF%A1&spm=1018.2226.3001.4187
好了,到這里所有配置已經(jīng)結(jié)束,接下來就可以驗(yàn)證了。
四、樹莓派與電腦串口調(diào)試
打開電腦上的串口調(diào)試助手,把樹莓派的minicom串口調(diào)試助手也打開。我用的是ttyAMA0,所以指令是:
minicom -D /dev/ttyAMA0 -b 115200
注意:電腦上的串口助手波特率等信息與樹莓派上的信息要對(duì)應(yīng)。
連線方式:
樹莓派上的RX引腳? ?連接? ?USB-TTL上的TX引腳,
樹莓派上的TX引腳? ?連接? ?USB-TTL上的RX引腳,
GND? ?與? ?GND相連。
把USB-TTL插到電腦上之后就可以進(jìn)行樹莓派與電腦之間的串口調(diào)試了。
?串口調(diào)試助手網(wǎng)上隨便找一個(gè)就可以,這里給個(gè)鏈接:
鏈接:https://pan.baidu.com/s/17CVgDrNb6OM6yVvCB5A8HQ?pwd=1mge?
提取碼:1mge
五、樹莓派與STM32串口調(diào)試
連線方式:
樹莓派上的RX引腳? ?連接? ?STM32上的TX引腳,
樹莓派上的TX引腳? ?連接? ?STM32上的RX引腳,
GND??與??GND相連(這個(gè)GND最好接上,讓它們之間有一個(gè)統(tǒng)一的低電平,更容易接收到數(shù)據(jù))。
我們可以寫這么一個(gè)程序進(jìn)行測試:樹莓派發(fā)送“456”,STM32接收到之后發(fā)送“123”回來。
STM32端的程序就不掛了,網(wǎng)上有很多例程。把波特率、校驗(yàn)位、停止位等信息配置對(duì)了就可以。下面掛一下樹莓派的發(fā)送“456”的程序。
import serial
ser = serial.Serial("/dev/ttyAMA0", 9600, timeout=0.1) # 生成串口
while True:
ser.write(b'456') # 發(fā)送數(shù)據(jù)
效果如下圖:?
最后再留幾個(gè)樹莓派接收數(shù)據(jù)的程序,這兩句要放在while循環(huán)里,以達(dá)到串口實(shí)時(shí)接收信息的目的。
ser.flushInput() # 清空緩存
data = ser.read(1) # 讀取一個(gè)字節(jié)的數(shù)據(jù)
當(dāng)然這只是舉一個(gè)簡單的例子,具體讀取多少字節(jié)數(shù)據(jù),或者其他更多設(shè)置,可以網(wǎng)上搜索一下進(jìn)行修改?。
注意事項(xiàng):
1.我做的這個(gè)項(xiàng)目中,結(jié)合到了串口通信與攝像頭的實(shí)時(shí)檢測,由于二者都是實(shí)時(shí)的,所以串口通信的讀取間隔不能影響到攝像頭視頻流的采集。
所以,對(duì)于下面這句初始化代碼中,timeout的取值十分重要。經(jīng)過嘗試,間隔為0.1s的時(shí)候,攝像頭讀取視頻流是不卡頓的,但是有時(shí)候串口會(huì)接收不到信息。所以,具體情況還是需要你自己去親自調(diào)試。
ser = serial.Serial("/dev/ttyAMA0", 9600, timeout=0.1)文章來源:http://www.zghlxwxcb.cn/news/detail-561603.html
2.另外就是我自己感覺,波特率為9600時(shí)的效果要比115200的效果好一點(diǎn)。?文章來源地址http://www.zghlxwxcb.cn/news/detail-561603.html
到了這里,關(guān)于樹莓派與STM32之間串口通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!