




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
..研究生課程試題**注:考題全部寫在框內,不要超出邊界。內容一律用黑色墨水書寫或計算機打印,以便復印。201/201學年第1學期考試課程嵌入式系統學號姓名得分一:固件及軟件描述題(20分)1.1、閱讀STM32啟動代碼,閱讀STM(10X)固件標準,描述其主要觀點。1.2、描述MDK軟件使用基本步驟。二:程序設計題(無操作系統)(20分)2.1、根據固件建立工程,以流水燈為例說明固件建立工程和程序設計的方法(可自行設計硬件并結合該硬件進行闡述)2.2、以按鍵中斷實現燈的閃爍為例,描述設計其實現原理和主要程序設計含流程圖。(可自行設計硬件并結合該硬件進行闡述)三.操作系統題(30分)3.1、闡述裸μc/osII操作系統的基本原理(10分)。3.2、如何在實現裸μc/osII系統的移植STM32(編譯系統選MDK)(10分)。3.3、在μc/osII系統中,中斷實現的基本原理,并以按鍵中斷實現燈的閃爍為例,闡述程序設計的基本方法。(需結合硬件)(10分)四.復雜工程題(30分)4.1電子相框(或XXX)設計,根據自己的想法,闡述你心目中電子相框(或XXX)的功能及技術指標,并完成如下工程。1)硬件電路設計(可以用PROTEL軟件繪制)2)軟件設計。一:固件及軟件描述題(20分)1.1、閱讀STM32啟動代碼,閱讀STM(10X)固件標準,描述其主要觀點。答:在嵌入式應用程序開發過程中,由于C語言編程,所以很少涉及到硬件底層寄存器的執行過程,一般都會直接在main函數里開始寫代碼,似乎main成了程序運行的起點。但是,當MCU上電后,怎么找到main函數往往被忽略了,這就是啟動代碼的作用,因為系統是無法直接從硬件找到main函數的入口地址的,啟動代碼是用來初始化電路以及用來為高級語言寫軟件作好運行前準備的一小段匯編語言,是任何處理器上電復位時的程序運行入口點。當剛上電的過程中,PC機會對系統的一個運行頻率進行鎖定在一個固定的值,這個設計頻率的過程就是在匯編源代碼中進行的,也就是在啟動代碼中進行的,也就是設置時鐘頻率。時鐘頻率設置好了后,程序就開始運行,注意,程序是在存中運行的。這個時候,就需要把一些源文件從flash里面copy到存中,又要對它們進行初始化讀寫,這又有頻率的設置。這些都是初始化。初始化完成后,我們又要設置一些堆棧,要跳到C語言的main函數里面運行。這就需要堆棧。對普通的ARMCPU有這樣一個要求:在絕對地址為零的地方要放置一個異常向量表,但并不是所有的ARMCPU都留有這個一個空間,這就需要用到映射的功能。我們可以將其它地方的一些空間映射到絕對地址里面。當發生異常時,ARM核來讀取異常中斷表的時候,它會使用映射之后的那個表,這個就可以接著往下執行,否則在絕對地址零的地方找不到任何信息,程序就會死掉。這些運行的環境全部建立好后,程序就會跳轉到我們的main函數里面??傊瑔哟a,就是對最小系統的初始化。包括晶振,CPU頻率,向量表等。STM32標準固件庫,是一個固件函數包,它由程序、數據結構和宏組成,包括了微控制器所有外設的性能特征。該函數庫還包括每一個外設的驅動描述和應用實例,為開發者訪問底層硬件提供了一個中間API,通過使用固件函數庫,無需深入掌握底層硬件細節,開發者就可以輕松應用每一個外設。每個外設驅動都由一組函數組成,這組函數覆蓋了該外設所有功能。STM32固件庫其實就是一個函數庫,它把程序模塊話,封裝起來了,開發者不需要寫具體的程序代碼,只需要調用即可。1.2、描述MDK軟件使用基本步驟。答:MDK軟件的使用主要包括兩個方面:MDK軟件的安裝及其操作。keil軟件的安裝。首先從www.embedinfo./下載到最新的keilMDK,下載完畢之后雙擊開始安裝,可以看到一個歡迎界面:點擊Next,勾選安裝協議,下一步,選擇安裝路徑,填寫用戶信息:點擊Next就進入實質的安裝過程了,然后等一會:很快安裝完畢,看到2個可選項:保存當前uVision的設置。載入以下選擇的工程實例,默認即可。點擊Next,來到最后一個安裝界面:點擊Finish,KeilMDK就完成安裝了。(2)操作。在剛才解壓“stm32f10x_fw_archivev2.0(May2009)”得到的文件夾里按照路徑\stm32f10x_fw_archivev2.0(May2009)\Archive,找到um0427.rar并將其解壓。在第1步解壓到的um0427文件夾里按路徑“\um0427\FWLib\project\RVMDK”找到文件:“cortexm3_macro.s”和“stm32f10x_vector.s”,并將其復制到前面所新建的“STM32_FW\boot”文件夾中。此二者為STM32在MDK環境下的啟動的文件,是每一個STM32工程所必需的。在“\um0427\FWLib\project”中找到文件:“stm32f10x_it”和“stm32f10x_it”,并將其復制到“STM32_FW\interrupt”中。此二者包含了STM32在MDK下的中斷服務入口函數。將“\um0427\FWLib\library”中的“inc”文件夾和“src”文件夾復制到“STM32_FW\library”中。此二文件夾為STM32的固件函數庫文件,一般情況下這兩個文件夾里的文件都不推薦改動,可以設置只讀屬性。最后請新建一個名字為“main.c”文件,放入“STM32_FW\src”中。執行完以上操作后,應該得到如下結構:STM32_FW\boot:“cortexm3_macro.s”和“stm32f10x_vector.s”文件;STM32_FW\interrupt:“stm32f10x_it”和“stm32f10x_it”文件;STM32_FW\src:“main.c”文件;STM32_FW\library:“inc”文件夾和“src”文件夾;
二:程序設計題(無操作系統)(20分)2.1、根據固件建立工程,以流水燈為例說明固件建立工程和程序設計的方法(可自行設計硬件并結合該硬件進行闡述)答:1,首先下載并解壓v3.5庫函數.2,先建一個文件夾取名LED,我們在LED文件夾里建立庫函數的工程。在LED文件夾下建立四個文件夾。3,將庫函數的里的文件STMv3.5\librarise\CMSIS\CM3\CoreSupport里的文件STMv3.5\librarise\CMSIS\CM3\DeviceSupport\ST\STM32F10x里的文件STMv3.5\librarise\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm里的文件放入文件夾startup文件夾里面。4,將庫函數librarise\STM32F10_StdPeriph_Driver里的兩個文件夾:復制到建立的lib文件夾里。5,在user文件夾里添加main.c文件,main.c文件里只寫有如下代碼即可:此外,將庫函數里的\Project\STM32F10x_StdPeriph_Template文件夾里的:也復制到新建的user文件夾里面6,Keil新建工程Ptoject\NewuVisionProject取名LED放在LED文件夾里面:選擇芯片型號:這里選擇STM32F103RB點擊OK后工程提示如下,選擇否(因為我們建立的是庫函數操作的工程,以上步驟中已經復制到文件夾里)。點擊出現設置如下:點擊TargetOptions,設置如下:其中和十分重要。最后將設置輸出的HEX文件到output文件夾:如下圖為最后設置完成的效果,編譯之后沒有問題:流水燈程序設計方法如下:首先我們來分析硬件電路,如下圖所示:其中PWR為系統電源指示燈,為藍色。LED0和LED1分別接在PB5和PE5上,為了方便判斷DS0為紅色的LED,DS1為綠色的LED。由部的LED連線可知,要想發光二極管亮,就必須送入低電平,送入高電平則發光二極管熄滅,鑒于此原理,得出流水燈的程序流程圖,如下所示:端口初始化端口初始化PB5送低電平PB5送低電平PB5送高電平PB5送高電平延時延時PE5送低電平PE5送低電平PE5送高電平PE5送高電平延時延時流水燈程序流程圖注:程序代碼見附件—LED流水燈程序2.2、以按鍵中斷實現燈的閃爍為例,描述設計其實現原理和主要程序設計含流程圖。(可自行設計硬件并結合該硬件進行闡述)答:在STM32中有中斷這一概念,所謂中斷,就是CPU正在工作時,突然來了一個優先級更高的中斷源,向CPU發出中斷請求,CPU暫時停止當前程序的執行轉而處理新情況的程序和執行過程。即在程序運行過程中,系統出現了一個必須由CPU立即處理的情況,此時CPU暫時中止程序的執行轉而處理這個新的情況的過程就叫做中斷。3個按鍵中斷,控制3個LED,當有按鍵按下時,觸發中斷,系統響應中斷,進入中斷服務子程序(控制LED燈),等處理完了之后系統又回到發生中斷之前系統正在進行的任務。首先編寫main函數,主函數里包括常規的系統時鐘配置、NIVC配置、GPIO配置、設置中斷觸發線、配置按鈕中斷觸發方式、RCC配置。然后編寫子函數。在NVIC子函數中需要分配中斷向量表,設置中斷優先級。程序設計流程圖如下圖所示:初始化初始化延時等待按鍵按下?N延時等待按鍵按下?中斷服務程序中斷服務程序LED亮滅LED亮滅注:程序代碼見附件—按鍵中斷三.操作系統題(30分)3.1、闡述裸μc/osII操作系統的基本原理(10分)。答:操作系統是裸機上的第一層軟件,它是計算機系統中最重要的系統軟件,是硬件的第一層封裝與抽象,在計算機系統中占據著重要的地位,所有其它系統的軟件與應用軟件都依賴于操作系統的支持與服務。除提供編程和接口外,操作系統還承擔著任務管理、事件管理、消息管理、CPU管理、存管理、I/O管理等核心功能。μC/OS-II是一種基于優先級的搶占式多任務實時操作系統,包含了實時核、任務管理、時間管理、任務間通信同步(信號量,,消息
隊列)和存管理等功能。它可以使各個任務獨立工作,互不干涉,很容易實現準時而且無誤執行,使實時應用程序的設計和擴展變得容易,使應用程序的設計過程大為減化。
μC/OS-II介紹
μC/OS-II是一個完整的、可移植、可固化、可裁剪的占先式實時多任務核。μC/OS-II絕大部分的代碼是用ANSI的C語言編寫的,包含一小部分匯編代碼,使之可供不同架構的微處理器使用。至今,從8位到64位,μC/OS-II已在超過40種不同架構上的微處理器上運行。μC/OS-II核結構
多任務系統中,核負責管理各個任務,或者說為每個任務分配CPU時間,并且負責任務之間的通訊。核提供的基本服務是任務切換。μC/OS-II可以管理多達64個任務。由于它的作者占用和保留了8個任務,所以留給用戶應用程序最多可有56個任務。賦予各個任務的優先級必須是不相同的。μC/OS-II為每個任務設置獨立的堆棧空間,可以快速實現任務切換。μC/OS-II近似地每時每刻總是讓優先級最高的就緒任務處于運行狀態,為了保證這一點,它在調用系統API函數、中斷結束、定時中斷結束時總是執行調度算法,μC/OS-II通過事先計算好數據簡化了運算量,通過精心設計就緒表結構使得延時可預知。3.2、如何在實現裸μc/osII系統的移植STM32(編譯系統選MDK)(10分)。答:下面以LED實驗為例,來說明如何在實現裸μc/osII系統的移植STM32。1,用Keil軟件打開LED工程,LED的工程文件如下所示:這是開發裸機單片機程序時寫的工程文件結構。2,搭建uc/osII工程文件結構。把LED工程所在的文件夾先改名為:STM32+UCOS+LED。在USER文件夾下新建includes.h頭文件。按照uc/osII文件結構圖,在工程的目錄下建立BSP文件夾、APP文件夾和uCOS-II文件夾。BSP文件夾存放外設硬件驅動程序APP文件夾存放應用軟件程序uCOS_II文件夾uc/osII的相關代碼把USER文件夾下的led.h和led.c文件剪切到BSP文件夾里。在BSP文件夾里新建BSP.c和BSP.h文件。在APP文件夾下建立app.c和app.h、app_cfg.h文件??截恥c/os-II附件里的····\Software\EvalBoards\ST\STM32F103RB\IAR\OS-Probe-LCD\os_cfg.h到此目錄。把uC/OS-II源代碼附件里的Software\uCOS-II下的Source文件夾復制到工程里剛才新建的uCOS-II文件夾里。把··\Software\uCOS-II\Ports\arm-cortex-m3\Generic\IAR下的文件復制到工程uCOS-II文件夾中新建的Ports文件夾里。復制后,選中全部文件,右鍵—屬性—去除只讀屬性—確定。打開工程文件,會發現提示錯誤,忽略它,直接點擊確定。出錯的原因是我們修改了led.c和led.h的路徑,所以需要手動刪除原來的led.c:建立BSP、APP和uCOS-II下兩個文件夾,一共四個文件夾的組并添加相應的文件夾:也要添加這四個文件件的編譯路徑:即includepath設置為:...\CMSIS;...\FWlib\inc;...\USER;...\APP;...\BSP;...\uCOS-II\Source至此,完成全部工程的設置,現在開始移植修改代碼。配置cu/os-IIi)我們需要對os_cfg.h做如下修改:首先禁用信號量、互斥信號量、、隊列、信號量集、定時器、存管理,關閉調試模式:其次,禁用多重事件控制:修改os_cpu.h將以上三個文件注釋掉即可。修改os_cpu_c.c把OS_CPU_SysTickHandler(),OS_CPU_SysTickInit()及注釋掉(前面加#if0,后面加#endif就能注釋掉)修改os_cpu_a.asm將下面的PUBIC改為EXPORT,即:改為:下面的這個也要改:改為:修改os_dbg.c將里面的一條語句:#defineOS_COMPLIER_OPT_root該為:#defineOS_COMPLIER_OPT//_root修改startup_stm32f10x_hd.s至此修改uc/os-II代碼就結束了,接下來就是編寫我們自己的代碼。編寫includes.h(保存全部頭文件的文件)編寫BSP:BSP.c文件代碼:BSP.h頭文件:編寫stm32f10x_it.c需要在stm32f10x_it.c添加SysTick中斷的處理代碼:voidSysTickHandler(void){OsintEnter();OStimeTick();OSIntExit();}9)創建任務編寫app_cfg.h用來設置任務的優先級和棧的大小編寫app.c這個是創建LED顯示任務編寫app.h頭文件編寫main()函數,這樣就移植成功了。3.3、在μc/osII系統中,中斷實現的基本原理,并以按鍵中斷實現燈的閃爍為例,闡述程序設計的基本方法。(需結合硬件)(10分)
答:1,首先,進行系統移植(1)以Keil為開發軟件,為uc/os-II操作系統建立一個目錄,將操作系統核代碼復制到一個目錄下,最好是該目錄的下一個子目錄。(2)在該目錄下創建工程。加入uc/os-II核文件到這個工程,搭建工程文件,詳細步參考題3.2.(3)配置μc/osII,修改部分代碼,如os_cfg.h、os_cpu.h、os_cpu_c.c、os_cpu_a.asm、os_dbg.c、startup_stm32f10x_hd.s等。2,分析并搭建硬件電路本實驗過三個按鍵按下控制三個LED燈的亮暗情況,通過KEY-UP控制蜂鳴器,由電路的連線可以看出,當按鍵按下后要使燈亮則必須送高電平,3,了解并熟悉STM32的每個I/O口都可以作為中斷輸入,要把I/O口作為外部中斷輸入,有以下幾個步驟:初始化I/O口為輸入。開啟I/O口復用時鐘,設置I/O口與中斷線的映射關系。STM32的I/O口與中斷線的對應關系需要配置外部中斷配置寄存器EXTICR,因此要先開啟復用時鐘,然后配置I/O口與中斷線的對應關系,才能把外部中斷與中斷線連接起來。開啟與該I/O口相對的線上中斷/事件,設置觸發條件,本實驗設置成下降沿觸發。設置中斷分組(NVIC)并使能中斷。對于STM32的中斷來說,只有配置了NVIC的設置并開啟才能被執行,否則不會執行到中斷服務函數中去。編寫中斷服務程序。即編寫有按鍵按下時LED燈就亮的中斷服務程序,一共有三個。4,編寫主函數。包括延時函數初始化、設置NVIC中斷分組2:兩位搶占優先級,兩位響應優先級、串口初始化、LED初始化、蜂鳴器端口初始化、按鍵連接初始化、外部中斷初始化、點亮LED、延時。5,編譯,下載到硬件運行,查看結果和進行修改,直到成功。
四.復雜工程題(30分)4.1電子相框(或XXX)設計,根據自己的想法,闡述你心目中電子相框(或XXX)的功能及技術指標,并完成如下工程。1)硬件電路設計(可以用PROTEL軟件繪制)2)軟件設計。答:1)見附件主程序設計:先對STM32及其外設進行初始化,再對界面進行初始化,接著根據功能選擇而分別進入幻燈片模式或時間模式。按鍵具體功能如下:按鍵KEY0:播放下一圖片;按鍵KEY1:播放上一圖片;按鍵KEY2:切換幻燈片模式與日期時間模式;按鍵RESET:系統復位。流程圖:程序:intmain(void){ u8key; //返回檢測按鍵值u8t=0; //此值用于是否進行RTC的秒更新判斷FileInfoStruct*FileInfo; u16pic_cnt=0;//當前目錄下圖片文件的個數u16index=0;//當前選擇的文件編號 u16time=0;//控制時間的變量 Stm32_Clock_Init(9);//系統時鐘設置delay_init(72); //延時初始化uart_init(72,9600);//串口1初始化 LCD_Init(); //初始化液晶 KEY_Init(); //按鍵初始化LED_Init();//LED初始化SPI_Flash_Init();//SPIFLASH使能RTC_Init(); //RTC初次可配置時間//EXTIX_Init(); //外部中斷初始化if(Font_Init())//字庫不存在,則更新字庫{ POINT_COLOR=RED; LCD_ShowString(60,50,"MiniSTM32"); LCD_ShowString(60,70,"FontERROR"); while(1); }POINT_COLOR=RED;Show_Str(60,50,"CDUT",16,0); Show_Str(40,70,"數碼相框",16,0);POINT_COLOR=DARKBLUE; Show_Str(70,90,"儀器儀表",16,0); Show_Str(90,110,"志強",16,0);Show_Str(60,130,"201611",16,0);Show_Str(50,150,"welcome",16,0);POINT_COLOR=RED;SD_Init();while(FAT_Init())//FAT錯誤{Show_Str(60,170,"文件系統錯誤!",16,0); if(SD_Init()){Show_Str(60,190,"SD卡初始化失敗!",16,0);//SD卡初始化失敗 Show_Str(60,210,"請檢查SD卡是否插入?",16,0);}delay_ms(500);LCD_Fill(60,170,240,230,WHITE);//清除顯示 delay_ms(500);LED0=!LED0; //紅燈DS0指示運行有誤 }while(SysInfoGet(1))//得到圖片文件夾{Show_Str(60,170,"圖片文件夾未找到!",16,0);Show_Str(0,190,"請在SD卡創建“PICTURE”文件夾!",16,0);delay_ms(500);FAT_Init();SD_Init();LED0=!LED0;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年老年教育需求增長與個性化輔導模式創新研究報告
- 新型電動車銷售合同
- 公司組織福利院策劃方案
- 公司日本旅游活動方案
- 公司新年福利拆箱活動方案
- 土地資源利用與生態環境改善合同
- 公司每年活動策劃方案
- 公司種菜活動方案
- 公司汽車展示互動活動方案
- 2025年西安教練員考試試題
- 《建黨偉業》觀后感課件
- 2025年安全生產月主題宣貫課件
- 2025-2030中國毛衣市場調研及重點企業投資評估規劃分析研究報告
- 涼山州屬國有企業專業技術人員及管理人員招聘筆試真題2024
- 數學建模思想在中小學數學課堂教學中的應用研究
- 2025年五級應急救援員資格理論考試題庫(含答案)
- 國家開放大學漢語言文學本科《古代小說戲曲專題》期末紙質考試第一大題選擇題庫2025春期版
- GB/T 45236-2025化工園區危險品運輸車輛停車場建設規范
- 深圳市勞動合同樣本大全
- GB/T 45144-2024道路車輛車輪和輪輞使用、維護和安全的一般要求及報廢條件
- 050011市政管理學(江蘇開放大學??破谀┰嚲恚?/a>
評論
0/150
提交評論