張達(dá) 郭銀博 趙廣宇 胥勛偉
摘要:在綜合采集系統(tǒng)中,很多外接傳感器都是串口通信。為了解決STM32采集系統(tǒng)中串口數(shù)量不足的問題,采用WK2168進(jìn)行串口擴(kuò)展。WK2168支持UART/SPI/IIC/8位并行總線接口并具有256級(jí)FIFO的低功耗 4通道UART擴(kuò)展芯片。該方案選擇一路串口,擴(kuò)展為4路UART,滿足項(xiàng)目整體需求。
關(guān)鍵詞:串口擴(kuò)展芯片;WK2168;氣象采集板卡;多串口采集
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)19-0284-03
Abstract: Power standby mode in the integrated acquisition system, many external sensors are serial communication. In order to solve the problem of insufficient serial port in the STM32 acquisition system, WK2168 is used to expand the serial port. WK2168 supports UART/SPI/IIC/8 bit parallel bus interface and has 256 level FIFO low power 4 channel UART expansion chip. This scheme selects one serial port to expand to 4 UART, to meet the overall needs of the project.
Key words: serial port extension chip; WK2168; meteorological collection board; multi serial port acquisition
1 背景
為了更好地利用自然氣象資源,減少自然氣象對(duì)農(nóng)業(yè)生產(chǎn)、交通運(yùn)輸?shù)刃袠I(yè)的影響,建立信息化的采集系統(tǒng)和高效的管理系統(tǒng)是很有必要的。設(shè)計(jì)了一套通用采集板卡,根據(jù)所應(yīng)用的場(chǎng)合變化,分別插接不同的外接傳感器。傳感器數(shù)據(jù)和控制器之間大多采用串口進(jìn)行數(shù)據(jù)通信,單片機(jī)串口數(shù)量有限影響著板卡的性能。采集板卡的串口拓展方案的設(shè)計(jì)與實(shí)施是有必要的。
2 系統(tǒng)的構(gòu)成
該方案采用STM32F103VET7作為處理器,負(fù)責(zé)氣象要素的判斷采集、信號(hào)處理、定時(shí)發(fā)送[1 ]。采用12V的太陽(yáng)能板和電池為系統(tǒng)供電。采用8M byte的M25P64作為系統(tǒng)參數(shù)初始化的存儲(chǔ)地址。采用AD7993作為片外模擬量的采集。整個(gè)系統(tǒng)框圖如圖1所示:
3 采集板硬件設(shè)計(jì)
3.1 ARM處理子系統(tǒng)
ARM 公司發(fā)布了全新的基于 ARMv7指令集,處理器的內(nèi)核以Cortex命名并分為A、R和M三個(gè)系列[2-3]。意法半導(dǎo)體公司推出了基于Cortex-M內(nèi)核的系列芯片,項(xiàng)目選型使用的STM32F103VET7就是M3內(nèi)核的[4]。該系列單片機(jī)具有產(chǎn)品細(xì)分多樣化、不斷更新簡(jiǎn)單易用的集成庫(kù)、性價(jià)比較高等優(yōu)點(diǎn)深受電子工程師和學(xué)生的青睞,使開發(fā)者順應(yīng)技術(shù)發(fā)展趨勢(shì),讓設(shè)計(jì)的產(chǎn)品更有競(jìng)爭(zhēng)力。
該主控芯片資源豐富,12位ADC 3個(gè)、12位DAC 、USB、CAN、SDIO接口、FSMC接口、64KB SRAM、512KB FLASH、基本定時(shí)器2個(gè)、通用定時(shí)器4個(gè)、高級(jí)定時(shí)器2個(gè)、通用IO口、SPI 3個(gè)、IIC 2個(gè)及串口5個(gè)[5]。在該項(xiàng)目中需要使用較多的串口通道,外掛WK2168串口擴(kuò)展芯片,使可用串口達(dá)到8個(gè)[6]。
3.2 串口擴(kuò)展子系統(tǒng)
3.2.1 WK2168基本特性
VK3366在串口擴(kuò)展領(lǐng)域使用較為廣泛,WK2168是成都為開微電子推出的新品用以替代VK3366,較前者WK2168具有技術(shù)支持力度更大、性價(jià)比更高等優(yōu)點(diǎn)。該款芯片支持UART、SPI、IIC、8位并行總線四種接口作為主接口,同時(shí)可擴(kuò)展4路增強(qiáng)的UART。
該款芯片主要具有如下功能:是首款具備256級(jí)FIFO的低功耗芯片。該芯片可最多擴(kuò)展4通道UART器件。該芯片支持UART/SPITM/IIC/8位并行總線作為主通道,并可以通過模式配置使得該芯片工作于以上任何一種主接口模式,將選定的主接口擴(kuò)展為4個(gè)增強(qiáng)功能的UART。
選擇串口作為主接口:主接口不需要地址信號(hào)和控制信號(hào)線,只需要標(biāo)準(zhǔn)的三線UART串口(RX,TX,GND),簡(jiǎn)單的配置寄存器和控制字,可編程的設(shè)置子通道的波特率、字長(zhǎng)、校驗(yàn)格式等信息。最高速度可以達(dá)到2M bit/s。收發(fā)獨(dú)立的超大硬件緩存,支持256級(jí)FIFO。
3.2.2 WK2168硬件設(shè)計(jì)
數(shù)據(jù)采集板卡的外接端口較多,采用STM32F103VET7的串口5作為主接口來拓展子串口,MD0、MD1兩個(gè)引腳配合使用配置主接口選擇哪種接口,選MD1 MD0=11。選擇和CPU相同的供電電壓3.3V。MCU和芯片之間MRX、MTX引腳通過交叉線連接。WK2168的IRQ連接到MCU的外部中斷輸入引腳。這個(gè)連接不是必須的,如果沒有連接到MCU的外部中斷輸入引腳,那么就只能采用查詢的編程方式實(shí)現(xiàn)對(duì)子串口的數(shù)據(jù)收發(fā)。WK2168的復(fù)位引腳,低電平有效,時(shí)間長(zhǎng)度為10ms。復(fù)位以后,WK2168的所有寄存器恢復(fù)到默認(rèn)值,總線上的命令解析也會(huì)同時(shí)復(fù)位。通常采用無(wú)源晶振,其大小可參照手冊(cè)根據(jù)串口波特率選取,這里采用11.059 2 MHz晶振。需要和晶振并聯(lián)1兆歐的匹配電阻。
在選用串口作為主接口,DAT0-DAT7作為普通GPIO使用,可以通過GPDIR來設(shè)置相應(yīng)引腳的輸入輸出特性。并且可以通過GPDAT來訪問DAT0-DAT7引腳。MP1/MP2/MP3/MP4分別為NC、主串口發(fā)送、主串口接收、IR;IR默認(rèn)為高電平,此時(shí)為普通UART通信模式,若IR為零,則配置為紅外通信模式。
4 軟件設(shè)計(jì)
4.1 系統(tǒng)整體軟件設(shè)計(jì)
采集板上電后首先對(duì)系統(tǒng)時(shí)鐘、定時(shí)器、中斷、AD采集等進(jìn)行初始化;在主函數(shù)中分時(shí)讀取各采集要素傳感器的參數(shù),執(zhí)行相應(yīng)傳感器的處理函數(shù),并通過DTU模塊發(fā)送分鐘數(shù)據(jù)報(bào)文給服務(wù)器。其中外部中斷用來判斷門狀態(tài)等參數(shù);定時(shí)器中斷用來計(jì)時(shí),在一分鐘內(nèi)的不同時(shí)間段采集不同要素的數(shù)據(jù)。串口中斷用來判斷傳感器是否有數(shù)據(jù)發(fā)出并接收數(shù)據(jù);AD用來采集一些非高精度的模擬量電壓值。
4.2 串口擴(kuò)展子系統(tǒng)軟件設(shè)計(jì)
當(dāng)選擇UART作為WK2168的主接口時(shí),與采集板僅連接RX、TX、GND三根線。采用標(biāo)準(zhǔn)的UART協(xié)議進(jìn)行通信[7]。主接口UART可以實(shí)現(xiàn)波特率自適應(yīng)。上電復(fù)位后,先向WK2168寫入0x55,WK2168可以根據(jù)寫入的數(shù)據(jù)自動(dòng)測(cè)得此時(shí)MCU的波特率并把主接口UART的波特率鎖定,以后就以此波特率進(jìn)行通信;如果主接口需要再次更換波特率,需要對(duì)芯片硬件復(fù)位,然后再次進(jìn)行波特率測(cè)試和鎖定。
4.2.1 WK2168讀寫寄存器時(shí)序分析
對(duì)WK2168進(jìn)行寫操作時(shí),先由單片機(jī)向WK2168寫入一字節(jié)的控制字,隨后寫入一個(gè)字節(jié)的數(shù)據(jù)。在無(wú)校驗(yàn)?zāi)J较氯绫?所示:
寫寄存器模塊函數(shù)代碼如下所示:
void write_reg(unsigned char port,unsigned char reg,unsigned char dat)
{
uart_sendByte(0x00+((port-1)<<4)+reg);
uart_sendByte(dat);
USART_SendData(USART1, (0x00+((port-1)<<4)+reg));
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
其中:port指的是子串口號(hào)(C0、C1)
reg 指的是寄存器的地址(A3、A2、A1、A0)
dat 指的是要對(duì)寄存器寫入的數(shù)據(jù)
若需要對(duì)串口1的波特率配置位115200,假設(shè)系統(tǒng)時(shí)鐘為12M;
reg=fs/((baud*16)) (1)
fs為系統(tǒng)時(shí)鐘,baud 為波特率,reg為我們要寫入到寄存器中的控制命令,如公式1所示[8];reg=6.51,結(jié)果精確到小數(shù)點(diǎn)后兩位,把reg的值減去1按順序賦值給BAUD1和BAUD0,把小數(shù)點(diǎn)后第一位賦值給PRES;只需要調(diào)用函數(shù):
write_reg(1,BAUD1,0X00);
write_reg(1,BAUD0,0X05);
write_reg(1,PRES,0X05);
對(duì)WK2168進(jìn)行讀操作時(shí),先由單片機(jī)向WK2168寫入一字節(jié)的控制字,隨后從WK2168的TX讀取數(shù)據(jù)。如寫入一個(gè)字節(jié)的數(shù)據(jù)。在無(wú)校驗(yàn)?zāi)J较氯绫?所示:
讀寄存器模塊函數(shù)代碼如下所示:
unsigned char read_reg(unsigned char port,unsigned char reg)
{
unsigned char rec_data;
uart_sendByte(0x40+((port-1)<<4)+reg);
rec_data=uart_recByte();
return rec_data;
}
4.2.2 WK2168讀寫FIFO時(shí)序分析
對(duì)的讀寫操作,類似于對(duì)一個(gè)特殊的讀寫操作。操作命令只能作用于FIFO寄存器緩沖區(qū)的數(shù)據(jù)。
寫FIFO功能模塊函數(shù)如表3:
void Wk2168_writeFIFO(unsigned char port,unsigned char *send_da,unsigned char num)
{
unsigned char i;
uart_sendByte(0x80+((port-1)<<4)+(num-1)); //寫指令
for(i=0;i { uart_sendByte( *(send_da+i));//寫數(shù)據(jù) } } 其中參數(shù):port指的是子串口號(hào)(C0、C1) *dat是寫入的數(shù)據(jù)指針 num寫入的數(shù)據(jù)個(gè)數(shù) 讀FIFO功能模塊函數(shù)如下: unsigned char *Wk2114readFIFO(unsigned char port,unsigned char num) { unsigned char n; unsigned char dat[256]; uart_sendByte(0xc0+((port-1)<<4)+(num-1)); for(n=0;n { dat[n]=uart_recByte(); } return dat; } 其中參數(shù):port指的是子串口號(hào)(C0、C1) *dat是讀取的數(shù)據(jù)指針 Num讀到的數(shù)據(jù)個(gè)數(shù) } 采集板卡實(shí)物圖如圖3所示: 5 結(jié)束語(yǔ) 基于STM32采集板卡中串口數(shù)量不足的問題,設(shè)計(jì)了基于WK2168串口擴(kuò)展方案,并對(duì)WK2168芯片進(jìn)行介紹,設(shè)計(jì)了基于WK2168串口擴(kuò)展系統(tǒng)的硬件電路,編寫了WK2168芯片的應(yīng)用程序,該設(shè)計(jì)方案已經(jīng)在實(shí)際項(xiàng)目中應(yīng)用。為氣象站采集板卡提供了一種新的串口擴(kuò)展方案。 參考文獻(xiàn): [1] 何慧蕓, 馬啟明, 黃啟俊, 等. 智能氣象站傳感器系統(tǒng)的ZigBee無(wú)線網(wǎng)絡(luò)設(shè)計(jì)[J]. 電子測(cè)量技術(shù), 2012(6): 118-121. [2] 王新勇. 基于ARM的Linux驅(qū)動(dòng)開發(fā)研究[D]. 贛州: 江西理工大學(xué), 2011. [3] 張繼珂. 嵌入式操作系統(tǒng)uC/OS-ⅡI的移植及文件系統(tǒng)設(shè)計(jì)[D]. 南京: 南京航空航天大學(xué), 2011. [4] 郝玉勝. uC/OS-Ⅱ嵌入式操作系統(tǒng)內(nèi)核移植研究及其實(shí)現(xiàn)[D]. 蘭州: 蘭州交通大學(xué), 2014. [5] 張義顯. 基于STM32的新型家庭報(bào)警器的設(shè)計(jì)與實(shí)現(xiàn)[D]. 秦皇島: 燕山大學(xué), 2016. [6] 李洪亮. 車輛油耗實(shí)時(shí)監(jiān)測(cè)與信息管理系統(tǒng)研究[D]. 哈爾濱: 東北林業(yè)大學(xué), 2014. [7] 張玉恒, 梁存真. 基于VK3214的DSP串口擴(kuò)展—2010年河南省單片微機(jī)和嵌入式系統(tǒng)學(xué)術(shù)研討會(huì)[C]. 鄭州: 河南省電子學(xué)會(huì), 2010. [8] 為開微電子. WK2168數(shù)據(jù)手冊(cè)[M]. 成都: 四川為開微電子有限公司, 2017.