靈感範文站

位置:首頁 > 實用文 > 實用文精選

課程設計報告(精品多篇)

課程設計報告(精品多篇)

課程設計報告 篇一

一、設計目的

經過一系列硬件課程的學習及相關實驗後,做一個綜合的系統性的設計,對計算機硬件設計有一個整體的認識,可以進一步提高實踐動手能力。

二、所用設備

TDN-CM++實驗教學系統一臺,PC微機一臺, 排線若干

三、設計思想

1、確定搭建一臺8位模型機,指令系統系統有10條,涉及輸入,輸出,加,減,自增,自減,與,傳送,跳轉,停機等指令。

2、根據所要設計的指令,確定各種信息的傳送路徑,以及實現這些傳送所需的微指令。

3、根據數據通路,確定指令系統中每條指令的執行流程。

4、根據執行流程,確定好機器指令之後,確定相對應的微指令地址,需要多條微指令來完成的機器指令,要準確無誤的確定每條微指令的後續地址。 5.設計好指令後,將指令加載,檢測該指令是否可以達到預計功能。

四、設計總結

經過了三天的實踐學習,在老師的悉心指導和搭檔的默契配合下終於完成了硬件課程實驗,從中受益匪淺。

實驗首先要做的事情就是接線,對於已經做過微機實驗的我們,器件箱並不陌生,但也熟知連線的重要性,連每根線都必須十分細心,因爲每根都影響着整個設備的運行。於是,我跟我的搭檔分工合作,她讀圖我連線,爲了避免連錯,我每根線都以紅線爲起始位,保持規律性,這樣也方便出錯後檢查。在我倆默契的配合下,我們很快就完成了連線操作,後來測試時卻發現數據顯示一直不變,經過檢查才發現原來數據線少插了一根。還好就這麼一根問題,因爲很多同學在連線這塊就花費了大量的時間了,大大降低了效率,所以說小問題也不能忽視。

連線正確後,接下來就是編寫微指令了,由於對指令的格式不是很熟悉,所以在瞭解指令格式和工作流程上花費了些時間。編寫的指令有兩種,一個是操作碼,一個是微指令。操作碼格式比較簡單,相比而言微指令格式比較複雜,共24位,爲了便於理解,在編寫微指令的時候我都按各部分的含義將24位劃分成了幾個部分,也便於修改。在編寫指令的過程中,我發現雖然寫的指令都是平時最常用的基本指令,我們都很清楚每條指令的含義,但是把它們轉換成微指令還是比較複雜的。因爲有些指令雖然只有一句,但是卻包含好幾步微操作,我們必須對每條微操作的流程非常清楚才能寫出正確的微指令。

還有就是在編寫JMP指令的時候,理論要求我們在執行該指令後,能夠實現跳轉效果,但很多人都只是理解到這一步,並沒有去深思跳轉是從哪裏跳轉到哪裏,正如我們剛開始設計這一指令時一樣,僅是隨隨便便的在JMP指令所對應的微指令當中,將後繼位地址隨便改成了另一個微指令的地址,以爲已經實現了跳轉,後來發覺,這樣的跳轉不僅沒有任何實際意義,更重要的是在操作員使用這一指令的時候,本意應該是想指定下一步將要執行的指令,作用可能是控制循環,也可能是跳轉分支,總之是需要自己去設定的一個目的機器指令,而絕不是隨意的指定了一條微指令。後來在老師的指導下,我們在操作碼中又添加了一條語句,實現了跳轉到固定位置,而不會再由機器隨機選取目的地址跳轉了。

通過這次的實驗,我更加地清楚了微指令的操作流程和編寫,加強了自己的動手能力,對硬件實驗有了一定的瞭解,相信這次實驗對今後的學習也會有一定的幫助。

課程設計報告 篇二

"微機原理與系統設計" 作爲電子信息類本科生教學的主要基礎課之一,課程緊密結合電子信息類的專業特點,圍繞微型計算機原理和應用主題,以Intelx86CPU爲主線,系統介紹微型計算機的基本知識,基本組成,體系結構和工作模式,從而使學生能較清楚地瞭解微機的結構與工作流程,建立起系統的概念。

這次微機原理課程設計歷時兩個星期,在整整兩星期的日子裏,可以說得是苦多於甜,但是可以學到很多很多的的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。以前在上課的時候,老師經常強調在寫一個程序的時候,一定要事先把程序原理方框圖化出來,但是我開始總覺得這樣做沒必要,很浪費時間。但是,這次課程設計完全改變了我以前的那種錯誤的認識,以前我接觸的那些程序都是很短、很基礎的,但是在課程設計中碰到的那些需要很多代碼才能完成的任務,畫程序方框圖是很有必要的。因爲通過程序方框圖,在做設計的過程中,我們每一步要做什麼,每一步要完成什麼任務都有一個很清楚的思路,而且在程序測試的過程中也有利於查錯。

其次,以前對於編程工具的使用還處於一知半解的狀態上,但是經過一段上機的實踐,對於怎麼去排錯、查錯,怎麼去看每一步的運行結果,怎麼去了解每個寄存器的內容以確保程序的正確性上都有了很大程度的提高。

通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正爲社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發現了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固。

這次課程設計終於順利完成了,在設計中遇到了很多編程問題,最後在趙老師的辛勤指導下,終於遊逆而解。同時,在趙老師的身上我學得到很多實用的知識,在次我表示感謝!同時,對給過我幫助的所有同學和各位指導老師再次表示忠心的感謝!

課程設計報告 篇三

Cortex-M3 是 ARM 公司基於 ARM V7 架構的新型芯片內核。 STM32V100-II 型是英蓓特 公司新推出的一款基於 ST 意法半導體 STM32 系列處理器(Cortex-M3 內核)的全功能 評估板。STM103V100-II 評估板有 USB,Motor Control,CAN,SD 卡,Smart 卡, UART,Speaker,LCD,LED,BNC,耳塞插孔等豐富的外設,有助於用戶輕鬆開發 STM32 的強大功能。STM32 系列使用了 ARM 最新的、先進架構 Cortex-M3 內核,本文論述 了在 Keil Realview 開發環境上開發基於彙編語言的 LED 控制程序, 基於對 STM32 的 GPIO 寄存器寫值配置思想, 控制 EduKit-M3 實驗平臺的發光二極管 LED1、LED2、LED3、LED4, 使它們有規律地點亮。

一、設計概述

1.1、設計需求

Keil Realview 開發環境上,全部採用彙編語言編程,實現對 EduKit-M3 實驗平臺的發 光二極管 LED1、LED2、LED3、LED4 的亮滅控制,使它們有規律地點亮。 這裏採用例程提供的順序點亮方式,按照 LED1 亮 LED2 亮 LED3 亮 LED4 亮,如此反覆,要求每個 LED 亮滅之間延時一段時間,以增強可觀性。需要說明的是,這 僅僅作爲程序控制 LED 的一種控制方式,基於點亮 LED 的控制原理,可以編程實現各種顯 示 LED 的亮滅模式,並提供一種通用的控制方法,要求程序可讀性強,易於修改。

1.2、設計原理

(1)STM32 通用 GPIO 端口概述 STM32F10x 處理器上共有 7 個 I/O 端口:A、B、C、D、E、F、G,每個 16 個管腳 每組端口(寄存器必須以 32 位字形式訪問) 每組端口有以下寄存器: , 32 位配置寄存器: GPIOx_CRL、GPIOx_CRH 32 爲數據寄存器: GPIOx_IDR、GPIOx_ODR 32 位置位/復位寄存器: GPIOx_BSRR 16 位復位寄存器: GPIOx_BRR 32 爲鎖定寄存器: GPIOx_LCKR I/O 口通用輸入、輸出端口配置爲輸入時,每個 APB2 時鐘週期將端口數據送輸入寄存 器(GPIOx_IDR),在輸入模式下,輸出是斷開的。輸出模式時:寫到輸出寄存器(GPIOx_ODR) 的值被傳給對應的 I/O 引腳。在輸出模式下,輸入是允許的 (2)程序設計原理 EduKit-M3 實驗平臺上,通過寫值配置端口數據輸出寄存器 GPIOC_ODR[15:0]值,可 以實現對四個 LED 的亮滅控制, 因爲 C 口[9:6]位和四個 LED 燈連通。 而這裏主要是通過對 時鐘控制寄存器以及端口 C 的各配置寄存器和輸出寄存器寫值, 以達到配置端口, 控制 LED 的目的。 彙編語言與 C 語言相比,要求更加貼近硬件,瞭解 M3 內核的內部結構和寄存器地址。 基於彙編語言的編程控制, 只需要找出需要配置的端口基地址, 然後弄清楚各寄存器的偏移 地址,以及各寄存器每位的含義,按照要求寫 1 或寫 0 即可。

2

二、硬件設計:

2.1 硬件電路

2.2 硬件電路描述

本設計是基於 EduKit-M3 實驗平臺的嵌入式開發實例, EduKit-M3 實驗平臺有四個 LED 燈,分別爲 LED1、LED2、LED3、LED4,對應的連接到 I/O 的 C 口 PC.6、PC.7、PC.8、PC.9 四位輸出位上,不需要外擴電路或者額外接線,簡單易行。

三、軟件設計

3.1 程 序 流 程 圖

3.2 軟 件 設 計 描 述

(1)整個工程包含 3 個源文件:STM32F10x.s、和 my led.s,stm32f10x_lib.c 其中3STM32F10x.s 爲啓動代碼, 。啓動代碼作用是:1)堆和棧的初始化;2)向量表定義;3)地 址重映射及中斷向量表的轉移;4)設置系統時鐘頻率;5)中斷寄存器的初始化;6)進入 彙編主程序。my led.s 是彙編主程序,完成所有控制功能。

(2)程序工作原理概述: 對於 LED 的控制,主要通過對 I/O 端口的配置,將對應的寄存器相應的位寫 1 寫 0 控 制。程序首先要經過啓動代碼段進行相關的啓動配置,然後跳轉到彙編主程序。 彙編主程序完成了時鐘、端口配置以及 LED 點亮的所有功能。首先需要對於系統時鐘進 行配置,已獲得系統所用頻率。 然後進行端口配置低、高寄存器配置,獲得輸入輸出模式以及最大速度。將時鐘和端口 配置完成後,就可以對輸出寄存器進行對應位的寫值控制了,從而達到控制 LED 的目的,高 電平點亮,低電平熄滅。 點亮 LED 後,轉入延時子程序,延時子程序寫值 0X000FFFFF,做寄存器值減法,減到 0 後,過程所需時間即是延時時間,即單個 LED 點亮時間。本程序設置循環點亮模式,即 LED1 到 LED4 順序循環點亮,將對應位逐次寫 1,如果需要修改點亮模式,只需修改寄存器的值以 及寫值順序即可。

(3)寄存器配置描述 端口配置低寄存器(GPIOC_CRL) C口基地址:0X40011000 偏移地址:0x00 復位值:0x44444444 寄存器配置:0X22222222 功能含義: 口配置低寄存器爲模擬輸入模式, 端 通用推輓輸出模式, 輸出模式, 最大速? 2MHz

端口配置高寄存器(GPIOC_CRH) C口基地址:0X40011000 偏移地址:0x04 復位值:0x44444444 寄存器配置:0X22222222 功能含義: 口配置高寄存器爲模擬輸入模式, 端 通用推輓輸出模式, 輸出模式, 最大速? 2MHz 端口輸出數據寄存器(GPIOC_ODR) C口基地址:0X40011000 地址偏移:0Ch 寄存器配置 0xfffffc4f 0xfffffc8f 復位值:00000000h 功能含義 PC.6 位寫 1,對應點亮 LED1 PC.7 位寫 1,對應點亮 LED2

40xfffffd0f 0xfffffe0fPC.8 位寫 1,對應點亮 LED3 PC.9 位寫 1,對應點亮 LED4

時鐘控制寄存器(RCC_CR) 復位和時鐘基地址:0X40021000 偏移地址: 0x00 復位值: 0x000 XX83 寄存器配置:0X00000003 功能含義:PLL 未鎖定,PLL 關閉,時鐘監測器關閉,外部 1-25MHz 振盪器沒有旁?,外部 1-25MHz 時鐘沒有就緒,HSE 振盪器關閉內部 8MHz 時鐘就緒,內部 8MHz 時鐘開啓。 時鐘配置寄存器(RCC_CFGR) 復位和時鐘基地址:0X40021000 偏移地址: 0x04 復位值: 0x0000 0000 寄存器配置:0X00000000 功能含義:沒有時鐘輸出,PLL 時鐘 1.5 倍分頻作爲 USB 時鐘,PLL 2 倍頻輸出,HSE 不分 頻,HSI 時鐘 2 分頻後作爲 PLL 輸入時鐘,PCLK2 2 分頻後作爲 ADC 時鐘,HCLK 不分頻, HCLK 不分頻,SYSCLK 不分頻,HSI 作爲系統時鐘,HSI 作爲系統時鐘。 AHB外設時鐘使能寄存器 (RCC_AHBENR) 復位和時鐘基地址:0X40021000 偏移地址:0x14 復位值:0x0000 0014 寄存器配置:0X00000014 功能含義:睡眠模式時閃存接口電路時鐘開啓,睡眠模式時 SRAM 時鐘開啓,DMA 時鐘關 閉 APB2 外設時鐘使能寄存器(RCC_APB2ENR) 復位和時鐘基地址:0X40021000 偏移地址:0x18 復位值:0x0000 0000 寄存器配置:0XFFFFFFFF 功能含義:USART1 時鐘開啓,SPI1 時鐘開啓,TIM1 時鐘開啓,ADC2 時鐘開啓,ADC1 時鐘開啓,IO 口 E 時鐘開啓,IO 口 D 時鐘開啓,IO 口 C 時鐘開啓,IO 口 B 時鐘開啓,IO 口 A 時鐘開啓,輔助功能 IO 時鐘開啓

3.2 主 要 程 序 說 明

(1)啓動代碼轉入彙編主程序的設置: 【啓動代碼段設置: 】 Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT MAIN ;聲明外部函數,導入符號 LDR R0, =MAIN ;等待工作調用 BX R0 ;跳轉到彙編主程序 MAIN 函數 ENDP ;過程段結束 【彙編主程序設置: 】 AREA MYCODE,CODE,READONLY ;定義一個代碼段,屬性爲只讀 EXPORT MAIN MAIN PROC (主程序功能段開始) EndP END (2)彙編主程序 ;配置時鐘

5LDR R1,=0X40021000 LDR R0,=0X00000003 STR R0,[R1,#0X00] LDR R0,=0X00000000 STR R0,[R1,#0X004] LDR R0,=0X00000014 STR R0,[R1,#0X14]

時鐘控制寄存器入口

配置時鐘控制寄存器(RCC_CR)

配置時鐘配置寄存器(RCC_CFGR)

配置 AHB 外設時鐘使能寄存器 RCC_AHBENR

LDR R0,=0XFFFFFFFF STR R0,[R1,#0X18] ;配置 APB2 外設時鐘使能寄存器(RCC_APB2ENR) ;----------------------------------------------------------------------------------------------------;配置端口 MOVS R0,#0X22222222 LDR R1,=0X40011000 STR R0,[R1,#0X00] ;配置端口配置寄存器 GPIOC_CRL MOVS R0,#0X22222222 LDR R1,=0X40011000 STR R0,[R1,#0X04] ;配置端口配置寄存器 GPIOC_CRH ;---------------------------------------------------------------------------------------------------;點 亮 LED LDR R0,=0xfffffc4f STR R0,[R1,#0X0C] ;將 0xfffffc4f 寫進 GIPOC_ODR, 點亮 LED1 BL DELAY ;延時 --------------------------------------------------------------------------------------------------------LDR R0,=0xfffffc8f STR R0,[R1,#0X0C] ;將 0xfffffc8f 寫進 GIPOC_ODR, 點亮 LED2 BL DELAY ;延時 -------------------------------------------------------------------------------------------------------LDR R0,=0xfffffd0f STR R0,[R1,#0X0C] ;將 0xfffffd0f 寫進 GIPOC_ODR, 點亮 LED3 BL DELAY ;延時 -------------------------------------------------------------------------------------------------------LDR R0,=0xfffffe0f STR R0,[R1,#0X0C] ;0xfffffe0f 寫進 GIPOC_ODR, 點亮 LED4 BL DELAY ;延時 -------------------------------------------------------------------------------------------------------B MAIN ;跳到 MAIN 函數 ;------------------------------------------------------------------------(2)延時子程序 DELAY

6LDR R3,=0X000FFFFF ;延時控制字 DELAY_1 SUBS R3,R3,#0X01 ;延時控制字自減 BEQ DELAY_OUT ;爲 0 跳出返回 B DELAY_1 ;不爲 0 迴轉繼續做減法 DELAY_OUT BX LR ;程序返回

四、調試與結果

4.1 調 試 過 程

(1) 使用 Keil uVision3 通過 ULINK 2 仿真器連接 EduKit-M3 實驗平臺,打開建立的 my led controler 工程,點擊子目錄下的 my led.s 文件,編譯鏈接工程。 設置 Flash——Debug, 選擇 Cortex-M3 J-LINK, Flash——Utilities, 同樣選擇 Cortex-M3 J-LINK,效果如下

點擊編譯鏈接,生成 HEX 文件

點擊 Load,下載源程序到 STM32,運行程序 (2) 選擇軟件調試模式,點擊 MDK 的 Debug 菜單,選擇 Start/Stop Debug Session 項或 Ctrl+F5 鍵。

7在邏輯分析儀中添加 GPIOC_ODR.6、GPIOC_ODR.7、GPIOC_ODR.8、GPIOC_ODR.9, 點擊 Run 按鈕即可在邏輯分析儀中看波形。

4.2 測 試

本程序由於大量的涉及到原理簡單,測試方便,只需要單步運行,查看寄存器的值,就 可以測試程序的正確性。

(1) 程序開始時各寄存器的值

(2)將時鐘控制寄存器入口基地址賦值給 R1

(3)R1 既已經被賦值了時鐘控制寄存器入口地址,利用偏移地址將時鐘各控制寄存器的地 址賦值給(R1+偏移量) 達到配置 RCC_CR、RCC_CFGR、RCC_AHBENR、RCC_APB2ENR 的目的, , 集體寄存器值變化如下:

8(4)端口配置情況測試:I/O C 口入口地址寫進通用寄存器 R1,利用基地址加偏移地址找 到端口配置寄存器 GPIOC_CRL、GPIOC_CRH,然後將控制字 0X22222222 寫進該寄存器。

(5)端口輸出數據寄存器(GPIOx_ODR) 的值的變化,直接反映了外部 LED 的亮滅變化, 採用逐位寫 1 的方式,實現循環點亮,此時通用 R1 已經被寫進了 C 口的入口基地址,只需 加上偏移地址#0X0C,便是 GPIOx_ODR 的地址,每次寫值控制 LED 點亮後,程序跳轉到延 時子程序,所測試結果如下: 【將 0xfffffc4f 寫進 GIPOC_ODR 點亮 LED1】 【延時子程序運行寄存器變化情況】

當轉入延時子程序後,寄存器 R3 值做減 1 算法,從 0X000FFFFF 循環減至 0,是爲延時 時間,然後繼續跳轉至端口輸出寄存器配置,點亮 LED2,接着再次跳轉到延時子程序,R39再次做減 1 運算,如此控制 LED 循環點亮。 【轉入延時子程序】

【退出延時子程序對 LED2 對應位寫 1 況】

4.3 結 果 及 描 述

(1)邏輯分析儀中波形:

GPIOC_ODR.6、GPIOC_ODR.7、GPIOC_ODR.8、GPIOC_ODR.9 的波形即對應的 LED1、LED2、LED3、LED4 高低電平波形,由此可以驗證程序的正確性,即 LED 確實按照程序的 思想循環順序點亮。

(2)當將程序下載到 STM32 中後,EduKit-M3 實驗平臺上四個 LED 確實循環點亮,進一 步驗證控制程序的正確性。

五、總結

本設計是基於 STM32 的彙編語言編寫的 LED 循環順序點亮控制程序,原理簡單易行, 程序可修改性和可讀性強, 件電路也很簡單, 需要外擴電路, 接利用試驗檯內部接線, 硬 不 直 通過對 GPIO 的控制來相應地點亮 LED 燈。 整個控制程序只需要找到相應的時鐘、端口、輸出寄存器的地址,以及各控制寄存器的 偏移地址,直接尋址寫值控制,這是與 C 語言程序最大的不同點,即彙編編程更加的貼近硬 件,要求熟悉內部寄存器的地址,熟悉如何配置各位,這就要求對寄存器每位的含義非常清 楚。 通過用匯編語言編寫 I/O 控制程序, 進一步熟悉瞭解了 STM32 GPIO 操作, 以及 CORTEX M3 的內部架構和優點,學會了如何使用 KEIL Realview 開發 STM32,以及如何進行程序單 步調試,寄存器值查看。瞭解了 EduKit-M3 實驗平臺內部結構和優良的功能。