STM32 RS485通訊軟硬體實現

2022-07-05 02:09:12 字數 2914 閱讀 3113

os:windows 64

development kit:mdk5.14

ide:uv4

mcu:stm32f103c8t6/vet6

ad:altium designer 18.0.12

rs-485又名tia-485-a, ansi/tia/eia-485或tia/eia-485。

rs485是乙個定義平衡數字多點系統中的驅動器和接收器的電氣特性的標準,該標準由電信行業協會和電子工業聯盟定義。使用該標準的數字通訊網路能在遠距離條件下以及電子雜訊大的環境下有效傳輸訊號。rs-485使得廉價本地網路以及多支路通訊鏈路的配置成為可能。rs485介面組成的半雙工網路,一般是兩線制(以前有四線制接法,只能實現點對點的通訊方式,現很少採用),多採用遮蔽雙絞線傳輸。這種接線方式為匯流排式拓撲結構在同一匯流排上最多可以掛接32個結點。在rs485通訊網路中一般採用的是主從通訊方式,即乙個主機帶多個從機。很多情況下,連線rs-485通訊鏈路時只是簡單地用一對雙絞線將各個介面的「a」、「b」端連線起來。rs485介面聯結器採用db-9的9芯插頭座,與智慧型終端rs485介面採用db-9(孔),與鍵盤連線的鍵盤介面rs485採用db-9(針)。

在低速、短距離、無干擾的場合可以採用普通的雙絞線,反之,在高速、長線傳輸時,則必須採用阻抗匹配(一般為120ω)的rs485專用電纜(stp-120ω(用於rs485 & can)一對18awg),而在干擾惡劣的環境下還應採用鎧裝型雙絞遮蔽電纜(astp-120ω(用於rs485 & can)一對18awg)。

博主使用的485晶元為max3485,實現半雙工通訊。應用電路如下圖:

r6為120歐的阻抗匹配電阻,如果長距離通訊的話,一定要在最後乙個節點接上這乙個電阻;但是短距離通訊的話焊上r6反而出錯(博主在實驗中發現,焊上匹配電阻後,主從節點通訊異常,除錯發現大量的00位元組在自動收發),因此建議大家先不要焊上,但是在電路設計時保留。rxd485、txd485分別接控制晶元的usart1_rx、usart1_tx(串口號可自行選擇,這裡使用串列埠1),此外;485c接晶元的pa4引腳(隨意選擇)用以切換485的通訊狀態。j1、j2為兩個jst介面,方便485通訊線路的連線,由於是從節點因而留出兩個。以下為其餘連線電路:

接收最大位元組

5#define usart1_tx_len 50 //

傳送最大位元組

6#define rs485_tx_en paout(4)78

9extern u8 usart1_rx_buf[usart1_rx_len]; //

接收緩衝

10extern u8 usart1_tx_buf[usart1_tx_len]; //

傳送緩衝

11extern u8 usart1_rx_data_len; //

實際接收資料位元組長度

12extern u8 usart1_tx_data_len; //

待傳送資料位元組長度

13extern u8 usart1_rx_flag; //

是否收到資料

1415

void

rs485_config(u32 bound);

16void usart1_irqhandler(void

);17

void rs485_send_data(u8 *buf,u8 len);

485.h

1 #include "

sys.h

"2 #include "

delay.h

"3 #include "

rs485.h"4

5 u8 usart1_rx_buf[usart1_rx_len]; //

接收緩衝

6 u8 usart1_tx_buf[usart1_tx_len]; //

傳送緩衝

7 u8 usart1_rx_data_len = 0; //

實際接收資料位元組長度

8 u8 usart1_tx_data_len = 0; //

待傳送資料位元組長度

9 u8 usart1_rx_flag = 0; //

串列埠1是否接收完資料

1011

void usart1_irqhandler(void)12

22 usart1_rx_flag=1; //

串列埠1接收到資料23}

24}2526

void

rs485_config(u32 bound)

2784

85void rs485_send_data(u8 *buf,u8 len) //

傳送完改為接收

8694

while(usart_getflagstatus(usart1, usart_flag_tc) ==reset);

9596 usart1_rx_data_len=0

;97 rs485_tx_en=0;//

設定為接收模式

98 }

485.c

通過以上**我麼們就能通過stm32的串列埠資源實現485的正常通訊了。注意事項:

RS485通訊介紹

rs485通訊介紹 rs 485 半雙工 邏輯1 2v 6v 邏輯0 6v 2v 這裡的電平指ab 兩線間的電壓差。一 基本電路實現 1 基礎的rs485電路 需要控制re de cn 來控制485狀態的切換,一般連在一起用io口控制。當cn為低時485處於接收狀態 當r d為高時485處於傳送狀態...

rs485除錯助手 RS485通訊連線方式是怎樣的

電工之家 www.dgzj.com qq群 2179090 rs485是串列埠的一種,常見的還有rs232,rs422,都屬於串列埠,它們都只是定義了電氣特性的通訊結構,並沒有定義資料傳輸的協議。有的人很容易混淆它們之間的概念,比如人家問你是什麼通訊協議,你回答是rs485,那麼別人就悶了。所謂的通...

STM32通訊介面(三)硬體SPI

spi是序列外設介面 serial peripheral inte ce 的縮寫。spi,是一種高速的,全雙工,同步的通訊匯流排,是motorola最先在其的mc68hcxx晶元上使用,並且在晶元的管腳上只占用四根線,節約了晶元的管腳,同時為pcb的布局上節省空間,提供方便,正是出於這種簡單易用的特...