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