(本文為電子發(fā)燒友網(wǎng)用戶風(fēng)拂柳絮原創(chuàng)稿件)眾所周知,串口數(shù)據(jù)通訊方式有單工模式、半雙工模式以及全雙工模式。單工模式:只支持?jǐn)?shù)據(jù)在一個方向上傳輸;半雙工模式:允許數(shù)據(jù)在兩個方向上傳輸,但某一時刻只允許在一個方向上傳輸;全雙工模式:同時在兩個方向上傳輸,是兩個單工通信的結(jié)合,要求發(fā)送設(shè)備和接收設(shè)備同時具有獨(dú)立的接收和發(fā)送能力。
例如我們常見的RS232、RS485、RS422串口通訊方式,其中RS232是全雙工的,RS485是半雙工的,RS422是全雙工的,當(dāng)然兩個半雙工的485可以組成422通信方式。下面就講一下今天的重點(diǎn)RS485通信方式,了解了485通信也就基本了解了422通信。
先介紹一下RS485的電氣特性,RS485采用差分傳輸?shù)姆绞剑壿嫛?”以兩線間的電壓差為+(2~6)V表示;邏輯“0”以兩線間的電壓差為-(2~6)V表示。接口信號電平比RS232降低了,不易損壞接口電路的芯片,且該電平與TTL電平兼容,可方便與TTL電路連接。
傳輸速率高,抗干擾能力強(qiáng),并且可以大大延長通信距離,比如RS232傳輸距離一般是30米,而采用RS485,完全不需要修改程序,通信距離可以達(dá)到1200米(9600bps)。且RS485一般最大支持32個節(jié)點(diǎn),實現(xiàn)多節(jié)點(diǎn)收發(fā)。特制的485芯片可以實現(xiàn)更多節(jié)點(diǎn)收發(fā)。
既然RS485通信這么優(yōu)秀,那么就開始今天的實例吧。
首先本次實例選用的是STM32F107VCT6,如圖一所示,以及圖二所分配給485通信的
管腳,本次PA2作為單片機(jī)的發(fā)送端,PA3作為單片機(jī)的接收端,PA1作為接收和發(fā)送使能的控制端。板子上輸出的A2、B2引腳分別接DB9的T/R+、T/R-,此處針對不同的DB9接腳
位置不一樣,讀者注意辨別。硬件電路到這里就基本完成。
下面是軟件調(diào)試部分,
Step1,在對應(yīng)的配置里找到Device中找到本次的芯片類型F107VC,當(dāng)然不同的芯片選型一定要正確。
Step2,在對應(yīng)的宏定義里面將圓圈處改成CL。因為此次芯片flash是256K,屬于小芯片容量。
Step3,配置jlink驅(qū)動,選擇四線的SW模式,四線分別是3.3v,SWDIO,SWCLK,GND。看到SWDevice中出現(xiàn)此次圓圈處的型號,并點(diǎn)擊Flash Download出現(xiàn)下圖的界面看看芯片選型是不是256k,不是點(diǎn)擊Add添加,選擇256k的flash size即可,然后一些列OK就行。
Step4,主函數(shù)的編寫,當(dāng)然此次省略了新建工程等一些列操作,不懂的可以百度有步驟指示,主函數(shù)程序很簡單,一個中斷配置函數(shù),一個485初始化函數(shù),當(dāng)然485初始化函數(shù)里包括很多配置,具體的往下看,延時函數(shù)此次可以不用。主函數(shù)就是一個發(fā)送接收使能的切換(RS485_TX_EN)和一個發(fā)送函數(shù)。
Step5,對485初始化函數(shù)進(jìn)行定義,管腳的配置,此處是PA2輸出,PA3輸入,PA1是使能位,具體可參看上面原理圖,同時在此函數(shù)中對波特率以及串口的中斷進(jìn)行了配置。
Step6,485發(fā)送函數(shù)及中斷函數(shù)進(jìn)行了定義,由于此次沒有使用外部中斷,而是采用了內(nèi)部中斷的方式,在串口2中斷中將接收到的數(shù)據(jù)保存在receive數(shù)組中,并定義了包頭和包位分別為0xAA,0xBB,并設(shè)置發(fā)送數(shù)據(jù)長度為6,不滿足次三個條件的數(shù)據(jù)是無法發(fā)送的串口調(diào)試助手的,當(dāng)然時刻要注意使能位(RS485_TX_EN)為1還是為0,為1則485發(fā)送,為0則485接收,因為485是半雙工,前面已經(jīng)講到,某一時刻只能接收或者發(fā)送。并在頭文件中將相應(yīng)的函數(shù)以及數(shù)組定義成全局。
Step7,最后就是最緊張的測試環(huán)節(jié),將串口調(diào)試助手圓圈里的配置調(diào)成與代碼的配置一樣的形式,并將發(fā)送數(shù)據(jù)的格式改成帶有包頭AA包尾BB中間4位數(shù)據(jù)格式的形式發(fā)送,點(diǎn)擊發(fā)送,就可以在串口調(diào)試助手中收到此次的數(shù)據(jù),當(dāng)然如果不滿足包頭和包位分別為0xAA,0xBB,發(fā)送數(shù)據(jù)長度為6的格式,將不會在串口助手中收到數(shù)據(jù),讀者可以自行嘗試,版面有限,不多說明。
Step8,本人才疏學(xué)淺,屬于剛摸索單片機(jī)階段,可能在很多地方不盡完美,希望大佬們多批評指正,不吝賜教,本人在此先謝謝大家。
-
通信
+關(guān)注
關(guān)注
18文章
6036瀏覽量
136065 -
RS485
+關(guān)注
關(guān)注
39文章
1161瀏覽量
82375
原文標(biāo)題:8個步驟,教你輕松搞定485通訊小實例(燒友原創(chuàng))
文章出處:【微信號:elecfans,微信公眾號:電子發(fā)燒友網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論