白玉,李智
(沈陽航空航天大學(xué) 電子信息工程學(xué)院,遼寧 沈陽 110136)
基于DC10的串口擴展編程
白玉,李智
(沈陽航空航天大學(xué) 電子信息工程學(xué)院,遼寧 沈陽 110136)
出租車車載智能終端項目是一個linux系統(tǒng)和安卓的一個項目,主要運用到的就是串口通信。本課題針對該系統(tǒng)中的串口數(shù)目不足的問題,設(shè)計了基于STM32F103RCT6微控制器和uc/os ii操作系統(tǒng)的串口擴展系統(tǒng)。采用上海大潮電子技術(shù)有限公司設(shè)計的一款基于STM32RCT6的串口擴展板DC10進行串口擴展,實現(xiàn)車載智能終端主機和一些外設(shè)串口數(shù)據(jù)的接收和轉(zhuǎn)發(fā)。詳細描述了擴展系統(tǒng)的軟硬件設(shè)計。通過大量的實車測試,在出租車的一天運營過程中,轉(zhuǎn)發(fā)數(shù)據(jù)基本不會出錯,完全可以用于實際應(yīng)用。
STM32RCT6;uc/os ii;串口;CAN總線;定時器;看門狗
uc/os ii是專門為計算機的嵌入式應(yīng)用設(shè)計的,該操作系統(tǒng)是一款較為簡單的實時操作系統(tǒng),uc/os ii是一種基于優(yōu)先級的可搶先的硬實時內(nèi)核,具有實時任務(wù)調(diào)度的功能,擁有信號量等機制可以同步任務(wù)[1]。
STM32RCT6是基于ARM Cortex-M3處理器的一款大容量的產(chǎn)品,采用四方扁平式封裝,共有64否個引腳,flash高達256 kB,ARM Cortex-M3處理器是專為低功耗、小尺寸、短的中斷延時和優(yōu)越的確定性而設(shè)計,性價比很高。
課題是大潮電子技術(shù)有限公司的出租車的電調(diào)系統(tǒng)終端的一部分,該電調(diào)系統(tǒng)終端主機開發(fā)環(huán)境是Linux系統(tǒng),因串口資源不夠,故需增加串口,開發(fā)出一款基于STM32RCT6的DC10板,本課題就是基于DC10板的串口擴展系統(tǒng)的設(shè)計,負(fù)責(zé)主機和外設(shè)、出租車之間的通信。
本課題是基于DC10板的通信系統(tǒng)的設(shè)計,DC10板如圖1所示,系統(tǒng)主要由3部分組成:STM32自檢模塊、與主機交互模塊、和外設(shè)、出租車通信模塊。系統(tǒng)主控制器選用STM32F103RCT6微控制器來進行通信的控制,USART1、USART2、USART3、UART4連接 RS232串口,UART5連接RS485串口,該DC10版的功能和連接方式如圖2所示。

圖1 DC10板實物圖
2.1 軟件編程環(huán)境
本次課題所使用的開發(fā)環(huán)境是MDK 4.70 A,是ARM公司于2009年開發(fā)出的一款開發(fā)軟件,其編譯器、調(diào)試工具都實現(xiàn)與ARM器件最完美的匹配。本次所使用的正是ARM開發(fā)出來的Cortex-M3處理器。
2.2 uc/os ii 操作系統(tǒng)
圖3是uc/os ii體系結(jié)構(gòu),,內(nèi)核源代碼分為3部分,第一部分為與硬件無關(guān)的內(nèi)核代碼,第二部分是與處理器有關(guān)的一直代碼,第三部分為用戶配置文件[2]。

圖2 系統(tǒng)總體結(jié)構(gòu)圖

圖3 uc/os ii體系結(jié)構(gòu)
2.3 串口的配置
在本次課題中,STM32擁有的5個串口都被全部引出,其中串口1~4連接的RS232,串口5連接的是RS485,485接口在總線上是允許連接多達128個收發(fā)器,具有多站能力[3]。
串口2連接的是計價器,通過該串口與主機進行通信,用于交流營運數(shù)據(jù)。串口3連接的是232串口攝像頭,在必要的時候進行拍照,保留本地數(shù)據(jù)并且可以上傳至平臺。串口4連接的是出租車頂燈,用于顯示此時出租車的狀態(tài)。串口5在此次設(shè)計中進行保留,為以后增加功能時使用。
串口1與主機進行數(shù)據(jù)通信,通過該串口實現(xiàn)其他外設(shè)(比如計價器、串口攝像頭、頂燈等)與主機的交互功能。
5個串口的波特率默認(rèn)9 600 bps,可以由終端主機發(fā)送數(shù)據(jù)進行設(shè)置更改(具體更改哪一個串口,由數(shù)據(jù)中的ID決定),其他配置都是一樣而且固定的,數(shù)據(jù)位為8位,1位停止位,無奇偶校驗位,無硬件流控制[4]。
所有的串口的管腳配置如圖4所示。

圖4 串口管腳配置
其中USART1和UART4使用了管腳重映射功能,所謂串口重映射說的是串口的接收發(fā)送等引腳映射到其他的地址上,在STM32中有些功能具有管腳重映射功能,甚至有些功能還具有部分重映射和完全重映射[5]。
USART1復(fù)用功能重映射如表1所示:

表1 USART1復(fù)用功能重映射
下面是USART1復(fù)用功能重映射的配置代碼,“//”后面的是注釋:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENA BLE); //USART1端口重映射
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1
2.4 其它的配置
時鐘:本次課題所使用的時鐘是外部高速時鐘,DC10板上外部晶振的頻率為12 MHz,經(jīng)過6倍頻設(shè)置之后,APB1上時鐘頻率為36 MHz,APB2上時鐘頻率為72 MHz,AHB上時鐘頻率為72 MHz。圖5是根據(jù)STM32的大容量產(chǎn)品的時鐘樹使用外部高速時鐘的時鐘配置流程[6]。
圖5中,不分頻后6倍頻之后的頻率:12/1*6=72 MHz,在配置時鐘的同時,還應(yīng)該進行flash的一些配置:
①FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//配置flash預(yù)取指使能
②FLASH_SetLatency(FLASH_Latency_2);//FLASH的等待周期為兩個周期
配置FLASH延時兩個周期是進行等待總線同步操作。0~24 MHz時,取Latency=0;24~48 MHz時,取Latency=1;48~72 MHz時,取Latency=2,本次頻率為72 MHz。

圖5 時鐘配置流程
中斷:STM32的NVIC中斷優(yōu)先級被分成5個組,組0~4,該分組的設(shè)置有SCB->AIRCR寄存器的bit10-8來定義的,該值決定了搶占優(yōu)先級和響應(yīng)優(yōu)先級的位數(shù),搶占優(yōu)先級高的中斷可以打斷搶占優(yōu)先級低的中斷,響應(yīng)優(yōu)先級則不能,響應(yīng)優(yōu)先級只有當(dāng)搶占優(yōu)先級相同且中斷同時到達才發(fā)揮作用。本次所采用的中斷分組是1組,即一位搶占優(yōu)先級,三位響應(yīng)優(yōu)先級。
具體中斷優(yōu)先級配置如表2所示:

表2 中斷優(yōu)先級配置
50 ms定時任務(wù):該任務(wù)使用TIM3的定時功能觸發(fā)中斷配合uc/os ii的信號量機制進行同步,可以進行精準(zhǔn)的定時[7],該任務(wù)實現(xiàn)獨立看門狗和外部看門狗的喂狗操作、獲取定時器的速度脈沖的計數(shù)(可以在主機終端發(fā)送速度獲取命令時,計算速度發(fā)送至主機)。

外部看門狗:本功能使用的芯片是X25043,用SPI總線驅(qū)動。SPI_MOSI連接X25043的SO引腳,SPI_nSS引腳連接X25043的CS引腳。使用SPI_MOSI引腳進行配置X25043,首先需要發(fā)送寫使能,再發(fā)送寫狀態(tài)數(shù)據(jù)寄存器,最后發(fā)送要配置的狀態(tài)數(shù)據(jù)到X25043的狀態(tài)寄存器即可配置成功??撮T狗復(fù)位時間有3種選擇:1 400 ms、600 ms和200 ms。本次配置選擇600 ms。想要X25043不進行復(fù)位,則必須使得該模塊的CS引腳不斷地切換狀態(tài),在上面的50 ms定時任務(wù)中EXDOG就是該引腳的狀態(tài)。
TIM1速度脈沖:STM32RCT6是大容量的一款新片,所以帶有兩個高級定時器,TIM1和TIM8,其中TIM1_CH2也就是PA9被用來進行速度脈沖的測量。STM32的計數(shù)器的時鐘選擇可以分成4類,具體分類如圖6所示。
①來自RCC的內(nèi)部時鐘TIMx_CLK
②芯片內(nèi)部其他定時器的觸發(fā)輸入ITR1、ITR2、ITR3和ITR4
③外部時鐘源模式1——外部捕獲引腳上的邊沿信號
>>Pin1:TI1FP1或TI1F_ED
>>Pin2:TI2FP2
④外部時鐘源模式2——外部引腳ETR。

圖6 STM32的計數(shù)器的時鐘選擇
庫函數(shù)中:TIM_ITRxExternalClockConfig函數(shù)設(shè)置 TIMx內(nèi)部觸發(fā)為外部時鐘模式
TIM_TIxExternalClockConfig 函數(shù)設(shè)置 TIMx觸發(fā)為外部時鐘
因為本次選擇的是TIM1_CH2引腳,所以只能是用外部時鐘源模式1,配置代碼如下:
TIM_TIxExternalClockConfig (TIM1,TIM_TIxExternal-CLK1Source_TI2,TIM_ICPolarity_Rising,0);
CAN通信:CAN總線是現(xiàn)場總線的一種,已經(jīng)成為汽車控制系統(tǒng)和嵌入式工業(yè)控制局域網(wǎng)的標(biāo)準(zhǔn)總線。CAN通信是通過發(fā)送郵箱發(fā)送數(shù)據(jù),接收數(shù)據(jù)是通過FIFO,CAN總線能支持多個節(jié)點,每個報文里具有一個標(biāo)識符,報文的標(biāo)識符不代表節(jié)點的地址,而是和報文的內(nèi)容相關(guān)的,當(dāng)總線上有數(shù)據(jù)發(fā)送時,其他節(jié)點都接收,通過接收過濾器識別該報文是否是是發(fā)送給自己的。
串口通信是最基本的通信方式,也是使用最廣的一種通信方式。設(shè)計了以STM32為核心的串口通信系統(tǒng),結(jié)構(gòu)簡單,占用資源較少。經(jīng)過特定的協(xié)議解析,實現(xiàn)了串口數(shù)據(jù)的上傳和轉(zhuǎn)發(fā),該系統(tǒng)已經(jīng)經(jīng)過測試并投入使用,能夠更加深刻的理解和使用串口。
[1]Joseph Yiu.ARM Cortex-M3權(quán)威指南 [M].宋巖,譯.北京:北京航空航天大學(xué)出版社,2008.
[2]任哲,房紅征.嵌入式實時操作系統(tǒng)UC/OS-11原理及應(yīng)用[M].3版.北京:北京航空航天大學(xué)出版社,2014.
[3]胡成華,劉傳瑞,郭文生.嵌入式網(wǎng)絡(luò)編程:串口通信、工業(yè)總線、傳感器網(wǎng)絡(luò)應(yīng)用開發(fā)[M].北京:電子工業(yè)出版社,2012.
[4]陳瑤,李佳,宋寶華.Cortex-M3+μC/OS-II嵌入式系統(tǒng)開發(fā)入門與應(yīng)用[M].北京:人民郵電出版社,2010.
[5]劉軍,張洋,嚴(yán)漢宇.原子教你玩STM32(庫函數(shù)版)[M].北京:北京航空航天大學(xué)出版社,2013.
[6]劉火良,楊森.STM32庫開發(fā)實戰(zhàn)指南[M].北京:機械工業(yè)出版社,2013.
[7]Jean J.Labrosse.嵌入式實時操作系統(tǒng)uC/OS-II[M].邵貝貝,譯.北京:北京航空航天大學(xué)出版社,2007.
Serial port expansion program based on DC10
BAI Yu,LI Zhi
(Electronic and Information Engineering,Shenyang Aerospace University,Shenyang 110136,China)
Taxi vehicle intelligent terminal project is a project based on linux system and android and mainly use serial communications.Due to the shortage of the number of serial in the taxi vehicle intelligent terminal project,we extand serial by using DC10 board and realize receiving and forwarding intelligent vehicle terminal host and some peripheral serial data.Forwarding data cann't basically go wrong by a large of real vehicle tests during a day of opetations.It's completely used in practical application that serial expansion system based on STM32F103RCT6 and uc/os ii operating system in the design.
STM32RCT6;uc/os ii;serial port;CAN bus;timer;watchdog
TP271
A
1674-6236(2016)15-0171-03
2015-07-17 稿件編號:201507132
白 玉(1969—),女,遼寧沈陽人,碩士,副教授。研究方向:嵌入式系統(tǒng)應(yīng)用。