一種串口擴(kuò)展方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明設(shè)計(jì)電氣領(lǐng)域,具體涉及一種串口擴(kuò)展方法。
【背景技術(shù)】
[0002] 微控制單元(Microcontroller Unit ;MCU),又稱單片微型計(jì)算機(jī)(Single Chip Microcomputer)或者單片機(jī),電子工程師在選擇MCU時(shí),除考慮價(jià)格、運(yùn)行速度、程序區(qū)大小 外,外設(shè)的集成度也是重要考慮因數(shù)。而外設(shè)中USART及10口的數(shù)量,往往是考慮的關(guān)鍵指 標(biāo)。對(duì)通訊功能要求不高的儀器儀表,常規(guī)的M⑶就可以滿足USART數(shù)量的要求,但對(duì)于通訊 功能要求較高的儀表,要求的USART數(shù)量較多,對(duì)MCU的配置要求就高,常用的MCU不能滿足 要求,即使遍尋市場(chǎng)上的MCU,也不一定能找到合適的。此時(shí)就需要擴(kuò)展USART,比如使用 IIC、SPI等總線轉(zhuǎn)串口或者并口轉(zhuǎn)串口芯片。其中被業(yè)內(nèi)工程師大量使用的ST16C2550或 ST16C4550就是并口擴(kuò)2路或4路USART的芯片。這些芯片由于用量少,一般價(jià)格較高,使用起 來(lái)也不是太方便。在10 口不夠的情況下,往往選用ST74HC244、ST74HC373或CPLD等器件擴(kuò)展 10口,使用ST74HC244或ST74HC373等擴(kuò)展10口,一旦電路定型,當(dāng)需求發(fā)生變化,無(wú)法更改 其屬性,除非重新設(shè)計(jì)電路。而CPLD盡管可以編程,但相對(duì)成本也較高。故需要提供一種簡(jiǎn) 單、廉價(jià)的擴(kuò)展方法,可以很好的解決以上電子工程師的困惑,降低擴(kuò)展成本。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明的目的在于解決現(xiàn)有所存在的問(wèn)題,找到一種串口擴(kuò)展方法,降低擴(kuò)展成 本。
[0004] 一種串口擴(kuò)展方法,將主MCU的第一串口和從MCU的第一串口相連,主MCU與從MCU 相互通信;
[0005] 所述主M⑶采用如下步驟:
[0006] 步驟一:建立主線程,初始化比特率;
[0007] 步驟二:判斷是否有數(shù)據(jù)需要轉(zhuǎn)發(fā)到從MCU的串口,如果有,則將該數(shù)據(jù)和該數(shù)據(jù) 需要發(fā)送到的串口編號(hào)作為主MCU數(shù)據(jù)發(fā)送給從MCU;判斷是否有接受到從MCU數(shù)據(jù),如果 有,則處理該數(shù)據(jù);
[0008] 所述從采用包括如下步驟:
[0009] 步驟A:初始化比特率;
[0010] 步驟B:從MCU第一串口接收到主MCU數(shù)據(jù)時(shí),判斷是否需要將主MUC數(shù)據(jù)發(fā)送給串 口,如果需要,則根據(jù)主MCU數(shù)據(jù)中的串口編號(hào)將數(shù)據(jù)發(fā)送給對(duì)應(yīng)串口;從M⑶第一串口之外 的串口接收到數(shù)據(jù)時(shí),將該數(shù)據(jù)和對(duì)應(yīng)的串口編號(hào)作為從MCU數(shù)據(jù)發(fā)送給主MCU。
[0011]優(yōu)選的,步驟二還包括:主MUC判斷是否有數(shù)據(jù)需要轉(zhuǎn)發(fā)到M⑶的10輸出口,如果 有,則主MUC將該數(shù)據(jù)和該數(shù)據(jù)需要發(fā)送到的10輸出標(biāo)識(shí)作為主MCU數(shù)據(jù)發(fā)送給從M⑶;步驟 B還包括:從mj接收到主mj數(shù)據(jù)時(shí),判斷是否需要將主Muc數(shù)據(jù)發(fā)送給從Mcu的?ο輸出口, 如果需要,根據(jù)主MCU數(shù)據(jù)中的10輸出標(biāo)識(shí)將數(shù)據(jù)發(fā)送給從MCU的對(duì)應(yīng)10輸出口。
[0012] 優(yōu)選的,步驟B還包括:從MCU接收到IO輸入信息時(shí),將該數(shù)據(jù)和對(duì)應(yīng)的IO輸入標(biāo)識(shí) 作為從MCU數(shù)據(jù)發(fā)送給主MCU。
[0013] 優(yōu)選的,步驟1中初始化比特率為115200bps,步驟A中初始化比特率為115200bps。 [0014] 通過(guò)實(shí)施本發(fā)明可以取得以下有益技術(shù)效果:可以通過(guò)從MCU擴(kuò)展主M⑶的串口和 IO口,降低擴(kuò)展成本;從CPU只做數(shù)據(jù)的轉(zhuǎn)發(fā),一旦設(shè)定好通訊流程,從CPU無(wú)需另外編程,需 要的工作量少。
【具體實(shí)施方式】
[0015] 為了便于本領(lǐng)域技術(shù)人員的理解,下面結(jié)合具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步的說(shuō) 明:
[0016] 本發(fā)明將主M⑶通過(guò)串口和從M⑶連接并進(jìn)行通訊,且優(yōu)選采用USART串口,從MCU 可以通過(guò)IO口和串口連接外設(shè),一般情況,外設(shè)的速度較低,多數(shù)低于9600bps,因而主MCU 和從M⑶的通訊波特率設(shè)定為115200bps。主MCU按照預(yù)定流程向從M⑶發(fā)送數(shù)據(jù),通過(guò)從M⑶ 將數(shù)據(jù)轉(zhuǎn)發(fā)到外設(shè)通訊及外設(shè)輸出。從M⑶將外設(shè)通訊及外設(shè)輸入的數(shù)據(jù),回傳主M⑶,從而 實(shí)現(xiàn)主MCU用1個(gè)串口通過(guò)從MCU實(shí)現(xiàn)多串口及IO的擴(kuò)展。
[0017] 主MCU采用如下步驟:
[0018] 步驟一:建立主線程,初始化比特率;
[0019] 步驟二:主MCU判斷是否有數(shù)據(jù)需要轉(zhuǎn)發(fā)到從MCU的串口,如果有,則將該數(shù)據(jù)和該 數(shù)據(jù)需要發(fā)送到的串口編號(hào)作為主MCU數(shù)據(jù)發(fā)送給從MCU;主MUC判斷是否有數(shù)據(jù)需要轉(zhuǎn)發(fā) 到MCU的IO輸出口,如果有,則主MUC將該數(shù)據(jù)和該數(shù)據(jù)需要發(fā)送到的IO輸出標(biāo)識(shí)作為主MCU 數(shù)據(jù)發(fā)送給從MCU;主M⑶判斷是否有接受到從M⑶數(shù)據(jù),如果有,則處理該數(shù)據(jù);主M⑶處理 該數(shù)據(jù)時(shí),根據(jù)從MCU數(shù)據(jù)中的串口編號(hào)或IO輸入標(biāo)識(shí)判斷數(shù)據(jù)的輸入途徑,并做相關(guān)處 理。
[0020] 所述從M⑶采用如下步驟:
[0021]步驟A:初始化比特率;
[0022] 步驟B:從M⑶第一串口接收到主M⑶數(shù)據(jù)時(shí),從M⑶判斷是否需要將主MUC數(shù)據(jù)發(fā)送 給串口(可根據(jù)串口編號(hào)判斷),如果需要,則根據(jù)主MCU數(shù)據(jù)中的串口編號(hào)將數(shù)據(jù)(這里的 數(shù)據(jù)可以是主MCU數(shù)據(jù)中除去串口編號(hào)外的數(shù)據(jù),即主MCU的原始數(shù)據(jù))發(fā)送給對(duì)應(yīng)串口;從 M⑶第一串口接收到主MCU數(shù)據(jù)時(shí),同時(shí)判斷是否需要將主MUC數(shù)據(jù)發(fā)送給從MCU的IO輸出 口,如果需要,根據(jù)主M⑶數(shù)據(jù)中的IO輸出標(biāo)識(shí)將數(shù)據(jù)(這里的數(shù)據(jù)可以是主MCU數(shù)據(jù)中除去 IO輸出標(biāo)識(shí)外的數(shù)據(jù),即原始數(shù)據(jù))發(fā)送給從M⑶的對(duì)應(yīng)IO輸出口;MCU第一串口之外的串口 接收到數(shù)據(jù)時(shí),將該數(shù)據(jù)和對(duì)應(yīng)的串口編號(hào)作為從MCU數(shù)據(jù)發(fā)送給主MCU;從MCU接收到IO輸 入信息時(shí),將該數(shù)據(jù)和對(duì)應(yīng)的IO輸入標(biāo)識(shí)作為從MCU數(shù)據(jù)發(fā)送給主MCU。
[0023] 主MCU和從MCU之間通信時(shí),發(fā)送方可以根據(jù)通信協(xié)議規(guī)定的格式將數(shù)據(jù)打包,通 過(guò)串口發(fā)送給接收方,接收方按相應(yīng)的通信協(xié)議將數(shù)據(jù)解包,進(jìn)而得到發(fā)送方的原始數(shù)據(jù)。
[0024] 主M⑶和從M⑶之間采用如下通訊協(xié)議進(jìn)行通信:
[0025] 主MCU下行報(bào)文:
[0027] 其中:
[0028] 第一個(gè)0x68:楨起始符。
[0029] LO LI:從第2個(gè)0x68后到CS前的數(shù)據(jù)長(zhǎng)度。
[0030] Port: port不等于OxFF時(shí),port表示被轉(zhuǎn)發(fā)數(shù)據(jù)串口編號(hào);如果port為OxFF,表示 對(duì)從MCU操作,不用轉(zhuǎn)數(shù)據(jù)到串口。
[0031 ] BpsO bpsl :port不等于OxFF時(shí),表示轉(zhuǎn)發(fā)被串口的通訊速率,(bp0+bpl*0x100 )* 300;如