国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于STR710F的數(shù)據(jù)采集系統(tǒng)的實(shí)現(xiàn)

2012-09-04 08:45
關(guān)鍵詞:開發(fā)板微控制器條形碼

過 怡

(蘇州市職業(yè)大學(xué) 計(jì)算機(jī)工程系,江蘇 蘇州 215104)

基于STR710F的數(shù)據(jù)采集系統(tǒng)的實(shí)現(xiàn)

過 怡

(蘇州市職業(yè)大學(xué) 計(jì)算機(jī)工程系,江蘇 蘇州 215104)

針對(duì)固定資產(chǎn)隨著企業(yè)生產(chǎn)經(jīng)營(yíng)經(jīng)常變化,其價(jià)值、存放地點(diǎn)等動(dòng)態(tài)性的特點(diǎn),結(jié)合嵌入式技術(shù)的發(fā)展,提出一種基于ARM7(STR710F微控制器)的快速有效的資產(chǎn)數(shù)據(jù)的采集方案,并完成了基于ARM7(STR710F)的條形碼數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與軟件實(shí)現(xiàn).

STR710F;條形碼;數(shù)據(jù)采集

企業(yè)資產(chǎn)管理(enterprise asset management ,EAM)是現(xiàn)代企業(yè)管理系統(tǒng)的重要組成部分,在企業(yè)的生產(chǎn)建設(shè)中發(fā)揮著重要的作用.隨著現(xiàn)代企業(yè)規(guī)模的不斷擴(kuò)大,資產(chǎn)管理呈現(xiàn)分布式發(fā)展的趨勢(shì),即中心機(jī)房和物資倉庫分布在城市的不同區(qū)域.固定資產(chǎn)隨著企業(yè)生產(chǎn)經(jīng)營(yíng)經(jīng)常變化,其價(jià)值、存放地點(diǎn)等是動(dòng)態(tài)的,其管理表現(xiàn)為固定資產(chǎn)的增值、減值、調(diào)撥、租賃、轉(zhuǎn)讓、拆除、重組、報(bào)廢等大量的、頻繁的日常業(yè)務(wù)[1].本系統(tǒng)采集條形碼保證了資產(chǎn)信息的唯一性,采用ARM7的控制器提高了執(zhí)行速度,便攜式的設(shè)計(jì)便于操作使用,有利于提高企業(yè)資產(chǎn)動(dòng)態(tài)數(shù)據(jù)采集、存儲(chǔ)和傳輸?shù)男?結(jié)合嵌入式技術(shù)的發(fā)展,提出了一種基于STR710F微控制器的快速有效的資產(chǎn)數(shù)據(jù)采集方案,并完成了基于ARM7(STR710F)的條形碼數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與軟件實(shí)現(xiàn).本系統(tǒng)分為三大模塊:條形碼掃描與串行傳輸模塊;液晶顯示模塊;按鍵輸入模塊.

1 系統(tǒng)的總體設(shè)計(jì)

本系統(tǒng)開發(fā)的軟硬件環(huán)境為:Embest ST DV710B開發(fā)板,EmbestIDE 軟件集成開發(fā)環(huán)境,Embest JTAG仿真器,ST公司提供的軟件庫,串行口掃描槍.

1.1 系統(tǒng)的硬件結(jié)構(gòu)

以ST公司的ST710F微處理器為核心,使用串行接口采集條形碼信息,LCD顯示工作模式及掃描數(shù)據(jù),按鍵選擇工作模式,外置FLASH存儲(chǔ)信息.硬件結(jié)構(gòu)如圖1所示.

1.2 系統(tǒng)的軟件結(jié)構(gòu)

本系統(tǒng)的軟件設(shè)計(jì)主要包括系統(tǒng)的初始化、主程序、條形碼掃描模塊、按鍵輸入模塊、LCD顯示模塊、FLASH存儲(chǔ)模塊.系統(tǒng)軟件結(jié)構(gòu)如圖2所示.

圖1 系統(tǒng)硬件結(jié)構(gòu)

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

2 系統(tǒng)各軟件模塊的實(shí)現(xiàn)

2.1 系統(tǒng)初始化模塊的設(shè)計(jì)

嵌入式系統(tǒng)上電或復(fù)位后首先運(yùn)行的程序被稱為啟動(dòng)代碼即BootLoader,通常負(fù)責(zé)初始化底層硬件設(shè)備、建立內(nèi)存空間映射關(guān)系、基本系統(tǒng)檢測(cè)、加載操作系統(tǒng)內(nèi)核等重要工作,為操作系統(tǒng)或者用戶應(yīng)用程序的運(yùn)行提供良好的運(yùn)行環(huán)境[2].依賴于CPU的體系結(jié)構(gòu)和開發(fā)板實(shí)現(xiàn),與硬件密切相關(guān),同一款A(yù)RM內(nèi)核,集成不同片內(nèi)外設(shè)的處理器,BootLoader不同,同一款處理器用于不同的開發(fā)板BootLoader.BootLoader的開發(fā)通常分為兩個(gè)階段,依賴于CPU體系結(jié)構(gòu)的代碼,比如CPU和開發(fā)板上必備設(shè)備(內(nèi)存、中斷控制器、堆棧等)初始化代碼等,通常都放在第一個(gè)階段,使用匯編語言來實(shí)現(xiàn),以達(dá)到短小精悍的目的.初始化板極硬件設(shè)備(串口、網(wǎng)口、LED 等),引導(dǎo)加載內(nèi)核通常放在第二階段,使用C語言來實(shí)現(xiàn),以實(shí)現(xiàn)較復(fù)雜的功能,而且代碼會(huì)具有更好的可讀性和可移植性.本系統(tǒng)的主要功能是數(shù)據(jù)采集和存儲(chǔ),無需進(jìn)程管理、設(shè)備管理和文件管理,不加載嵌入式操作系統(tǒng),因此,本系統(tǒng)BootLoader只需第一階段,執(zhí)行功能為:

1) 設(shè)置系統(tǒng)中斷和異常向量;

2) 初始化堆棧指針.為處理器的每個(gè)工作模式設(shè)置獨(dú)立的堆棧空間;

3) 初始化所有外圍設(shè)備;

4) 如需使用片外RAM,則初始化外部存儲(chǔ)器接口EMI的BANK1;

5) 初始化增強(qiáng)中斷控制器EIC;

6) 存儲(chǔ)器地址的重映射.將SRAM地址映射為0X00000000H;

7) 全局變量初始化.將已賦初始值的全局變量從FLASH中復(fù)制到SRAM中;

8) 數(shù)據(jù)區(qū)準(zhǔn)備.為未賦初始值的全局變量分配SRAM空間并清零;

9) 使能中斷;

10) 改變處理器工作模式和狀態(tài);

11) 調(diào)用系統(tǒng)主程序.

STR710F系列微控制器有三種啟動(dòng)模式:FLASH啟動(dòng)、RAM啟動(dòng)、外部存儲(chǔ)器啟動(dòng).通過配置3個(gè)輸入引腳BOOTEN、BOOT1、BOOT0的使能,無論采用何種啟動(dòng)模式,微控制器都能將RAM或FLASH中的BootLoader映射到0X00000000H的啟動(dòng)引導(dǎo)存儲(chǔ)器中,使系統(tǒng)順利運(yùn)行.在Embest ST DV710B開發(fā)板上提供跳線JP4、JP5、JP6來實(shí)現(xiàn)模式切換.

2.2 系統(tǒng)主程序設(shè)計(jì)

系統(tǒng)的主程序主要實(shí)現(xiàn)流程控制和各模塊的調(diào)用.首先上電啟動(dòng),執(zhí)行系統(tǒng)初始化模塊即BootLoader,對(duì)系統(tǒng)硬件進(jìn)行初始化,在完成上述工作后,BootLoader將系統(tǒng)引導(dǎo)進(jìn)入主程序Main.主程序首先初始化需使用的各設(shè)備,包括串行口、LCD、GPIO口.然后在LCD上顯示提示信息,等待用戶按鍵輸入,根據(jù)用戶按鍵進(jìn)入二種工作方式.鍵一,則處于等待掃描模式,串行中斷使能,將每次掃描的數(shù)據(jù)顯示在LCD液晶屏上,并暫存在SRAM中;鍵二,則處于FLASH存儲(chǔ)模式,將SRAM中的數(shù)據(jù)寫入片外FLASH中,此時(shí),串行口被關(guān)閉.

2.3 按鍵輸入模塊的設(shè)計(jì)

本系統(tǒng)的工作方式是由用戶的按鍵輸入決定的,在開發(fā)板上,通過設(shè)置GPIO(通用輸入輸出端口)口獲得用戶的按鍵值.

2.3.1 通用輸入輸出端口的工作原理

STR710FZ2微控制器有3個(gè)16位的多功能可編程雙向通用I/O端口,每一位可獨(dú)立設(shè)置工作模式,每個(gè)I/O口由3個(gè)16位的配置寄存器(PC0、PC1、PC2)和1個(gè)16位數(shù)據(jù)寄存器(PD)進(jìn)行編程控制[3].端口的每一位可以根據(jù)PC0、PC1、PC2第N位的不同組合設(shè)置為8種不同的工作模式.

用戶讀寫操作通過讀寫數(shù)據(jù)寄存器PD完成,當(dāng)向數(shù)據(jù)寄存器中寫入數(shù)據(jù)時(shí),數(shù)據(jù)將被放入輸出鎖存器中,當(dāng)從數(shù)據(jù)寄存器中讀出數(shù)據(jù)時(shí),會(huì)從輸入鎖存器中讀取數(shù)據(jù).因此,數(shù)據(jù)寄存器提供了用戶讀寫I/O端口的接口.在STR710FZ2微控制器中I/O寄存器通過APB2總線與ARM內(nèi)核通信,IO0的基地址為0XE0003000H,IO1的基地址為0XE0004000H,IO3的基地址為0XE0004000H,PC0、PC1、PC2和PD的地址偏移量為00H,04H,08H,0CH.在開發(fā)板上通過IO2讀取按鍵值.

2.3.2 模塊功能實(shí)現(xiàn)

在開發(fā)板上共提供7個(gè)按鍵,其中有2個(gè)特殊功能鍵:開發(fā)板復(fù)位鍵RESET和系統(tǒng)喚醒鍵WAKEUP,其余5個(gè)用以接收用戶輸入信息,分別與GPIO2的引腳7、9、11、13、15相連.本模塊只使用了鍵一(K1)、鍵二(K2).系統(tǒng)輸入模塊只需調(diào)用配置函數(shù)GPIO_Config配置端口GPIO2的對(duì)應(yīng)位,然后調(diào)用GPIO2讀取函數(shù)即可獲得按鍵信息.開發(fā)板附帶的軟件庫提供的按鍵函數(shù)如下:

void Key_Init(void);//通過調(diào)用GPIO_Config配置GPIO2控制按鍵的相應(yīng)位

int Key_GetAll(void);// 通過調(diào)用GPIO_WordRead讀取GPIO2中對(duì)應(yīng)按鍵的所有位

int Key_State(int index//);通過調(diào)用GPIO_WordRead讀取GPIO2中對(duì)應(yīng)某一個(gè)按鍵的某一位

當(dāng)某個(gè)鍵被按下,則GPIO2中對(duì)應(yīng)位為0,否則為1,3個(gè)按鍵對(duì)應(yīng)的編號(hào)為0,1,2.因此,判斷按鍵只需判斷Key_State的返回值為1或0即可.

2.4 液晶顯示模塊的設(shè)計(jì)

本模塊的功能為:在系統(tǒng)進(jìn)入運(yùn)行狀態(tài)時(shí)顯示提示信息,當(dāng)用戶有按鍵輸入時(shí)顯示當(dāng)前選擇的工作模式及掃描的條碼數(shù)據(jù).開發(fā)板使用2*16的RT1602C液晶字符顯示模塊顯示英文字符的提示信息.

2.4.1 LCD的工作原理

STR710FZ2微控制器沒有獨(dú)立的LCD控制器.采用RT1602C液晶字符顯示模塊實(shí)現(xiàn)顯示功能,其接口功能如表1所示[4]:

RT1602C液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,包含字符有:阿拉伯?dāng)?shù)字、大小寫英文字母、常用符號(hào)、日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,顯示時(shí)模塊把對(duì)應(yīng)代碼的點(diǎn)陣字符圖形顯示出來即可.

RT1602C液晶模塊的命令寄存器和數(shù)據(jù)寄存器被作為外部存儲(chǔ)器的一部分,STR710FZ2微控制器外部存儲(chǔ)器空間分為4個(gè)Bank,由外部存儲(chǔ)器接口EMI管理,地址范圍從0X60000000H至0X6C000000H,其中,LCD命令寄存器使用0X66000000H,LCD數(shù)據(jù)寄存器使用0X6600EFFFH,位于Bank3中[5].通過配置外部存儲(chǔ)器接口EMI設(shè)置位于Bank3中寄存器的工作方式,EMI有4個(gè)配置寄存器用以配置對(duì)應(yīng)的4個(gè)Bank.

表1 1602引腳功能

2.4.2 模塊功能實(shí)現(xiàn)

本模塊主要調(diào)用ST提供的庫函數(shù)實(shí)現(xiàn):

1) 調(diào)用LCD_Init函數(shù),配置Bank3工作方式,配置GPIO2的引腳0-3為復(fù)用模式,配置LCD命令寄存器,實(shí)現(xiàn)初始化工作.

2) 調(diào)用LCD_GoTo函數(shù)設(shè)置顯示位置為第1行第0列.共能顯示2行16列,行號(hào)為0、1,列號(hào)為0-15.

3) 調(diào)用LCD_Puts函數(shù)現(xiàn)實(shí)提示字符串,由于RT1602C液晶模塊自帶有英文大小寫的點(diǎn)陣字符圖形,只需給出它們的代碼ASCII即可.

2.5 條形碼掃描模塊的設(shè)計(jì)

將條形碼掃描槍采集的每條數(shù)據(jù)以字符串的形式保存在SRAM的數(shù)組中.

2.5.1 條形碼格式分析

條形碼是由一組規(guī)則排列的條、空以及對(duì)應(yīng)的字符組成的標(biāo)記,“條”指對(duì)光線反射率較低的部分,“空”指對(duì)光線反射率較高的部分,這些條和空組成的數(shù)據(jù)表達(dá)一定的信息,并能夠用特定的設(shè)備識(shí)讀,轉(zhuǎn)換成與計(jì)算機(jī)兼容的二進(jìn)制和十進(jìn)制信息.每個(gè)物品的條形碼都是唯一的.碼制即指條形碼條和空的排列規(guī)則,常用的一維碼的碼制包括:EAN碼、39碼、交叉25碼、UPC碼、128碼、93碼,及Codabar(庫德巴碼)等[6].

通常一個(gè)完整的條碼是由兩側(cè)靜空區(qū)、起始碼、資料碼、檢查碼、終止碼組成,以一維條碼而言,完整的條形碼格式排列方式[7]通常為:

在企業(yè)內(nèi)部采用39碼對(duì)資產(chǎn)進(jìn)行統(tǒng)一編碼,最大條碼長(zhǎng)度不超過20個(gè)字符.本系統(tǒng)在采集資產(chǎn)條形碼時(shí),將去掉起始碼和終止碼,只保留有效信息.

2.5.2 串行口的工作原理

STR710FZ2微控制器集成有4個(gè)異步串行接口(UART),實(shí)現(xiàn)與外部設(shè)備的全雙工異步通信.數(shù)據(jù)幀的長(zhǎng)度可以為8位或者9位.可以通過編程配置數(shù)據(jù)幀的長(zhǎng)度、奇偶校驗(yàn)位數(shù)、停止位數(shù).數(shù)據(jù)傳輸可采用雙緩沖模式或者使用深度為16的FIFO.16位的波特率發(fā)生器為傳輸提供獨(dú)立的串行時(shí)鐘信號(hào).

2.5.3 模塊功能實(shí)現(xiàn)

本系統(tǒng)采用UART0進(jìn)行條形碼數(shù)據(jù)的傳輸,STR710FZ2微控制器使用GPIO0的Pin143、Pin144作為UART0的數(shù)據(jù)接收引腳和發(fā)送引腳.因此,在UART0開始傳輸之前需配置GPIO0這兩個(gè)引腳的工作模式.

STR710FZ2微控制器片內(nèi)設(shè)備有多個(gè)時(shí)鐘域,分別為:主時(shí)鐘MLCK,包括CPU和存儲(chǔ)器;外設(shè)時(shí)鐘PCLK1,包括APB1外設(shè),UART部件屬于APB1外設(shè);外設(shè)時(shí)鐘PCLK2,包括APB2外設(shè).因此,在UART0開始傳輸之前需合理地配置外設(shè)時(shí)鐘才能保障正確的傳輸.

條形碼掃描槍每掃描一個(gè)條碼,將產(chǎn)生一個(gè)UART0的IRQ中斷,在STR710FZ2微控制器中由增強(qiáng)型中斷控制器(EIC)實(shí)現(xiàn)對(duì)32個(gè)可屏蔽中斷通道的硬件處理、中斷優(yōu)先級(jí)決策和中斷向量計(jì)算.因此,在UART0開始傳輸之前需配置EIC.由于資產(chǎn)編號(hào)采用39碼,長(zhǎng)度不超過20個(gè)字符,以*作為起始碼和終止碼,每次掃描的設(shè)備數(shù)目不超過100臺(tái),系統(tǒng)采用全局字符數(shù)組tiaomaBuf[2000]用以保存每次掃描的條碼數(shù)據(jù),并初始化為字符*.UART0的IRQ中斷服務(wù)程序負(fù)責(zé)接收條碼數(shù)據(jù),去除起始碼和終止碼,在條碼數(shù)據(jù)尾部增加結(jié)束符