基于STM32的數(shù)碼相框設計與實現(xiàn)本科論文_第1頁
基于STM32的數(shù)碼相框設計與實現(xiàn)本科論文_第2頁
基于STM32的數(shù)碼相框設計與實現(xiàn)本科論文_第3頁
基于STM32的數(shù)碼相框設計與實現(xiàn)本科論文_第4頁
基于STM32的數(shù)碼相框設計與實現(xiàn)本科論文_第5頁
已閱讀5頁,還剩47頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于基于stm32stm32的數(shù)碼相框設計與實現(xiàn)的數(shù)碼相框設計與實現(xiàn) 摘 要 嵌入式系統(tǒng)是當前最有發(fā)展前途的 it 應用領域之一,近年來數(shù)字攝影業(yè)的興 起帶動了嵌入式產品數(shù)碼相框的發(fā)展。本設計是一款基于 arm cortex-m3 內 核 stm32 嵌入式硬件平臺設計的數(shù)碼相框,主要優(yōu)勢是應用了 stm32 杰出的功耗 控制和極低的開發(fā)成本、超多的外設等特點。 設計主要包括主控制器核心板、lcd 液晶顯示、sd 卡存儲器等多個功能模塊。 開發(fā)過程大致為:在 pc 機 win7 系統(tǒng)中使用 rvmdk3.80 版本的編譯器撰寫工程代 碼,之后通過 mcuisp 串口下載軟件將編譯器編譯生成.h

2、ex 下載到開發(fā)板內,最終實 現(xiàn)通過 fat 文件系統(tǒng)讀取 sd 卡內存儲的 bmp、jpeg、jpg 格式圖片,把多幅圖 片以幻燈片的形式從 tft 屏上顯示出來。 關鍵詞:數(shù)碼相框; stm 32; lcd 液晶顯示; sd 卡 the design of digital photo frames based on the stm32 abstract embedded systems is one of the most promising applications of it in recent years, driven by the rise of digital photogra

3、phy embedded products - digital photo frame development. the design is based on a stm32 arm cortex-m3 core embedded hardware platform design digital photo frame, both of todays digital photo frame industry, market demand and stm32 excellent power control and low development costs. core design includ

4、es the main controller board, lcd liquid crystal display, a number of functional modules sd card memory. development process is roughly: use rvmdk3.80 version of the compiler writing project code in the pc win7 system, after passing through mcuisp serial download software compiler to generate hex do

5、wnloaded to the development board, and ultimately the system by reading the fat file system. within the sd card storage bmp, jpeg, jpg format images, the pieces of the picture in the form of a slide from the tft screen is displayed. keywords: digital photo frame; stm32;lcd liquid crystal display ;sd

6、 card memory. 目目 錄錄 摘要.1 abstract.2 目 錄.1 第一章 緒論.1 1.1 數(shù)碼相框的技術背景.1 1.2 數(shù)碼相框的市場背景.1 1.3 本課題主要研究內容與特點.1 1.3.1 本課題的主要研究內容.1 1.3.2 本設計的主要特點.1 第二章 硬件介紹.3 2.1 mcu 主控模塊 .3 2.2 lcd 模塊.4 2.3 sd 存儲卡模塊 .7 第三章 軟件介紹.10 3.1 安裝 mdk3.8a.10 3.2 注冊 license.10 3.3 新建工程.12 3.4 mcuisp與sscom軟件 .18 第四章 程序設計.20 4.1 整體描述.20

7、 4.2 各模塊描述.20 4.2.1 sd 卡圖片文件讀取.20 4.2.2 圖像解碼與顯示.21 4.3 主程序設計.28 4.3 程序調試.31 第五章 結束語.33 參考文獻(references).34 致 謝.35 外文文獻.36 外文譯文.45 第一章第一章 緒論緒論 1.11.1 數(shù)碼相框的技術背景數(shù)碼相框的技術背景 嵌入式是以應用為中心,以計算機技術為基礎,軟件硬件可裁剪適合于應用系 統(tǒng)對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)。 作為如今最有發(fā)展前途的 it 應用領域之一嵌入式系統(tǒng)一般用在一些專用設備上, 通常這些設備的硬件資源非常有限、對成本很敏感,有時對實

8、時響應要求很高。像 我們平常常見到的手機、vcd、mp3 播放器、數(shù)字攝像機、機頂盒、高清電視、游 戲機、路由器、汽車電子、家電控制系統(tǒng)、醫(yī)療儀器、航天航空設備等等都是嵌入 式產品。 隨著數(shù)字攝影的興起數(shù)碼相框產業(yè)得以發(fā)展。數(shù)碼相框的造型是將原來相框中 間放照片的部分換成了液晶顯示屏,外加電源,存儲介質等,比普通相框的優(yōu)勢是 在同一個相框內可以循環(huán)播放照片。 1.21.2 數(shù)碼相框的市場背景數(shù)碼相框的市場背景 市場方面,自 2008 年開始數(shù)碼相框市場就呈現(xiàn)出了高速發(fā)展的態(tài)勢,并一直 持續(xù)至今,因此本課題的研究具有極高的商業(yè)價值與意義。 數(shù)碼相框產品的首次出現(xiàn)是在 2001 年,但直至 200

9、3 年市場都一直低迷,其原 因在于產品的價格過高。之后在器件價格的下降等因素的促使下,其價格也得以下 降,于是市場自 2004 年有了起色,2005 年,數(shù)碼相框產品開始在歐美熱銷,但出 貨量也只有 150 萬臺左右, 2006 年的出貨量同比上漲 133,為 280 萬臺,2007 年的出貨量同比上漲 185,為 800 萬臺, 2011 年出貨量達到 4000 萬臺。 從長遠來看,未來幾年數(shù)碼相框的市場將逐漸步入成熟期,其產銷量和市場需 求仍會保持大幅度增長。 1.31.3 本課題主要研究內容本課題主要研究內容與特點與特點 1.3.11.3.1 本課題的主要研究內容本課題的主要研究內容 本

10、課題是基于 arm 單片機 stm32 的存儲程序控制,從 sd 卡讀取圖片,解碼之 后輸出到 tft-lcd(薄膜晶體管液晶顯示器)上顯示。實現(xiàn)了對 sd 卡里多幅圖片 以幻燈片形式在 tft 屏上動態(tài)顯示的效果。 1)硬件資料的研究; 2)軟件方案的選擇與論證; 3)軟件運行與調試; 1.3.21.3.2 本設計的主要特點本設計的主要特點 從以往的市場發(fā)展來看,數(shù)碼相框產品市場化的兩大阻礙因素為:一是價格;二 是應用功能。低廉的價格將贏得更多顧客的青睞,拓展應用空間指的是消費者的需 求開發(fā)出相應的應用產品。 stm32 具有超低的價格、超多的外設、豐富的型號、優(yōu)異的實時性能、杰出 的功耗控

11、制和極低的開發(fā)成本等 超低的價格:以 8 位機的價格,得到 32 位機,是 stm32 最大的優(yōu)勢。 極低的開發(fā)成本:stm32 的開發(fā)不需要昂貴的仿真器,只需要一個串口即可下 載代碼,并且支持 swd 和 jtag 兩種調試口。swd 調試可以為您的設計帶來跟多 的方便,只需要 2 個 io 口,即可實現(xiàn)仿真調試。 超多的外設:stm32 擁有包括: fsmc、timer、spi、iic、usb、can、iis、sdio、adc、dac、rtc、dma 等眾多外設及功能,具有極高的集成度。 豐富的型號:stm32 擁有 f101、f102、f103、f105、f107 等 5 個系列數(shù)十種

12、型號,具有 qfn、lqfp、bga 等封裝可供選擇。 優(yōu)異的實時性能:84 個中斷,16 級可編程優(yōu)先級,并且所有的引腳都可以作 為中斷輸入。 杰出的功耗控制:stm32 各個外設都有自己的獨立時鐘開關,可以通過關閉相 應外設的時鐘來降低功耗。 第二章第二章 硬件介紹硬件介紹 2.12.1 mcumcu 主控模塊主控模塊 stm32 系列閃存微控制器是意法半導體公司(st)基于 arm 公司具有突破性 的 cortex-m3 內核的處理器,該處理器是專門設計于滿足集高性能、低功耗、實時 應用、具有競爭性價格于一體的嵌入式領域的要求。此次設計采用的具體型號是 stm32f103rbt6,如圖

13、2-1 所示。 圖 2-1 stm32f103rbt6 處理器 stm32f103rbt6 嵌入式處理器具有以下特點: 32 位 risc 性能處理器; 32 位 arm cortex-m3 結構優(yōu)化; 72 mhz 運行頻率,單周期訪問時速度可達 1.25 dmips/mhz; 硬件除法和單周期乘法; 快速可嵌套中斷,612 個時鐘周期; 具有 mpu 保護設定訪問規(guī)則; 片內具有 256kb flash,48kb ram; 80 個快速 i/o 端口,16 個 i/o 可映射到外部中斷,幾乎所有的 i/o 可以忍受 5v 電壓; 片上集成 12bit a/d、d/a、pwm、can、usb

14、、sdio、fsmc 等資源; arm cortex-m3 是一種基于 arm7v 架構的最新 arm 嵌入式內核,它采用哈 佛結構,使用分離的指令和數(shù)據(jù)總線(馮諾伊曼結構下,數(shù)據(jù)和指令共用一條總線)。 從本質上來說,哈佛結構在物理上更為復雜,但是處理速度明顯加快。根據(jù)摩爾定 理,復雜性并不是一件非常重要的事,而吞吐量的增加卻極具價值。 除了使用哈佛結構,cortex-m3 還具有其它顯著的優(yōu)點:具有更小的基礎內核, 價格更低,速度更快。與內核集成在一起的是一些系統(tǒng)外設,如中斷控制器、總線 矩陣、調試功能模塊,而這些外設通常都是由芯片制造商增加的。 cortex-m3 還集成了睡眠模式和可選的

15、完整的八區(qū)域存儲器保護單元,只支持 最新的 thumb-2 指令集,最大限度降低了匯編器使用率。cortex-m3 這樣設計的優(yōu) 勢在于: 免去 thumb 和 arm 代碼的互相切換,對于早期的處理器來說,這種狀態(tài)切換 會降低性能。 thumb-2 指令集的設計是專門面向 c 語言的,且包括 if/then 結構(預測接下來 的四條語句的條件執(zhí)行)、硬件除法以及本地位域操作。 thumb-2 指令集允許用戶在 c 代碼層面維護和修改應用程序,c 代碼部分非常 易于重用。 thumb-2 指令集也包含了調用匯編代碼的功能:luminary 公司認為沒有必要使 用任何匯編語言。 綜合以上這些優(yōu)勢

16、,新產品的開發(fā)將更易于實現(xiàn),上市時間也大為縮短。 stm32f103rbt6 的資源完全滿足此次的嵌入式數(shù)碼相框設計,通過設計電路開發(fā) 一個支持 tft 彩色液晶屏的驅動電路,在設計中搭配 2.8 寸 tft 真彩觸摸屏模塊作 為顯示界面,同時支持一個 sd 卡(spi 方式)可用于存儲圖片、數(shù)據(jù)等。 2.22.2 lcdlcd 模塊模塊 thin film transistor(薄膜場效應晶體管),是指液晶顯示器上的每一液晶象素點 都是由集成在其后的薄膜晶體管來驅動。從而可以做到高速度、高亮度、高對比度 顯示屏幕信息,tft-lcd(薄膜晶體管液晶顯示器)是多數(shù)液晶顯示器的一種。tft 屏幕

17、的優(yōu)點如下: 大面積。九十年代初第一代大面積玻璃基板(300mm400mm)tft-lcd 生 產線投產,到 2000 年上半年玻璃基板的面積已經擴大到了 680mm880mm),最 近 950mm1200mm 的玻璃基板也將投入運行。 高集成度。用于液晶投影的 1.3 英寸 tft 芯片的分辨率為 xga 含有百萬個象 素。分辨率為 sxga(12801024)的 16.1 英寸的 tft 陣列非晶體硅的膜厚只有 50nm,以及 tab on glass 和 system on glass 技術,其 ic 的集成度,對設 備和供應技術的要求,技術難度都超過傳統(tǒng)的 lsi。 功能強大。tft

18、最早作為矩陣選址電路改善了液晶的光閥特性。對于高分辨率 顯示器,通過 0-6v 范圍的電壓調節(jié)(其典型值 0.2 到 4v),實現(xiàn)了對象元的精確 控制,從而使 lcd 實現(xiàn)高質量的高分辨率顯示成為可能。tft-lcd 是人類歷史上 第一種在顯示質量上超過 crt 的平板顯示器?,F(xiàn)在人們開始把驅動 ic 集成到玻璃 基板上,整個 tft 的功能將更強大,這是傳統(tǒng)的大規(guī)模半導體集成電路所無法比擬 的。 低成本。玻璃基板和塑料基板從根本上解決了大規(guī)模半導體集成電路的成本問 題,為大規(guī)模半導體集成電路的應用開拓了廣闊的應用空間。 工藝靈活。除了采用濺射、cvd(化學氣相沉積)mcvd(分子化學氣相沉積

19、) 等傳統(tǒng)工藝成膜以外,激光退火技術也開始應用,既可以制作非晶膜、多晶膜,也 可以制造單晶膜。不僅可以制作硅膜,也可以制作其他的-族和-族半導體 薄膜。 應用領域廣泛。以 tft 技術為基礎的液晶平板顯示器是信息社會的支柱產業(yè), 技術可應用到正在迅速成長中的薄膜晶體管有機電致發(fā)光(tft-oled)平板顯示器 也在迅速的成長中。 tft 液晶顯示屏亮度好、對比度高、層次感強、顏色鮮艷,其廣泛應用于手機、 mp4 等消費品。因此,本系統(tǒng)選用 2.8 英寸 tft-lcd 屏(如圖 2-2 所示)可顯 26 萬色,分辨率 320*240,控制器為 ili9320,采用 16 位的 80 并口,配合

20、觸摸屏專用 芯片 xpt2046,可對屏幕進行觸摸操作,更顯智能化和個性化。為了方便用戶使用, 我們存儲方式采用兼容 fat 的文件系統(tǒng),同時該文件系統(tǒng)也兼容 fat32 等電腦主 流的文件系統(tǒng)方式進行存儲。 圖 2-2 2.8 英寸 tft-lcd 模塊 該模塊的 80 并口有如下一些信號線: cs:tft-lcd 片選信號。 wr:向 tft-lcd 寫入數(shù)據(jù)。 rd:從 tft-lcd 讀取數(shù)據(jù)。 d15:0:16 位雙向數(shù)據(jù)線。 rst:硬復位 tft-lcd。 rs:命令/數(shù)據(jù)標志(0,讀寫命令;1,讀寫數(shù)據(jù))。 tft-lcd 模塊的 rst 信號線是直接接到 stm32 的復位腳

21、上,并不由軟件控 制,這樣可以省下來一個 i/o 口。另外我們還需要一個背光控制線來控制 tft-lcd 的背光。所以我們總共需要的 i/o 口數(shù)目為 21 個。 模塊的控制器為 ili9320(可能為其他型號,但是他們的設置很相似,除了初 始化序列有些區(qū)別,其他大都是一摸一樣的,這里僅以 9320 為例介紹),該控制 器自帶顯存,其顯存總大小為 172820(240*320*18/8),即 18 位模式(26 萬色) 下的顯存量。模塊的 16 位數(shù)據(jù)線與顯寸的對應關系為 565 方式,如下圖所示: 圖 2-3 16 位數(shù)據(jù)與顯存對應關系圖 最低 5 位代表藍色,中間 6 位為綠色,最高 5

22、位為紅色。數(shù)值越大,表示該顏 色越深。接下來介紹一下 ili9320 的幾個重要命令,因為 ili9320 的命令很多,這 里不一一介紹。這里我們要介紹的命令列表如下: 表 2.1 ili9320 常用命令表 r0,這個命令,有兩個功能,如果對它寫,則最低位為 osc,用于開啟或關閉 振蕩器。而如果對它讀操作,則返回的是控制器的型號。這個命令最大的功能就是 通過讀它可以得到控器的型號,而我們代碼在知道了控制器的型號之后,可以針對 不同型號的控制器,進行不同的初始化。因為 93xx 系列的初始化,其實都比較類 似,我們完全可以用一個代碼兼容好幾個控制器。 r3,入口模式命令。我們重點關注的是 i

23、/d0、i/d1、am 這 3 個位,因為這 3 個位控制了屏幕的顯示方向。 am:控制 gram 更新方向。當 am=0 的時候,地址以行方向更新。當 am=1 的時候,地址以列方向更新。 i/d1:0:當更新了一個數(shù)據(jù)之后,根據(jù)這兩個位的設置來控制地址計數(shù)器自動 增加/減少 1,其關系如下圖: 圖 2-4 gram 顯示方向設置圖 通過這幾個位的設置,我們就可以控制屏幕的顯示方向了。 r7,顯示控制命令。該命令 cl 位用來控制是 8 位彩色,還是 26 萬色。為 0 時 26 萬色,為 1 時八位色。d1、d0、basee 這三個位用來控制顯示開關與否的。 當全部設置為 1 的時候開啟顯

24、示,全 0 是關閉。我們一般通過該命令的設置來開啟 或關閉顯示器,以降低功耗。 r32,r33,設置 gram 的行地址和列地址。r32 用于設置列地址(x 坐標, 0239),r33 用于設置行地址(y 坐標,0319)。當我們要在某個指定點寫入一 個顏色的時候,先通過這兩個命令設置到改點,然后寫入顏色值就可以了。 r34,寫數(shù)據(jù)到 gram 命令,當寫入了這個命令之后,地址計數(shù)器才會自動的 增加和減少。該命令是我們要介紹的這一組命令里面唯一的單個操作的命令,只需 要寫入該值就可以了,其他的都是要先寫入命令編號,然后寫入操作數(shù)。 r80r83,行列 gram 地址位置設置。這幾個命令用于設定

25、顯示區(qū)域的大小, 我們整個屏的大小為 240*320,但是有時候我們只需要在其中的一部分區(qū)域寫入數(shù) 據(jù),如果用先寫坐標,后寫數(shù)據(jù)這樣的方式來實現(xiàn),則速度大打折扣。此時我們就 可以通過這幾個命令,在其中開辟一個區(qū)域,然后不停的丟數(shù)據(jù),地址計數(shù)器就會 根據(jù) r3 的設置自動增加/減少,這樣就不需要頻繁的寫地址了,大大提高了刷新的 速度。 通過以上介紹,我們可以得出 tft-lcd 顯示需要的相關設置步驟如下: 1)設置 stm32 與 tft-lcd 模塊相連接的 i/o。 這一步,先將我們與 tft-lcd 模塊相連的 i/o 口設置為輸出,具體使用哪些 i/o 口,這里需要根據(jù)連接電路以及 t

26、ft-lcd 模塊的設置來確定。 2)初始化 tft-lcd 模塊。 通過向 tft-lcd 寫入一系列的設置,來啟動 tft-lcd 的顯示。為后續(xù)顯示字 符和數(shù)字做準備。 3)通過函數(shù)將字符和數(shù)字顯示到 tft-lcd 模塊上。 這里就是通過我們設計的程序,將要顯示的字符送到 tft-lcd 模塊就可以了, 這些函數(shù)將在軟件設計部分向大家介紹。通過以上三步,我們就可以使用 tft-lcd 模塊來顯示字符和數(shù)字了,并且可以顯示各種顏色的背景。 2.32.3 sdsd 存儲卡模塊存儲卡模塊 sd 卡(secure digital memory card)中文翻譯為安全數(shù)碼卡,是一種基于半導 體

27、快閃記憶器的新一代記憶設備,它被廣泛地應用于便攜式裝置上,例如數(shù)碼相機、 個人數(shù)碼助理(pda)和多媒體播放器等。sd 卡由日本松下、東芝及美國 sandisk 公 司于 1999 年 8 月共同開發(fā)研制。大小猶如一張郵票的 sd 記憶卡,重量只有 2 克, 但卻擁有高記憶容量、快速數(shù)據(jù)傳輸率、極大的移動靈活性以及很好的安全性,此 外它可存多種格式數(shù)據(jù)文件,具有很強的可擴展性;用戶可方便使用 sd 卡讀卡器 對其進行用戶信息修改。2g 金士頓 sd 卡實物如下圖 2-5 所示。 sd 卡一般支持兩種操作模式:sd 卡模式與 spi 模式。 主機可以選擇以上任意一種模式同 sd 卡通信,sd 卡

28、模式允許 4 線的高速數(shù)據(jù) 傳輸。spi 模式允許簡單的通過 spi 接口來和 sd 卡通信,這種模式同 sd 卡模式相 比就是喪失了速度。sd 卡的引腳排序如下圖 2-6 所示: 圖 2-5 kingston sd 卡 圖 2-6 sd 卡引腳排序圖 sd 卡引腳功能描述如下表所示: 表 2.2 sd 卡引腳功能表 sd 卡只能使用 3.3v 的 i/o 電平,所以,mcu 一定要能夠支持 3.3v 的 i/o 端 口輸出。在 spi 模式下,cs/mosi/miso/clk 都需要加 10100k 左右的上拉電阻。 sd 卡要進入 spi 模式很簡單,就是在 sd 卡收到復位命令(cmd0

29、)時,cs 為有 效電平(低電平)則 spi 模式被啟用。不過在發(fā)送 cmd0 之前,要發(fā)送74 個時鐘, 這是因為 sd 卡內部有個供電電壓上升時間,大概為 64 個 clk,剩下的 10 個 clk 用于 sd 卡同步,之后才能開始 cmd0 的操作,在卡初始化的時候,clk 時鐘最大 不能超過 400khz。 本次硬件電路板使用的是 spi 模式來讀寫 sd 卡,下面我們就重點介紹一下 sd 卡在 spi 模式下的相關操作。 spi 模式下幾個重要的操作命令,如下表所示: 表 2.3 spi 模式下 sd 卡部分操作指令 其中 r1 的回應格式如下表所示: 表 2.4 sd 卡 r1 回

30、應格式 sd 卡的典型初始化過程如下: 1) 初始化與 sd 卡連接的硬件條件(mcu 的 spi 配置,i/o 口配置); 2) 上電延時(74 個 clk); 3) 復位卡(cmd0); 4) 激活卡,內部初始化并獲取卡類型(cmd1(用于 mmc 卡)、 cmd55、cmd41); 5) 查詢 ocr,獲取供電狀況(cmd58); 6) 是否使用 crc(cmd59); 7) 設置讀寫塊數(shù)據(jù)長度(cmd16); 8) 讀取 csd,獲取存儲卡的其他信息(cmd9); 9) 發(fā)送 8clk 后,禁止片選; 這樣我們就完成了對 sd 卡的初始化,這里面我們一般設置讀寫塊數(shù)據(jù)長度為 512 個

31、字節(jié),并禁止使用 crc。在完成了初始化之后,就可以開始讀寫數(shù)據(jù)了。 sd 卡讀取數(shù)據(jù),這里通過 cmd17 來實現(xiàn),具體過程如下: 1) 發(fā)送 cmd17; 2) 接收卡響應 r1; 3) 接收數(shù)據(jù)起始令牌 0xfe; 4) 接收數(shù)據(jù); 5) 接收 2 個字節(jié)的 crc,如果沒有開啟 crc,這兩個字節(jié)在讀取后可以丟掉; 6) 8clk 之后禁止片選; 以上就是一個典型的讀取 sd 卡數(shù)據(jù)過程,sd 卡的寫與讀數(shù)據(jù)差不多,寫數(shù)據(jù) 通過 cmd24 來實現(xiàn),具體過程如下: 1) 發(fā)送 cmd24; 2) 接收卡響應 r1; 3) 發(fā)送寫數(shù)據(jù)起始令牌 0xfe; 4) 發(fā)送數(shù)據(jù); 5) 發(fā)送 2

32、 字節(jié)的偽 crc; 6) 8clk 之后禁止片選; 第三章第三章 軟件介紹軟件介紹 3.13.1 安裝安裝 mdk3.8amdk3.8a 找到 mdk 的安裝文件并點擊安裝,點擊之后出現(xiàn)界面,選擇 next:選擇”i agreelicence agreement”同意協(xié)議,選擇安裝目錄,這里選擇安裝的目錄后,點 擊 next 即可,輸入郵箱之類的信息即可,點擊 next 開始安裝,按圖配置,然后點 擊 finish,左面會出現(xiàn) keil 快捷圖標。 圖 3-1 完成安裝 3.23.2 注冊注冊 licenselicense 在 mdk 針對每臺機會有一個 cid,copy 這個 cid 到注

33、冊機處生成 license key,然后再將這個 license key 添加到 mdk 里面去注冊。 右鍵點擊左面的 mdk 快捷方式,選擇“以管理員身份運行”。 點擊:file-license management,彈出一個 license management 界面,copy 界面 中的(cid): 圖 3-2 cid 打開目錄為 alientek 開發(fā)板資料軟件mdk3.80a注冊下的注冊機。 出現(xiàn)注冊界面,粘貼剛才 copy 的 cid 到 cid 一欄,然后 target 選擇 arm 圖 3-3 注冊機 選擇好之后點擊“generate”,下面的空白欄會生成一個 license

34、key,類似: d0dy8-30kak-0n8am-x9z14-a2nwp-j3lzz ,copy 這個 license. 將這個 license key 粘貼到 keil 的 license management 界面的 new license id code 一欄,然后點擊“add lic”,添加成功后會出現(xiàn)成功提示。然后點擊 close 關 閉這個界面即可。 圖 3-4 粘貼 license key 3.33.3 新建工程新建工程 回到 mdk 主界面,可以看到工程中有一個默認的工程,點擊這個工程名字, 然后選擇菜單 project-close project,就關閉掉這個工程了,這樣整

35、個 mdk 就是 一個空的了,接下來我們將建立我們的工程模版。 在建立工程之前,我們建議用戶在電腦的某個目錄下面建立一個文件夾,后面 所建立的工程都可以放在這個文件夾下面,這里我們建立一個文件夾為: stm32- projects. 點擊 keil 的菜單:project new uvision project ,然后將目錄定位到剛才建立 的文件夾 stm32-projecst 之下,在這個目錄下面建立子文件夾 tempalte,然后定位 到 template 目錄下面,我們的工程文件就都保存到 template 文件夾下面。工程命 名為 template,點擊保存。 接下來會出現(xiàn)一個選擇 d

36、evice 的界面,就是選擇我們的芯片型號,這里我們定 位到 stmicroelectronics 下面的 stm32f103rb。 圖 3-5 選擇芯片型號 彈出對話框“copy stm32 startup code to project .”,詢問是否添加啟動代碼 到我們的工程中,這里我們選擇“否”,因為我們使用的 st 固件庫文件已經包含了 啟動文件。 可以看到工程建立了,我們回到 template 目錄下面,可以看到只有三個文件: 圖 3-6 template 目錄下的文件 接下來,我們在 template 工程目錄下面,新建 3 個文件夾 core, user, stm32f10 x

37、_fwlib。user 用來放我們主函數(shù)文件 main.c,以及其他包括 system_stm32f10 x.c 等等,core 用來存放啟動文件等,stm32f10 x_fwlib 文件 夾顧名思義用來存放 st 官方提供的庫函數(shù)源碼文件。 圖 3-7 template 工程目錄下新建的文件 下面我們要將官方的固件庫包里的源碼文件復制到我們的工程目錄文件夾下面。 打開官方固件庫包,定位到我們之前準備好的固件庫包的目錄 stm32f10 x_stdperiph_lib_v3.5.0librariesstm32f10 x_stdperiph_driver 下面, 將目錄下面的 src,inc 文

38、件夾 copy 到我們剛才建立的 stm32f10 x_fwlib 文件 夾下面。 src 存放的是固件庫的.c 文件,inc 存放的是對應的.h 文件,您不妨打開這兩個 文件目錄過目一下里面的文件,每個外設對應一個.c 文件和一個.h 頭文件。 圖 3-8 stm32f10 x_stdperiph_driver 文件 下面我們要將固件庫包里面相關的啟動文件復制到我們的工程目錄 core 之下。 打開官方固件庫包,定位到目錄 stm32f10 x_stdperiph_lib_v3.5.0librariescmsiscm3coresupport 下面,將 文件 core_cm3.c 和文件 co

39、re_cm3.h 復制到 core 下面去。然后定位到目錄 stm32f10 x_stdperiph_lib_v3.5.0librariescmsiscm3devicesupportststm32f1 0 xstartuparm 下面,將里面所有的文件同樣復制到 core 下面。這里我們解釋一下, 其實我們只用到 arm 目錄下面的 startup_stm32f10 x_md.s 文件,這個文件是針對中 等容量芯片的啟動文件。其他兩個主要的為 startup_stm32f10 x_ld.s 為小容量, startup_stm32f10 x_hs.c 為大容量芯片的啟動文件。這里 copy 進來

40、是方便其他開發(fā)者 使用小容量或者大容量芯片的用戶。 現(xiàn)在看看我們的 core 文件夾下面的文件: 圖 3-9 core 文件夾內 定位到目錄: stm32f10 x_stdperiph_lib_v3.5.0librariescmsiscm3devicesupportststm 32f10 x 將里面的三個文件 stm32f10 x.h,system_stm32f10 x.c,system_stm32f10 x.h,復 制到我們的 user 目錄之下。然后將 stm32f10 x_stdperiph_lib_v3.5.0projectstm32f10 x_stdperiph_template 下

41、面 的 4 個文件 main.c,stm32f10 x_conf.h,stm32f10 x_it.c,stm32f10 x_it.h 復制到 user 目錄下面。 圖 3-10 user 文件夾內 前面 10 個步驟,我們將需要的固件庫相關文件復制到了我們的工程目錄下面,下 面我們將這些文件加入我們的工程中去。右鍵點擊 target1,選擇 manage components project targets 一欄,我們將 target 名字修改為 template,然后在 groups 一欄刪 掉一個,建立三個 groups:user,core,fwlib.點擊 ok.可以看到我們的 targ

42、et 名 字以及 groups 情況。 圖 3-11 target 名字以及 groups 情況 下面我們往 group 里面添加我們需要的文件。我們按照步驟 12 的方法, 右鍵 點擊點擊 tempate,選擇選擇 manage components.然后選擇需要添加文件的 group,這里第一步我們選擇 fwlib,然后點擊右邊的 add files,定位到我們剛才建 立的目錄 stm32f10 x_fwlib/src 下面,將里面所有的文件選中(ctrl+a),然后點擊 add,然后 close.可以看到 files 列表下面包含我們添加的文件。 圖 3-12 往 group 里面添加文

43、件 用同樣的方法,將 groups 定位到 core 和 user 下面,添加需要的文件。這 里 我們的 core 下面需要添加的文件為 core_cm3.c,startup_stm32f10 x_md.s,user 目錄下面需要添加的文件為 main.c,stm32f10 x_it.c,system_stm32f10 x.c. 這樣我們需要添加的文件已經添加到我們的工程中去了,最后點擊 ok,回到 工程主界面。 圖 3-13 groups 定位到 core 和 user 下 下面我們要告訴 mdk,在哪些路徑之下搜索相應的文件?;氐焦こ讨鞑藛?, 點擊魔術棒,出來一個菜單,然后點擊 c/c+選

44、項.然后點擊 include paths 右邊的按 鈕。 彈出一個添加 path 的對話框,然后我們將圖上面的 3 個目錄添加進去。記住, keil 只會在一級目錄查找,所以如果你的目錄下面還有子目錄,記得 path 一定要定 位到最后一級子目錄。然后點擊 ok. 接下來,我們再來編譯工程,可以看到又報了很多同樣的錯誤。為什么呢? 我們可以雙擊錯誤,然后會自動定位到文件 stm32f10 x.h 中出錯的地方,可以看到 代碼: #if !defined (stm32f10x_ld) int main(void) systeminit(); rcc_apb2periphclockcmd(rcc_

45、apb2periph_gpiod, enable); gpio_initstructure.gpio_pin = gpio_pin_0 | gpio_pin_2; gpio_initstructure.gpio_speed = gpio_speed_50mhz; gpio_initstructure.gpio_mode = gpio_mode_out_pp; gpio_init(gpiod, while (1) /* set pd0 and pd2 */ gpiod-bsrr = 0 x00000005; /* reset pd0 and pd2 */ gpiod-brr = 0 x00000

46、005; #ifdef use_full_assert void assert_failed(uint8_t* file, uint32_t line) while (1) #endif 這次編譯可以看出,已經成功了。這樣一個工程模版建立完畢。下面還需要配 置,讓編譯之后能夠生成 hex 文件。同樣點擊魔術棒,進入配置菜單,選擇 output。然后勾上下三個選項。其中 create hex file 是編譯生成 hex 文件,browser information 是可以查看變量和函數(shù)定義。 重新編譯代碼,可以看到生成了 hex 文件,這個文件我們用 mcuisp 下載到 mcu 即可。 圖

47、3-15 編譯結果 從上圖中可以看到,編譯器已經產生了 hex 文件了,然后我們打開 user 文件 夾,看看里面發(fā)生了什么變化?重新編譯產生了很多文件,其中就有我們所需要的 hex 文件(圖中紅圈圈中),至此,我們就可以開始下載了。 3.43.4 mcuispmcuisp 與與 sscomsscom 軟件軟件 用 mcuisp 軟件打開 user 文件夾,找到 test.hex,打開并進行相應設置后。 編程前重裝文件,該選項也比較有用,當選中該選項之后,mcuisp 會在每次編 程之前,將 hex 文件重新裝載一遍,這對于代碼調試的時候是比較有用的。 最后,我們選擇的 dtr 的低電平復位,

48、rts 高電平進 bootloader,這個選擇 項選中,mcuisp 就會通過 dtr 和 rts 信號來控制板載的一鍵下載功能電路,以實 現(xiàn)一鍵下載功能。如果不選擇,則無法實現(xiàn)一鍵下載功能。這個是必要的選項(在 boot0 接 gnd 的條件下)。 在裝載了 hex 文件之后,我們要下載代碼還需要選擇串口,這里 mcuisp 有智 能串口搜索功能。每次打開 mcuisp 軟件,軟件會自動去搜索當前電腦上可用的串 口,然后選中一個作為默認的串口。也可以通過點擊菜單欄的搜索串口,來實現(xiàn)自 動搜索當前可用串口。串口波特率則可以通過 bps 那里設置,對于 stm32,該波特 率最大為 23040

49、0bps,這里我們一般選擇最高的波特率:460800, 從之前 usb 串口的安裝可知,開發(fā)板的串口被識別為 com5 了,所以我選擇 com5。選擇了相應串口之后就可以通過按”開始編程(p)”這個按鈕,一鍵下載代 碼到 stm32 上,下載成功后如下圖所示: 圖 3-16 下載完成 上圖中,我用圈圈圈出了 mcuisp 對一鍵下載電路的控制過程,其實就是控制 dtr 和 rts 電平的變化,控制 boot0 和 reset,從而實現(xiàn)自動下載。另外界面 提示已經下載完成,并且從 0x80000000 處開始運行了,我打開串口調試助手選擇 com5,會發(fā)現(xiàn)從硬件板發(fā)回來的信息,如下圖所示: 圖

50、3-17 串口調試助手 sscom 第四章第四章 程序設計程序設計 4.14.1 整體描述整體描述 本設計實現(xiàn)了對 sd 卡里多幅圖片以幻燈片形式在 tft 屏上動態(tài)顯示的效果。 主要的三大部分為:sd 卡圖片文件讀取、圖像解碼與顯示、系統(tǒng)主程序。 4.24.2 各模塊描述各模塊描述 4.2.14.2.1 sdsd 卡圖片文件讀取卡圖片文件讀取 本次試驗讀取 sd 卡上的字庫以及 unicode 到 gbk 的轉換碼表到 w25x16 部分需要用到 fat 文件系統(tǒng)。 常用的文件系統(tǒng)有 fat12/16/32 等,fat12,現(xiàn)在基本淘汰了。fat16 則可以 管理 2g 的空間(通過特殊處理

51、也能管理 2g 以上的空間),而 fat32 則能管理到 2tb(2048gb)的空間。fat32 較 fat16 的優(yōu)勢還在于 fat32 采用了更小的簇, 可以更有效的保存信息,而不會造成較多的浪費。 win7 在格式化 sd 卡的時候建立的,通常 sd 卡上的數(shù)據(jù)信息由 mbr、dbr、fat、fdt 和數(shù)據(jù)區(qū) 5 個部分組成(有的也沒有 mbr)。我們以 fat32 為例做介紹。 mbr 稱為主引導記錄區(qū),該區(qū)存儲了分區(qū)表等信息,位于 sd 卡的扇區(qū) 0(物 理扇區(qū)),在其分區(qū)信息里面記錄了 dbr 所在的位置,sd 卡一般只會有一個分區(qū), 所以也就只要找到分區(qū) 1 的 dbr 所在位

52、置就可以了。 dbr 稱為操作系統(tǒng)引導記錄區(qū),如果沒有 mbr,那么 dbr 就位于 0 扇區(qū),如 果有則必須通過 mbr 區(qū)得到 dbr 所在的地址,然后讀出 dbr 信息。在 dbr 區(qū), 包含了每個扇區(qū)所占用的字節(jié)數(shù)、每個簇的扇區(qū)數(shù)、fat 表的份數(shù)、每個 fat 表 的扇區(qū)數(shù)、跟目錄簇號、fat 表 1 所在的扇區(qū)等一系列非常重要的信息。 fat 稱為文件分配表(fat 表),一般一個卡上會存在 2 個 fat 表,一個用 作備份,一個用作使用。fat 表一般緊隨 dbr,另一個 fat 表則緊隨第一個 fat 表,這樣只要知道了第一個 fat 表的位置及大小,那么第二個 fat 表的

53、位置也就 確定了。fat 表記錄了每個文件的位置和區(qū)域,是一種鏈式結構,fat 以“f8 ff ff 0f ff ff ff ff”這樣的 8 個字節(jié)為表頭,用以表示 fat 表的開始,后面的數(shù)據(jù) 每四個字節(jié)為一個簇項(從第 2 簇開始),用來標記下一個簇所在的位置,這樣每個 位置都存儲了下一個簇,只要按著這個表走,就可以找到文件的所有內容。最后一 個簇的標記是“ff ff ff 0f”,代表這個文件到此就結束。 fdt 稱為文件根目錄表,這個區(qū)域固定為 32 個扇區(qū),假設每個扇區(qū)為 512 個 字節(jié),那么更目錄下最多存放 512 個文件(假設都用短文件名存儲,每個短文件名 占 32 個字節(jié))

54、。文件目錄表是另一個重要的部分,fat 文件系統(tǒng)中(僅以短文件 名介紹),文件目錄項在目錄表下以 32 個字節(jié)的方式記錄,各字段定義如下: 表 4.1 文件目錄項各字節(jié)定義 從上表可知,我們在文件的目錄項就可以找到該文件的其實簇,然后在 fat 表里面找到該簇開始的下一個簇,依次讀取這些簇就可以把整個文件讀出來了。 4.2.24.2.2 圖像解碼與顯示圖像解碼與顯示 bmp 是一種與硬件設備無關的圖像文件格式,使用非常廣。它采用位映射存儲 格式,除了圖像深度可選以外,不采用其他任何壓縮,因此,bmp 文件所占用的空 間很大。bmp 文件的圖像深度可選 lbit、4bit、8bit 及 24bi

55、t。 bmp 文件存儲數(shù)據(jù)時,圖像的掃描方式是按從左到右、從下到上的順序。 典型的 bmp 圖像文件由三部分組成:位圖文件頭數(shù)據(jù)結構,它包含 bmp 圖像 文件的類型、顯示內容等信息;位圖信息數(shù)據(jù)結構,它包含有 bmp 圖像的寬、高、 壓縮方法,以及定義顏色等信息。 jpeg 是 joint photographic experts grou 的縮寫,是最常用的圖像文件格式。 其特點是用有損壓縮方式去除冗余的圖像數(shù)據(jù),在獲得極高的壓縮率的同時能展現(xiàn) 十分豐富生動的圖像。jpeg 具有調節(jié)圖像質量的功能,允許用不同的壓縮比例對 文件進行壓縮,支持多種壓縮級別,壓縮比率通常在 10:1 到 40:

56、1 之間,壓縮與 圖像品質成反比。 jpeg 格式壓縮的主要是高頻信息,對色彩的信息保留較好,適合應用于互聯(lián) 網,可減少圖像的傳輸時間,可以支持 24bit 真彩色,也普遍應用于需要連續(xù)色調 的圖像。 jpeg/jpg 的解碼過程可以簡單的概述為如下幾個部分: 1) 從文件頭讀出文件的相關信息。 jpeg 文件數(shù)據(jù)分為文件頭和圖像數(shù)據(jù)兩大部分,其中文件頭記錄了圖像的版 本、長寬、采樣因子、量化表、哈夫曼表等重要信息。 2) 從圖像數(shù)據(jù)流讀取一個最小編碼單元(mcu),并提取出里邊的各個顏色分量 單元。 3) 將顏色分量單元從數(shù)據(jù)流恢復成矩陣數(shù)據(jù)。 利用文件頭給出的哈夫曼表,對分割出來的顏色分量

57、單元進行解碼,把其恢復 成 88 的數(shù)據(jù)矩陣。 4) 88 的數(shù)據(jù)矩陣進一步解碼。 此部分解碼工作以 88 的數(shù)據(jù)矩陣為單位, 其中包括相鄰矩陣的直流系數(shù)差 分解碼、利用文件頭給出的量化表反量化數(shù)據(jù)、反 zig-zag 編碼、隔行正負糾正、 反向離散余弦變換等 5 個步驟,最終輸出仍然是一個 88 的數(shù)據(jù)矩陣。 5) 顏色系統(tǒng) ycrcb 向 rgb 轉換。 將一個 mcu 的各個顏色分量單元解碼結果整合起來,將圖像顏色系統(tǒng)從 ycrcb 向 rgb 轉換。 6) 排列整合各個 mcu 的解碼數(shù)據(jù)。 不斷讀取數(shù)據(jù)流中的 mcu 并對其解碼,將解碼后的數(shù)據(jù)正確排列成完整的圖 像直至讀完所有 mc

58、u 為止。 主要代碼: #include jpegbmp.h / /全局變量聲明,bmp 和 jpeg 共用 fileinfostruct *curfile;/當前解碼/操作的文件 /圖像信息 typedef struct u32 imgwidth; /圖像的實際寬度和高度 u32 imgheight; u32 div_fac; /縮放系數(shù) (擴大了 10000 倍的) u32 s_height; /設定的高度和寬度 u32 s_width; u32 s_xoff; /x 軸和 y 軸的偏移量 u32 s_yoff; u32 staticx; /當前顯示到的坐標 u32 staticy; pi

59、c_pos; pic_pos picinfo;/圖像位置信息 / void ai_drow_init(void); /智能畫圖,初始化.得到比例因子 picinfo.div_fac / /在 jpeg 函數(shù)里面用到的變量 shortsamprate_y_h,samprate_y_v; shortsamprate_u_h,samprate_u_v; shortsamprate_v_h,samprate_v_v; shorth_ytou,v_ytou,h_ytov,v_ytov; shorty_in_mcu,u_in_mcu,v_in_mcu; unsigned char *lp;/取代 lpjp

60、egbuf shortqt_table364; shortcomp_num; u8comp_index3; u8 ydcindex,yacindex,uvdcindex,uvacindex; u8huftabindex; short *yqttable,*uqttable,*vqttable; short code_pos_table416,code_len_table416; unsigned shortcode_value_table4256; unsigned shorthuf_max_value416,huf_min_value416; shortbitpos,curbyte;/byt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論