崔永在 張春慧 李雪茜
摘 要:MCU STM32性能強(qiáng)、性?xún)r(jià)比高,因而廣泛用于各種嵌入式設(shè)備;嵌入式設(shè)備種類(lèi)繁多;串口硬件形式也變化多樣;繁雜多樣的串口配置也導(dǎo)致了STM32調(diào)試的問(wèn)題;鑒于此;總結(jié)了各種開(kāi)發(fā)場(chǎng)景下常用串口硬件接口、軟件配置方法,嘗試了一種基于多串口通用底板工具實(shí)現(xiàn)的免配置直接通過(guò)串口軟件進(jìn)行設(shè)備調(diào)試的方法;可以簡(jiǎn)化STM32開(kāi)發(fā)過(guò)程,實(shí)現(xiàn)快速搭建硬件平臺(tái),調(diào)通互聯(lián)設(shè)備。解決每個(gè)開(kāi)發(fā)項(xiàng)目所面對(duì)調(diào)測(cè)問(wèn)題,迅速形成原理樣機(jī),加快開(kāi)發(fā)過(guò)程。
關(guān)鍵詞:STM32串口連接;多串口調(diào)試;串口通用底板
1 引言
生活中智能手環(huán)、微型四軸、掃地機(jī)器人、工業(yè)自動(dòng)化控制等大多基于STM32,可見(jiàn)隨著物聯(lián)網(wǎng)終端和便攜設(shè)備的大量使用,會(huì)有越來(lái)越多的STM32設(shè)備被開(kāi)發(fā)使用到更多場(chǎng)景下。串口作為MCU的重要外部接口,同時(shí)也是軟件開(kāi)發(fā)的重要調(diào)試手段,其重要性不言而喻[1] [8]。
考慮到現(xiàn)有網(wǎng)絡(luò)和設(shè)備的狀況,新技術(shù)的使用目前只能在部分領(lǐng)域和地區(qū)使用。而占主導(dǎo)地位的串行通信技術(shù)因其連接簡(jiǎn)單、使用靈活方便、數(shù)據(jù)傳遞可靠,造價(jià)低廉等優(yōu)點(diǎn),在工業(yè)監(jiān)控、數(shù)據(jù)采集、智能控制和實(shí)時(shí)控制系統(tǒng)中得到普遍應(yīng)用[2]。
正是串行通信的連線少、成本低,因此它在數(shù)據(jù)采集和控制系統(tǒng)中得到了廣泛的應(yīng)用,產(chǎn)品也是多種多樣[3]。據(jù)調(diào)查,目前國(guó)際上已有上百種嵌入式設(shè)備,這一類(lèi)產(chǎn)品的特點(diǎn)是體積較小,需要外部輸入的信息和對(duì)外輸出的信息多,因此要求單片機(jī)體積小且I/O多.然而串口的硬件卻有多種形式,應(yīng)用的外接的串口設(shè)備及配置方法不盡相同,操作卻花式多樣 [5]。正是因?yàn)檫@些問(wèn)題而限制了它往更多的領(lǐng)域發(fā)展.這時(shí)就出現(xiàn)了技術(shù)瓶頸,需要我們找到其他的途徑來(lái)獲得期望得到的效果.能夠有效的解決不同串口通信統(tǒng)一配置的問(wèn)題,實(shí)現(xiàn)大量的串口與一個(gè)或多個(gè)主機(jī)之間的穩(wěn)定,安全的串口通信[6]。
研究多串口通用底板技術(shù)可簡(jiǎn)化串口的雙向通訊功能,傳輸數(shù)據(jù),編程調(diào)試的繁瑣操作,并且會(huì)大大縮短開(kāi)發(fā)周期。用在串口數(shù)據(jù)采集通信系統(tǒng)中,編程效率與移植性將不斷增強(qiáng),同時(shí)適合于對(duì)通信質(zhì)量要求較高,傳輸距離較遠(yuǎn)的應(yīng)用場(chǎng)合[7]。
2 基本概述
多串口通訊底板技術(shù)集成常見(jiàn)的TTL與RS232兩種形式的串口外,還可以直接提供給外接的設(shè)備直接使用,免除了硬件的連接和驅(qū)動(dòng)的配置,保證系統(tǒng)拿到以后免配置直接可以通過(guò)串口軟件直接進(jìn)行設(shè)備的調(diào)試。
編程者可以通過(guò)上位機(jī)的串口助手,發(fā)送任意的指令進(jìn)行測(cè)試。發(fā)送的指令可以通過(guò)上位機(jī)直接轉(zhuǎn)發(fā)給STM32接收串口后,通過(guò)另一個(gè)串口轉(zhuǎn)發(fā)給串口測(cè)試設(shè)備,然后從測(cè)試設(shè)備反饋的指令結(jié)果通過(guò)STM32反饋給上位機(jī)進(jìn)行檢測(cè)。
3 主要內(nèi)容
STM32開(kāi)發(fā)模塊都具備可以配置使用的多個(gè)串口,一般有5-8個(gè)同步串口(USART)和異步串口(UART)。這些串口都可以用于對(duì)外連接調(diào)測(cè)設(shè)備,或者用于調(diào)測(cè)的信息顯示。外連的設(shè)備包括各種衛(wèi)星(北斗、銥星等)通信模塊,無(wú)線通信模塊(GPRS、3G、4G模塊),傳感器(煙霧、聲音、震動(dòng)等)。一般的串口硬件形式有兩種,一種是TTL,另一種是RS232。兩種形式主要區(qū)別在于信號(hào)電平不同[10]。
1.指令模式發(fā)送
根據(jù)目前串口對(duì)聯(lián)設(shè)備測(cè)試指令的具體形式,以及可以用于發(fā)送測(cè)試的各種指令,形成系統(tǒng)測(cè)試的發(fā)送和反饋信息回路。同時(shí),為了保證適應(yīng)于各種情況下的開(kāi)發(fā),采用不封裝具體指令的方式,使用可以發(fā)送任意指令的串口助手作為測(cè)試的人機(jī)界面接口,方便用戶(hù)根據(jù)具體的要求測(cè)試連接的對(duì)接設(shè)備 [9]。
實(shí)現(xiàn)方式如下:
(1)通過(guò)串口檢測(cè)的軟件,通過(guò)指令方式發(fā)送指令到STM32。
(2)STM32串口接收到指令后,將指令直接發(fā)送給連接的另一個(gè)串口的設(shè)備。
(3)對(duì)接的設(shè)備對(duì)接收的指令執(zhí)行,同時(shí)將指令執(zhí)行結(jié)果反饋給STM32。
(4)STM32將對(duì)接測(cè)試設(shè)備反饋的指令信息,輸出給測(cè)試用的串口顯示界面。然后,完成整個(gè)系統(tǒng)的硬件連接,驅(qū)動(dòng)配置和軟件調(diào)測(cè)。
2. STM32驅(qū)動(dòng)配置及開(kāi)源軟件設(shè)置
因?yàn)榇诘挠布喾N形式,為了同時(shí)可以對(duì)接TTL形式硬件接口,或者是RS232形式硬件接口,采用集成TTL和RS232轉(zhuǎn)換模塊的形式,通過(guò)跳線的方式來(lái)實(shí)現(xiàn)兩者直接的信號(hào)電平轉(zhuǎn)換。
2.1 STM32的硬件配置和中斷轉(zhuǎn)發(fā)方式
因?yàn)榕渲枚鄠€(gè)串口,需要將中斷的等級(jí)設(shè)置好,本項(xiàng)目以5個(gè)串口為例,將串口中斷都設(shè)置成組1中(NVIC_PriorityGroup_1),中斷優(yōu)先級(jí)為1,子優(yōu)先級(jí)為0。為了便于調(diào)測(cè)使用,可以將其中的兩個(gè)作為測(cè)試展示使用,其他的串口可以暫時(shí)關(guān)閉,在項(xiàng)目需要的時(shí)候,通過(guò)USART_ITConfig(USART_X, USART_IT_RXNE, ENABLE)的方式打開(kāi)串口即可直接使用。
4 實(shí)驗(yàn)
在很多的實(shí)驗(yàn)與實(shí)際生產(chǎn)中,串口在 STM32 應(yīng)用最多的是“打印”程序信息,一般在硬件設(shè)計(jì)時(shí)都會(huì)預(yù)留一USART 通信接口連接電腦,用于在調(diào)試程序是可以把一些調(diào)試信息“打印”在電腦端的串口調(diào)試助手工具上,從而了解程序運(yùn)行是否正確、如何出錯(cuò)具體哪里出錯(cuò)等等。
實(shí)驗(yàn)結(jié)果
在實(shí)驗(yàn)中串口通訊的數(shù)據(jù)包由發(fā)送設(shè)備通過(guò)自身的TXD接口傳輸?shù)浇邮赵O(shè)備得RXD接口,在協(xié)議層中規(guī)定了數(shù)據(jù)包的內(nèi)容,具體包括起始位、主體數(shù)據(jù)(8位或9位)、校驗(yàn)位以及停止位,通訊的雙方必須將數(shù)據(jù)包的格式約定一致才能正常收發(fā)數(shù)據(jù)。當(dāng)開(kāi)發(fā)板與上位機(jī)之間通過(guò)USB線連接,成功安裝USB轉(zhuǎn)串口驅(qū)動(dòng)與CH341驅(qū)動(dòng)后,可以把一些調(diào)試信息“打印”在電腦端的串口調(diào)試助手工具上。
(1)收發(fā)字符信息
以USART_SendData(pUSARTx,ch)函數(shù)為基礎(chǔ)建立的函數(shù)可以向上位機(jī)發(fā)送數(shù)據(jù),利用FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)讀取發(fā)送數(shù)據(jù)寄存器的狀態(tài)來(lái) 等待發(fā)送寄存器將數(shù)據(jù)成功發(fā)送。還可使用重定向后的printf()函數(shù)與getchar函數(shù),向串口調(diào)試助手收發(fā)數(shù)據(jù)。如:在上位機(jī)上用串口調(diào)試助手發(fā)送一個(gè)字符X,STM32在收到字符后返回給上位機(jī),顯示"I got X",串口波特率設(shè)定為9600bps。使用printf()函數(shù)。
(2) 串口指令控制
通過(guò)串口調(diào)試工具向串口發(fā)送控制信號(hào):1-小燈亮;0-小燈暗。即在串口中斷(UART2)接收到之后進(jìn)行處理,判斷,如果接收到的字符為1,則控制小燈亮,如果接收到的字符為0,則控制小燈暗.同時(shí)USART2獲得相關(guān)數(shù)據(jù),再發(fā)送到STM32的LCD屏顯示指令編碼,以及照明持續(xù)的時(shí)間。
串口是絕大多數(shù) MCU 中不可或缺的一個(gè)外設(shè),同時(shí)也是我們開(kāi)發(fā)中經(jīng)常使用的一種調(diào)試手段,所以在STM32的應(yīng)用中,利用某串口進(jìn)行設(shè)備的調(diào)試,尤為重要。
4 結(jié)束語(yǔ)
為實(shí)現(xiàn)免配置直接可以通過(guò)串口軟件直接進(jìn)行設(shè)備的調(diào)試,本文設(shè)計(jì)了一個(gè)串口通用底板開(kāi)發(fā)方式。該設(shè)計(jì)兼容了各種開(kāi)發(fā)需求下通用的軟硬件系統(tǒng),可以通過(guò)串口收發(fā)數(shù)據(jù),并具備輸出顯示調(diào)試串口,幫助在STM32和互聯(lián)設(shè)備連接時(shí),調(diào)試之間的連通信息。
參考文獻(xiàn):
[1] 張?jiān)矗?卞鴻巍. 組合導(dǎo)航計(jì)算機(jī)高效多串口通訊技術(shù)實(shí)現(xiàn)[J]. 計(jì)算機(jī)測(cè)量與控制, 2009(06):149-151+175.
[2] 姚予疆. 通信設(shè)備接口協(xié)議手冊(cè)[M].2005.
[3] 趙炯等. 串行數(shù)據(jù)傳輸協(xié)議的剖析研究.計(jì)算機(jī)工程.2004,5.
[4] 劉忠誠(chéng). 基于STM32的嵌入式多串口服務(wù)器的研究與設(shè)計(jì)[D].
[5] http://www.openedv.com/
[6] 劉忠誠(chéng). 基于STM32的嵌入式多串口服務(wù)器的研究與設(shè)計(jì)[D].
[7] 張淑清. 嵌入式單片機(jī)STM32設(shè)計(jì)及應(yīng)用技術(shù)[M]. 國(guó)防工業(yè)出版社, 2015.
[8] 焦江麗, 李鳳蓮. 以ARM Cortex-M3為基礎(chǔ)的STM32開(kāi)發(fā)板的設(shè)計(jì)與實(shí)現(xiàn)[J]. 中國(guó)新通信, 2013, 000(009):94-96.
[9] 郭勇,何軍.STM32單片機(jī)多串口通信仿真測(cè)試技術(shù)研究[J].無(wú)線電工程, 2015.
[10] 牛洪濤. "RS—232電平與TTL電平之間的轉(zhuǎn)換."?計(jì)算機(jī)與通信?12(1997):39-40.
[11]RICHARDBARNETT, LARRYO'CULL. 嵌入式C語(yǔ)言編程與Microchip PIC[M]. 清華大學(xué)出版社, 2005.
省級(jí)大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目:S201910453051
(泰山學(xué)院-物理與電子工程學(xué)院? ?271000)