利用USART可以進行多機處理器通信,其原理就是使從機處于靜默模式,由主機在需要的時候發(fā)送指令喚醒從機,并傳輸數(shù)據(jù)。STM32靜默模式特點:1、所有接收狀態(tài)位都不會被設(shè)置;2、所有的接收中斷都被禁止;3、USART_CR1寄存器中的RWU位被置1,RUW可以硬件自動控制或者在某些條件下由軟件寫。 連接方法很簡單,主機的TX輸出與從機的RX端口直接相連,從機TX端口要經(jīng)過與非門與主機RX端口連接。
多機通信方式有2種:空閑幀喚醒和地址喚醒。
空閑幀喚醒可以同時喚醒所有從機,在從機處于靜默模式時發(fā)送空閑幀(即所有位均為1的數(shù)據(jù)),喚醒多個從機,實現(xiàn)多個從機同步。
地址喚醒可以喚醒單個從機,從機靜默時發(fā)送地址幀,從機自動對比地址,地址配對正確則該從機喚醒,否則繼續(xù)進入靜默。這樣只有被尋址者才被激活,來接收數(shù)據(jù),減少由未被尋址的接收機器參與帶來的多余的USART服務(wù)開銷。這種模式下,MSB為1的字節(jié)被認為是地址,否則被認為是數(shù)據(jù)(MSB一般為數(shù)據(jù)傳送的最高位,8位傳送則MSB為第八位;9位傳送則MSB為第九位)。在一個地址字節(jié)中,目標接收者的地址放在低4位。這4位會被接收器拿來和設(shè)置在USART_CR2寄存器中ADD位中的自身地址比較。當接收到一個和設(shè)置地址相匹配的地址字符時,RWN被清除,后面的字節(jié)將正常接收。因為RWU位已經(jīng)被清除,RXEN位會因為接收到地址符被置1。當從機再次接收到地址符,如若地址不匹配則從機再次進入靜默模式。
程序?qū)嶋H編寫時可以注意以下3部分的設(shè)置:
一、設(shè)置靜默模式:
函數(shù)原形
void USART_WakeUpConfig(USART_TypeDef* USARTx, u16 USART_WakeUp)
其中 USART_WakeUp:USART 的喚醒方式:
1、 USART_WakeUp_IdleLine 空閑總線喚醒
2、 USART_WakeUp_AddressMark 地址標記喚醒
二、地址喚醒中地址設(shè)置:
函數(shù)原形
void USART_SetAddress(USART_TypeDef* USARTx, u8 USART_Address)
其中USART_Address:是設(shè)置 USART 節(jié)點的地址。
例如:USART_SetAddress(USART2, 0x5);
三、檢查是否進入靜默:
函數(shù)原形
void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState Newstate)
其中NewState: USART 靜默模式的新狀態(tài)這個參數(shù)可以取:ENABLE 或者 DISABLE。
|