一般情況串口的接受和發(fā)送分別需要使用TX和RX兩個(gè)引腳來(lái)實(shí)現(xiàn),但在一些UART的實(shí)際應(yīng)用中,通信雙方身份為主機(jī)和從機(jī),數(shù)據(jù)流是半雙工的,那么當(dāng)IO口資源緊張時(shí)可以使用半雙工模式通過(guò)一個(gè)引腳實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接受,同時(shí)又保證數(shù)據(jù)不出錯(cuò)。我們一起來(lái)看下紅楓派開(kāi)發(fā)板例程中是如何實(shí)現(xiàn)的?
首先GD32F303的UART是支持半雙工模式的,但想要真正使用起來(lái),軟硬件還需要特殊設(shè)計(jì)。
首先是硬件設(shè)計(jì),在紅楓派開(kāi)發(fā)板中的RS485通信使用半雙工實(shí)現(xiàn),原理圖是這樣的:
其中很重要的兩個(gè)點(diǎn)是:
1、在MCU的TX引腳上一定要增加一個(gè)上拉電阻,保證MCU發(fā)送和接受模式切換時(shí)IO口電平可以保持高電平的空閑態(tài)。
2、485端實(shí)際還是發(fā)送和接受分開(kāi)兩個(gè)引腳,那為了避免MCU發(fā)送時(shí)和485芯片的發(fā)送引腳形成電平競(jìng)爭(zhēng),在485芯片的RO引腳上串聯(lián)一個(gè)電阻后再連接到MCU TX引腳和485的DI引腳。
如果通信雙方都是半雙工引腳,那么只需要有一個(gè)上拉電阻、雙方都使用開(kāi)漏輸出模式即可。
在軟件設(shè)計(jì)方面,讓我們看下紅楓派開(kāi)發(fā)板例程的實(shí)現(xiàn)過(guò)程:
1、初始化時(shí)使能半雙工模式,同時(shí)使能接受并關(guān)閉發(fā)送,因?yàn)槌薓CU發(fā)送過(guò)程,其他狀態(tài)都可以保持為接受。
2、開(kāi)啟發(fā)送時(shí),首先關(guān)閉UART接受功能,再使能發(fā)送功能,否則將接受到自己發(fā)送的數(shù)據(jù)。
3、在發(fā)送過(guò)程中可以查詢TBE標(biāo)志進(jìn)行發(fā)送等待,但在執(zhí)行完最后一個(gè)字節(jié)發(fā)送后一定要等待TC標(biāo)志置位。
4、發(fā)送完畢并等待到TC標(biāo)志置位后,代表發(fā)送已經(jīng)實(shí)際完成,此時(shí)關(guān)閉UART發(fā)送,使能接受。
5、對(duì)于接受,只需要按正常的處理方式使用中斷或者DMA就可以,只要前面發(fā)送步驟正確,就不會(huì)干擾到接受功能。
此時(shí),釋放出來(lái)的串口的RX引腳可以做其他功能使用了,大家可以購(gòu)買(mǎi)紅楓派開(kāi)發(fā)板進(jìn)行這個(gè)功能的體驗(yàn)。
-
單片機(jī)
+關(guān)注
關(guān)注
6035文章
44554瀏覽量
634628 -
mcu
+關(guān)注
關(guān)注
146文章
17123瀏覽量
350979 -
嵌入式
+關(guān)注
關(guān)注
5082文章
19104瀏覽量
304796 -
GPIO
+關(guān)注
關(guān)注
16文章
1204瀏覽量
52051 -
GD32
+關(guān)注
關(guān)注
7文章
403瀏覽量
24326
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論