第一篇:ARM與嵌入式實驗報告
ARM與嵌入式技術
實驗報告
專業班級:通信工程
姓名:**** 學號:******
實驗日期:2012年6月7日 指導老師:*****
一、實驗目的
1.學習使用Embest IDE開發環境及ARM 軟件模擬器;
2.掌握簡單ARM 匯編指令,進一步加強對嵌入式的熟悉和了解。
二、實驗設備
硬件:PC 機
軟件:Embest IDE 開發環境
三、實驗內容
例3:實現64位加法運算,要求【R1:R0】+【R3:R2】,結果放回【R1:R0】中; 例2:編寫程序將R2的高8位傳送到R3的低8位(不考慮R3的其它位); 例7:編寫一段程序計算10?。?/p>
例8:串拷貝(R1指向源數據串的首地址,R0指向目的數據串的首地址)。
四、實驗步驟
1)新建工程:
運行Embest IDE 集成開發環境,選擇菜單項File → New Workspace,如圖一,系統彈出一個對話框,鍵入文件名“沈”,如圖二,點擊OK 按鈕。將創建一個新工程,并同時創建一個與工程名相同的工作區。此時在工作區窗口將打開該工作區和工程.。
2)建立源文件:
點擊菜單項File → New,如圖三,系統彈出一個新的文本編輯窗,輸入源文件代碼。編輯完后,保存文件“沈.s”后綴,如圖四。
3)添加源文件:
選擇菜單項Project → Add To Project → Files,在工程目錄下選擇剛才建立的源文件.s后綴文件,如圖五,圖六。
4)基本配置:
選擇菜單項Project → Settings,彈出工程設置對話框。在工程設置對話框中。① 選擇Processor 設置對話框,按照圖七所示,進行配置:
圖七
② 選擇Remote設置對話框,按照下圖八所示,進行配置:
圖八 ③ 選擇最右邊一個進行編譯,顯示如圖九,則編譯成功。
圖九
④ 選擇Project → Settings → Debug設置對話框,按照圖十所示,進行配置:
圖十 ⑤
選擇
5)選擇菜單項Debug →Remote Connect 進行連接軟件仿真器,將存儲器地址改為0x1000,如圖十一,執行Debug →Download 命令下載程序,并打開寄存器窗口。打開memory 窗口,按F10進行單步跟蹤,觀察寄存器的數據變化并分析。最右邊一個進行編譯,顯示如圖九,則編譯成功。
圖十一
五、各實驗的參考程序及運行結果
實驗一:(例3)實現64位加法運算,要求【R1:R0】+【R3:R2】,結果放回【R1:R0】中; 1.程序代碼如下:
.global _start
.text _start:
mov R0,#11
/*R0=11*/ mov R1,#22
/*R1=22*/ mov R2,#33
/*R2=33*/ mov R3,#44
/*R3=44*/ ADDS R0,R0,R2
/*R0等于低32位相加,并影響標志位*/
ADC R1,R1,R3
/*R1等于高32位相加,并加上低位進位*/ stop:
b stop.end
2.分析調試:
①download下載:
② 讀入數據:
③ r0+r2→r0(低32位):
④ r1+r3→r1(帶進位的加法):
實驗二:(例2)編寫程序將R2高8位傳送到R3的低8位(不考慮R3的其它位);
1.程序代碼如下:
.global _start _start: ldr r2,=0x23453401 ldr r3,=0xabcd1200 and r2,r2,#0xff000000 /*保留R2的高8位,屏蔽低24位*/ and r3,r3,#0xffffff00 /*保留R3的高24位,屏蔽低8位*/
orr r3,r3,r2,lsr #24
/*將R2的高8位傳送到R3的低8位*/ stop:
b stop.end
2.分析調試:
①download下載:
②保留r2的高8位,屏蔽低24位:
③保留r3的高24位,屏蔽低8位:
④將R2的高8位傳送到R3的低8位:
實驗三:(例7)編寫一段程序計算10!
1.程序代碼如下:
.global _start.text.equ num,10 _start: mov r0,#num mov r1,r0 s1: subs r1,r1,#1
/*把r1-1放入r1*/ mul r0,r1,r0
/*r0*r1放入r0*/ cmp r1,#1
/*比較R1與1的大小*/ beq stop
bne s1 stop: b stop.end
2.分析調試:
① download下載:
② 第一次執行S1,r1=10-1=9,10*9=90,換成16進制是5a。
③ 第二次執行S1,r1=9-1=8,10*9*8=720,換成16進制是2d0。
④ 依次執行S1,到r1=1,停止,10*9*8??*1=3628800,換成16進制是375f00。
實驗四:(例8)串拷貝(R1指向源數據串首地址,R0指向目的數據串的首地址)。1.程序代碼如下:.global _start.text.EQU NUM,8 _start:
LDR R0,=srcstr
/*指向源數據串R0*/
LDR R1,=dststr
/*指向目標數據串R1*/
mov R3,#NUM
/*R3=8*/
mov LR,PC
/*返回*/
B strcopy
/*調用串拷貝子程序*/ stop: b stop
strcopy:
LDRB R2,[R0],#1
/*裝載字節同時更新地址*/
STRB R2,[R1],#1
/*存儲字節同時更新地址*/
SUBS R3,R3,#1
CMP R3,#0
/*判斷是否結束*/
BNE strcopy
/*不是,則繼續*/
MOV PC,LR
/*返回*/.data
srcstr:.long 1,2,3,4,5,6,7,0
/*定義源數據串*/
dststr:.long 5,3,2,1,4,6,8,0
/*定義目的字符串*/
2.分析調試:
①單步跟蹤后的結果及存儲器的結果顯示:
②寄存器的結果顯示:
六、實驗心得
今天在實驗室里,學習使用Embest IDE開發環境及ARM 軟件模擬器,掌握簡單ARM 匯編指令,進一步加強了對嵌入式的熟悉和了解。鄭老師在兢兢業業的向我們傳授實踐知識的同時也向我們提問相關理論問題,讓我們在學習的過程加深對實踐和理論兩者之間的聯系,知道每一個步驟的發生的原因及產生相應的結果,即對實驗的來龍去脈有了更清楚的認識,為今后的學習打下了一定的基礎。相信在接下來的實驗中,我們會在鄭老師的引導下,做起實驗來更能得心應手,輕車熟駕!
第二篇:嵌入式系統ARM實驗報告
南京郵電大學通信與信息工程學院
實驗報告
實驗名稱:實驗一基于ADS開發環境的設計
實驗二嵌入式Linux交叉開發環境的建立 實驗三嵌入式Linux環境下的程序設計
課程名稱嵌入式系統B
班級學號B13010711 姓名馬俊民
開課時間 2015/2016學年第1學期
實驗一基于ADS開發環境的程序設計
一、實驗目的
1、學習ADS開發環境的使用;
2、學習和掌握ADS環境下的匯編語言及C語言程序設計;
3、學習和掌握匯編語言及C語言的混合編程方法。
二、實驗內容
1、編寫和調試匯編語言程序;
2、編寫和調試C語言程序;
3、編寫和調試匯編語言及C語言的混合程序;
4、編寫程序測試多寄存器傳送指令的用法。
三、實驗原理
ADS全稱為ARM Developer Suite,是ARM公司推出的新一代ARM集成開發工具?,F在常用的ADS版本是ADS1.2,它取代了早期的ADS1.1和ADS1.0。
ADS用于無操作系統的ARM系統開發,是對裸機(可理解成一個高級單片機)的開發。ADS具有極佳的測試環境和良好的偵錯功能,它可使硬件開發工作者更深入地從底層去理解ARM處理器的工作原理和操作方法,為日后自行設計打基礎,為BootLoader的編寫和調試打基礎。
1.ADS軟件的組成
ADS由命令行開發工具、ARM運行時庫、GUI開發環境(CodeWarrior和AXD)、實用程序、支持軟件等組成。
2.GUI開發環境
ADS GUI開發環境包含CodeWarrior和AXD兩種,其中Code Warrior是集成開發工具,而AXD是調試工具。
使用匯編語言進行編程簡單、方便,適用于初始化硬件代碼、啟動代碼等。匯編語言具有一些相同的基本特征:
1.一條指令一行。
2.使用標號(label)給內存單元提供名稱,從第一列開始書寫。3.指令必須從第二列或能區分標號的地方開始書寫。4.注釋必須跟在指定的注釋字符后面,一直書寫到行尾。
在ARM匯編程序中,每個段必須以AREA作為段的開始,以碰到下一個AREA作為該段的結束,段名必須唯一。程序的開始和結束需以ENTRY和END來標識。嵌入式C語言設計是利用基本的C語言知識,面向嵌入式工程實際應用進行程序設計。為了使單獨編譯的C語言程序和匯編程序之間能夠相互調用,必須為子程序之間的調用規定一定的規則。ATPCS就是ARM程序和Thumb程序中子程序調用的基本規則。
四、實驗過程與關鍵代碼分析
1.創建項目工程
在File菜單中選擇New命令,打開一個新建工程對話框。在Project選項卡下,選擇ARM Executable Image, 然后在Project name文本框里輸入項目名稱,點擊確定。彈出工程窗口。
選擇File菜單中的New命令,選擇File標簽頁,在File name文本框中輸入要創建的文件名。匯編程序以.s結尾,c程序以.c結尾。在Location文本框中指定文件的存放位置,選中Add to Project,在Targets中選中DebugRel,單擊確定關閉窗口。
2.用匯編語言設計程序實現10的階乘
AREA EXAMPLE, CODE, READONLY ENTRY start MOV R0, #10 MOV R1, #1 LOOP MUL R0, R0, R1 SUB R0, R0, 1 CMP R0, #1 BHI LOOP END 在這個程序中,我們首先對R0和R1賦值,將R0作為一個變量,而R1作為一個存貯階乘值的寄存器。在每進行一次乘法之后,將R0減1。同時在做完減法后進行判斷,如果此時R0大于1,則返回繼續乘法,否則結束程序,輸出結果。
3.用調用子程序的方法實現1!+2!+3!+?+10!,代碼如下: asmp.s
AREA JC, CODE, READONLY
EXPORT JCP
ENTRY JCP
ADD R3, R0, #1
MOV R2, #1
MOV R1, #1 LOOP MUL R0, R1, R2
MOV R1, R0
ADD R2, R2, #1
CMP R2, R3
BNE LOOP
NOP
NOP
MOV PC, LR
END
PROGC.c #include
int main(){ int res=0;int m=10;int i;for(i=1;i<=m;i++)
res=res+JCP(i);printf(“The result =%dn”,res);return 0;} 在這個程序中,主程序由c語言完成作求和,子程序由匯編語言寫成作階乘。
5.實現字符串的逆序復制TEXT1=“HELLO”=>TEXT2=“OLLEH”
AREA invstring, CODE, READONLY start
ADR R1,TEXT1
ADR R2,TEXT2
MOV R3, #0 LOOP
LDRB R0,[R1], #1
ADD R3,R3,#1
CMP R0,#0
BNE LOOP
SUB R1,R1,#2
LOOP1
LDRB R0,[R1], #-1
STRB R0,[R2], #1
SUB R3,R3, #1
CMP R3,#1
BNE LOOP1
MOV R5,#&55
TEXT1
TEXT2 NOP =“HELLO”,0 ALIGN =“OELLH” END
五、實驗小結
在這次實驗中,學會了如何使用匯編程序進行編程。對匯編程序編程一些基本的要求有了一定的了解,學習了C語言的語法和在其中調用匯編程序的方法。學會了利用CodeWarrior IDE開發C和ARM匯編代碼。學會了在AXD中進行代碼調試的方法和過程,對AXD的調試有初步的了解。,實驗二嵌入式Linux交叉開發環境的建立
一、實驗目的
1、掌握嵌入式Linux交叉開發環境的建立方法
2、學習和掌握Linux常用命令
3、學習和掌握vi編輯器的使用
二、實驗內容
1、搭建嵌入式Linux交叉開發環境
2、熟悉Linux的常用命令
3、熟悉vi編輯器的常用命令
三、實驗原理
Linux系統是UNIX系統的分支,是UNIX的微機版。Linux具有異常豐富的驅動程序資源,支持各種主流的硬件設備與技術。Linux包含了現代的UNIX操作系統的所有功能特性,這些功能包括多任務、虛擬內存、虛擬文件系統、進程間通信、對稱所處理器、多用戶支持等。
Vi編輯器是所有UNIX和Linux下的標準編輯器。它包含3種工作模式。嵌入式系統是專用的計算機系統,它對系統的功能、可靠性、成本、體積、功耗等有嚴格的要求。大部分嵌入式系統沒有大容量存儲設備,一般不能安裝大型開發軟件,系統的開發需要采用交叉開發模式。
四、實驗過程與關鍵代碼分析
實驗用的是UP-NetARM2410-S試驗箱,里面配有三星的芯片S3c2410X。打開電腦上VMWare軟件,在Windows系統下啟動虛擬機里的Linux系統。接著需要
1.宿主機的環境搭建
下載并運行VMWare,根據向導創建一臺新虛擬機并選擇Linux作為客戶操作系統,再根據向導安裝RedHat Linux 9.0。
2.虛擬機中啟動Linux操作系統
使用root登陸,用戶名為root,密碼為123456。之后對共享文件設置進行調整:打開settings界面,打開shared folders功能,同時將路徑設置到有課前下載的軟件的目錄下。
3.開發工具軟件的安裝(1)安裝gcc 打開Linux后,打開終端窗口,在共享的目錄下找到install.sh并運行,命令如下: ls./ install.sh 安裝程序將自動建立/arm2410s目錄,并將所有的開發軟件包安裝到/arm2410s 目錄下,同時自動配置編譯環境,建立合適的符號鏈接。安裝完成后在目錄/opt/host/armv4l/bin/下應該能看到主編譯器。(2)配置PATH路徑
vi.bash.profile 將里面PATH變量改為PATH=$PATH:$HOME/bin:/opt/host/armv41/bin/;存盤后執行
source.bash_profile 以后armv4l-unknown-linux-gcc將被自動搜索到
4.宿主機上的開發環境配置(1)配置IP地址
ifconfig eth0 192.168.0.121 命令配置了宿主機的IP地址。然后打開網絡配置窗口,重新探測MAC地址。重新激活。(2)關閉防火墻
單擊“Red”菜單→“系統設置”→“安全級別”→打開“安全級別配置”窗口,選擇“無防火墻選項?!保?)配置NFS。
單擊“Red”菜單→“系統設置”→“服務器設置”→“服務”,在“服務配置”窗口中勾選nfs,單擊“開始”(4)NFS設置
單擊“Red”菜單→“系統設置”→“服務器設置”→“NFS服務器”,打開“NFS服務器配置”窗口,設置NFS共享。
然后在NFS服務器中增加主機IP地址的鏈接許可和目錄。完成配置。
5.目標機的信息輸出
Windows系統下,“開始”→“所有程序”→“附件”→“通訊”→“超級終端”,新建一個通信終端。區號、電話號碼隨意輸入。設置每秒位數為“115200”,數據位為“8”,無奇偶校驗,停止位為“1”,無數據流控制。單擊“確定”。
6.程序的運行
打開超級終端,啟動Linux,屏幕顯示:
[/mnt/yaffs] 在超級終端上執行掛載命令:
[/mnt] mount –t nfs 192.168.0.121:/arm2410s /mnt/nfs 掛載成功后可執行程序。
五、實驗小結
在這次實驗中,學會建立Linux交叉開發環境,學會了ls和vi,cd等常用的Linux命令,并掌握了Vi編輯器的使用方法。同時知道了如何在搭建失敗時尋找錯誤進行排錯。
實驗三嵌入式Linux環境下的程序設計
一、實驗目的
1、掌握嵌入式Linux環境下的程序設計方法
2、學會編寫Makefile文件
二、實驗內容
1、熟悉嵌入式教學實驗箱的使用
2、編寫C程序和Makefile文件
3、編譯程序產生可執行程序
4、完成主機的掛載和程序的執行
三、實驗原理
在嵌入式Linux環境下的程序設計方法有一下幾個步驟:
1.編寫源程序
2.編寫Makefile文件 3.編譯程序
4.運行和調試程序
5.將生產的可執行文件加入文件系統。
前三個步驟在宿主機上完成,后面的步驟在目標機上完成。
四、實驗過程與關鍵代碼分析
1.建立工作目錄
mkdir hello cd hello
2.編寫源程序
用vi編輯器編輯Hello.c文件
vi Hello.c 在Vi中輸入源程序如下:
#include
printf(“hello world n”);}
3.編寫Makefile文件
vi Makefile 在vi中編輯Makefile文件如下:
CC= armv4l-unknown-linux-gcc EXEC = hello OBJS = hello.o CFLAGS += LDFLAGS+=-static all: $(EXEC)$(EXEC):(OBJS)$(CC)$(LDFLAGS)–o $@ $(OBJS)clean:
-rm –f $(EXEC)*.elf *.gdb *.o
4.編譯程序
在hello目錄下運行“make”來編譯程序。
make clean
make 編譯成功后,生成可執行文件Hello.o。
5.下載調試
在宿主機上啟動nfs服務,并將/arms2410s設置為共享目錄。接下來啟動超級終端,建立通訊,掛載。
[/mnt] mount –t nfs 192.168.0.121:/arm2410s /mnt/nfs 掛載成功后,進入/mnt/nfs,再進入/mnt/nfs/hello,直接運行剛剛編譯生成的可執行文件Hello.o,查看運行結果
cd hello./hello 可以看見“Hello world”
只需要掛載一次便可,只要實驗箱沒有重啟,就可以一直保持連接。反復修改、編譯、調試,直至程序調試通過。
6.可執行文件加入文件系統
程序調試通過后,可以把可執行文件拖放到usr/bin目錄下,然后使用mkcramfs制作工具生成新的文件系統。當系統啟動后,就可以在相應目錄下執行可執行程序hello.五、實驗小結 在這次實驗中,學會了在嵌入式Linux環境下設計程序。同時知道了如何對目標機進行掛載。以及如何在發現掛載不成功尋找錯誤進行修改。另外在編譯文件時需要注意的也都有所了解。
實驗四多線程程序設計
一、實驗目的1、2、二、實驗內容1、2、3、4、三、實驗原理
四、實驗過程與關鍵代碼分析
五、實驗小結
3+
第三篇:嵌入式ARM鍵盤控制LED燈實驗報告
實驗六 鍵盤控制LED燈實驗 實驗目的
(1)通過實驗掌握中斷式鍵盤控制與設計方法;(2)熟練編寫S3C2410中斷服務程序。實驗設備
(1)S3C2410嵌入式開發板,JTAG仿真器。
(2)軟件:PC機操作系統Windows XP,ADS1.2集成開發環境,仿真器驅動程序,超級終端通訊程序。實驗內容
編寫中斷處理程序,處理一個鍵盤中斷,并在串口打印中斷及按鍵顯示信息。實驗步驟
(1)參照模板工程,新建一個工程keypad,添加相應的文件,并修改keypad的工程設置;
(2)創建keypad.c并加入到工程keypad中;(3)編寫鍵盤中斷程序; 參考代碼如下: ①串口初始化程序
void uart_init()/* UART串口初始化 */ {
} GPHCON |= 0xa0;GPHUP = 0x0;ULCON0
//GPH2,GPH3 used as TXD0,RXD0
//GPH2,GPH3內部上拉
//8N1
= 0x03;UCON0 = 0x05;UFCON0 = 0x00;
//查詢方式為輪詢或中斷;時鐘選擇為PCLK
//不使用FIFO //不使用流控 UMCON0 = 0x00;UBRDIV0 = 26;
//波特率為57600,PCLK=12Mhz ②發送數據
while(!(UTRSTAT0 & TXD0READY));UTXH0 = c;③接收數據
while(!(UTRSTAT0 & RXD0READY));return URXH0;④打印數據
int i = 0;
while(str[i]){ } return i;putc((unsigned char)str[i++]);⑤按鍵初始化
int key_init()/* 按鍵初始化 */ {
} ⑥中斷初始化
void irq_init()/* 中斷初始化 */ {
}(5)編譯keypad;
(6)運行超級終端,選擇正確的串口號,并將串口設置位:波特率(115200)、奇偶校驗(None)、數據位數(8)和停止位數(1),無流控,打開串口; INTMSK &= ~(3<<2);printk(“中斷初始化OKrn”);GPFCON = 0x55aa;GPFUP = 0xff;
printk(“按鍵初始化OKrn”);return 0;(7)運行程序,在超級終端中輸入的數據將回顯到超級終端上,結果如圖5.4所示:
圖6.1 初始化運行結果
圖6.2 main運行結果 實驗總結
通過這次實驗我鞏固了上次實驗的串口的使用方法,串口初始化、發送數據和接收數據,同時也熟悉了中斷的處理過程,即保護現場、中斷處理、恢復現場并返回。
在實驗時花費了很多的時間都沒有按照老師的要求將代碼修改好,主要是因為對代碼的不熟悉和不能很好的靈活運用,最后對老師修改的代碼仔細的看了,其實很簡單。
第四篇:實習總結-嵌入式ARM
實訓總結
班級 卓越1301姓名***
通過這段時間的學習使我學到了很多知識,并且了解到ARM的應用以及對開發板的應用,為以后的學習奠定了一定的基礎。
嵌入式系統一般定義為以應用為中心、以計算機技術為基礎,軟硬件可裁剪,應用系統對功能、可靠性、成本、體積、功耗和應用環境有特殊要求的專用計算機系統。是將應用程序、操作系統和計算機硬件集成在一起的系統這是從技術角度。從系統角度上是設計完成復雜功能的硬件和軟件,并使其緊密耦合在一起的計算機系統。
廣義上講,凡是帶有微處理器的專用軟硬件系統都可稱為嵌入式系統。如各類單片機和DSP系統。這些系統在完成較為單一的專業功能時具有簡潔高效的特點。但由于他們沒有操作系統,管理系統硬件核軟件的能力有限,在實現復雜多任務功能時,往往困難重重,甚至無法實現。從狹義上講,我們更加強調那些使用嵌入式微處理器構成獨立系統,具有自己操作系統,具有特定功能,用于特定場合的嵌入式系統。
嵌入式的應用也比較廣泛涉及軍事國防、工業控制、消費電子和網絡。在家用方面更是數字電視、信息家電、智能玩具、手持通訊、存儲設備的核心。
在ARM指令集中了解到ARM的尋址方式以及它的的特性,具有高效、快速的特點,還有Thumb指令集具有靈活、小巧的特點。
在這次實訓中做了兩個項目,一個是LED燈,實現LED燈的點亮是比較簡單的,通過查找手冊可以很快的了解到要使用的寄存器和方法,另一個項目是DS18B20這個比較復雜,除了要掌握對寄存器的使用,還要對了解對串口的初始化,讀寫字節等等。
感謝這次實訓,通過這次的實訓項目,使我大體了解制作項目的步驟,了解了嵌入式技術的掌握是需要一個過程的。實事求是的說,嵌入式技術的全面掌握是有相當難度的,通過積累和動手總會有收獲的,從實驗中也明白了一個大的項目并不是一個人可以完成的,團隊協作很重要。
姓名:***
年級:卓越1301
2014-7-5
第五篇:嵌入式實驗報告
目錄
實驗一 跑馬燈實驗.........................................................................1 實驗二 按鍵輸入實驗.....................................................................3 實驗三 串口實驗.............................................................................5 實驗四 外部中斷實驗.....................................................................8 實驗五 獨立看門狗實驗................................................................11 實驗七 定時器中斷實驗................................................................13 實驗十三 ADC實驗........................................................................15 實驗十五 DMA實驗........................................................................17 實驗十六 I2C實驗........................................................................21 實驗十七 SPI實驗........................................................................24 實驗二十一 紅外遙控實驗............................................................27 實驗二十二 DS18B20實驗.............................................................30
實驗一 跑馬燈實驗
一.實驗簡介
我的第一個實驗,跑馬燈實驗。
二.實驗目的
掌握STM32開發環境,掌握從無到有的構建工程。
三.實驗內容
熟悉MDK KEIL開發環境,構建基于固件庫的工程,編寫代碼實現跑馬燈工程。通過ISP下載代碼到實驗板,查看運行結果。使用JLINK下載代碼到目標板,查看運行結果,使用JLINK在線調試。
四.實驗設備
硬件部分:PC計算機(宿主機)、亮點STM32實驗板、JLINK。軟件部分:PC機WINDOWS系統、MDK KEIL軟件、ISP軟件。
五.實驗步驟
1.熟悉MDK KEIL開發環境 2.熟悉串口編程軟件ISP 3.查看固件庫結構和文件
4.建立工程目錄,復制庫文件 5.建立和配置工程 6.編寫代碼 7.編譯代碼
8.使用ISP下載到實驗板 9.測試運行結果
10.使用JLINK下載到實驗板 11.單步調試
12.記錄實驗過程,撰寫實驗報告
六.實驗結果及測試
源代碼:
兩個燈LED0與LED1實現交替閃爍的類跑馬燈效果,每300ms閃爍一次。
七.實驗總結
通過本次次實驗我了解了STM32開發板的基本使用,初次接觸這個開發板和MDK KEILC軟件,對軟件操作不太了解,通過這次實驗了解并熟練地使用MDK KEIL軟件,用這個軟件來編程和完成一些功能的實現。作為 STM32 的入門第一個例子,詳細介紹了STM32 的IO口操作,同時鞏固了前面的學習,并進一步介紹了MDK的軟件仿真功能。
實驗二 按鍵輸入實驗
一.實驗簡介
在實驗一的基礎上,使用按鍵控制流水燈速度,及使用按鍵控制流水燈流水方向。
二.實驗目的
熟練使用庫函數操作GPIO,掌握中斷配置和中斷服務程序編寫方法,掌握通過全局變量在中斷服務程序和主程序間通信的方法。
三.實驗內容
實現初始化GPIO,并配置中斷,在中斷服務程序中通過修改全局變量,達到控制流水燈速度及方向。
使用JLINK下載代碼到目標板,查看運行結果,使用JLINK在線調試。
四.實驗設備
硬件部分:PC計算機(宿主機)、亮點STM32實驗板、JLINK、示波器。軟件部分:PC機WINDOWS系統、MDK KEIL軟件、ISP軟件。
五.實驗步驟
1在實驗1代碼的基礎上,編寫中斷初始化代碼
2在主程序中聲明全局變量,用于和中斷服務程序通信,編寫完成主程序 3編寫中斷服務程序
4編譯代碼,使用JLINK下載到實驗板 5.單步調試
6記錄實驗過程,撰寫實驗報告
六.實驗結果及測試
源代碼:
我們將通過MiniSTM32 板上載有的3個按鈕,來控制板上的2個LED,其中KEY0控制LED0,按一次亮,再按一次,就滅。KEY1 控制LED1,效果同KEY0。KEY_2(KEY_UP),同時控制LED0 和LED1,按一次,他們的狀態就翻轉一次。
七.實驗總結
通過本次實驗,我學會了如何使用STM32 的IO 口作為輸入用。TM32 的IO 口做輸入使用的時候,是通過讀取IDR 的內容來讀取IO 口的狀態的。這里需要注意的是 KEY0 和KEY1 是低電平有效的,而WK_UP 是高電平有效的,而且要確認WK_UP 按鈕與DS18B20 的連接是否已經斷開,要先斷開,否則DS18B20 會干擾WK_UP按鍵!并且KEY0 和KEY1 連接在與JTAG 相關的IO 口上,所以在軟件編寫的時候要先禁用JTAG 功能,才能把這兩個IO 口當成普通IO 口使用。
實驗三 串口實驗
一.實驗簡介
編寫代碼實現串口發送和接收,將通過串口發送來的數據回送回去。
二.實驗目的
掌握STM32基本串口編程,進一步學習中斷處理。
三.實驗內容
編寫主程序,初始化串口1,設置波特率為9600,無校驗,數據位8位,停止位1位。編寫中斷服務程序代碼實現將發送過來的數據回送。
四.實驗設備
硬件部分:PC計算機(宿主機)、亮點STM32實驗板、JLINK、示波器。
軟件部分:PC機WINDOWS系統、MDK KEIL軟件、ISP軟件、串口調試助手。
五.實驗步驟
1編寫串口初始化代碼
2編寫中斷服務程序代碼
3編譯代碼,使用JLINK或ISP下載到實驗板 4記錄實驗過程,撰寫實驗報告
六.實驗結果及測試
源代碼:
把代碼下載到 MiniSTM32 開發板,可以看到板子上的LED0 開始閃爍,說明程序已經在跑了。接著我們打開串口調試助手,看到如下信息:
證明串口數據發送沒問題。接著,我們在發送區輸入上面的文字,輸入完后按回車鍵。然后單擊發送,可以得到如下結果:
七.實驗總結
通過本次實驗,我進一步了解了串口的使用,學會了通過串口發送和接收數據,將通過串口發送來的數據回送回去。該實驗的硬件配置不同于前兩個實驗,串口 1 與USB 串口默認是分開的,并沒有在PCB上連接在一起,需要通過跳線帽來連接一下。這里我們把P4 的RXD 和TXD 用跳線帽與P3 的PA9 和PA10 連接起來。
實驗四 外部中斷實驗
一.實驗簡介
STM32 的 IO 口在本章第一節有詳細介紹,而外部中斷在第二章也有詳細的闡述。這里我們將介紹如何將這兩者結合起來,實現外部中斷輸入。
二.實驗目的
進一步掌握串口編程,進一步學習外部中斷編程,提高編程能力。
三.實驗內容
初始化IO口的輸入,開啟復用時鐘,設置IO與中斷的映射關系,從而開啟與IO口相對應的線上中斷事件,設置觸發條件。配置中斷分組(NVIC),并使能中斷,編寫中斷服務函數。
四.實驗設備
硬件部分:PC計算機(宿主機)、亮點STM32實驗板、JLINK、示波器。
軟件部分:PC機WINDOWS系統、MDK KEIL軟件、ISP軟件、串口調試助手。
五.實驗步驟
1.2.3.4.編寫中斷服務程序代碼 使用ISP下載到實驗板 測試運行結果
記錄實驗過程,撰寫實驗報告
六.實驗結果及測試
源代碼:
打開串口助手。
七.實驗總結
首先需要將IO設置為中斷輸入口: 1)初始化 IO 口為輸入。
2)開啟 IO 口復用時鐘,設置 IO 口與中斷線的映射關系。
3)開啟與該 IO口相對的線上中斷/事件,設置觸發條件。
4)配置中斷分組(NVIC),并使能中斷。
5)編寫中斷服務函數。
這一節,使用的是中斷來檢測按鍵,通過 WK_UP 按鍵實現按一次 LED0 和 LED 1 同時翻轉,按 KEY0 翻轉 LED0,按 KEY1 翻轉 LED1。
試驗中外部中斷函數不能進入的原因分析 : 1)GPIO或者AFIO的時鐘沒有開啟。2)GPIO和配置的中斷線路不匹配。3)中斷觸發方式和實際不相符合。
4)中斷處理函數用庫函數時,寫錯,經常可能出現數字和字母之間沒有下劃線。5)外部中斷是沿觸發,有可能不能檢測到沿,比如 中斷線是低電平(浮空輸入),觸發是下降沿觸發,可能會出現一直是低電平,高電平的時候是一樣的情況,電平持續為高電平。
6)沒有用軟件中斷來觸發外部中斷,調用函數EXTI_GenerateSWInterrupt;,因為軟件中斷先于邊沿中斷處理。
實驗五 獨立看門狗實驗
一. 實驗簡介
獨立看門狗(IWDG)由專用的低速時鐘(LSI)驅動,即使主時鐘發生故障它也仍然有效。窗口看門狗由從APB1時鐘分頻后得到的時鐘驅動,通過可配置的時間窗口來檢測應用程序非正常的過遲或過早的操作。
二.實驗目的
通過編程,編寫一個獨立看門狗驅動程序
三.實驗內容
啟動 STM32 的獨立看門狗,從而使能看門狗,在程序里面必須間隔一定時間喂狗,否則將導致程序復位。利用這一點,我們本章將通過一個 LED 燈來指示程序是否重啟,來驗證 STM32 的獨立看門狗。
四.實驗設備
硬件部分:PC計算機(宿主機)、亮點STM32實驗板、JLINK。
軟件部分:PC機WINDOWS系統、MDK KEIL軟件、ISP軟件、串口調試助手。
五.實驗步驟
1.2.3.4.參考教材獨立看門狗部分,編寫獨立看門狗驅動程序。建立和配置工程 編寫代碼
使用ISP下載到實驗板
記錄實驗過程,撰寫實驗報告
六.實驗結果及測試
源代碼:
在配置看門狗后,看到LED0 不停的閃爍,如果WK_UP 按鍵按下,就喂狗,只要WK_UP 不停的按,看門狗就一直不會產生復位,保持LED0 的常亮,一旦超過看門狗定溢出時間(Tout)還沒按,那么將會導致程序重啟,這將導致LED0 熄滅一次。
七.實驗總結
通過本次實驗,我掌握了啟動獨立看門狗的步驟: 1)向 IWDG_KR 寫入 0X5555。2)向 IWDG_KR 寫入 0XAAAA。3)向 IWDG_KR 寫入 0XCCCC。
通過上面 3個步驟,啟動 STM32 的看門狗,從而使能看門狗,在程序里面就必須間隔一定時間喂狗,否則將導致程序復位。利用這一點,本章通過一個LED 燈來指示程序是否重啟,來驗證 STM32 的獨立看門狗。在配置看門狗后,LED0 將常亮,如果 WK_UP 按鍵按下,就喂狗,只要 WK_UP 不停的按,看門狗就一直不會產生復位,保持 LED 0 的常亮,一旦超過看門狗溢出時間(Tout)還沒按,那么將會導致程序重啟,這將導致 LED 0 熄滅一次。
實驗七 定時器中斷實驗
一. 實驗簡介
STM32 的定時器是一個通過可編程預分頻器(PSC)驅動的 16 位自動裝載計數器(CNT)構成。STM32 的通用定時器可以被用于:測量輸入信號的脈沖長度(輸入捕獲)或者產生輸出波形(輸出比較和 PWM)等。使用定時器預分頻器和 RCC 時鐘控制器預分頻器,脈沖長度和波形周期可以在幾微秒到幾毫秒間調整。STM32 的每個通用定時器都是完全獨立的,沒有互相共享的任何資源。
二.實驗目的
熟練掌握定時器中斷,學會對定時器中斷的編程操作。
三.實驗內容
使用定時器產生中斷,然后在中斷服務函數里面翻轉 LED1 上的電平,來指示定時器中斷的產生,修改中斷時間。
四.實驗設備
硬件部分:PC計算機(宿主機)、亮點STM32實驗板、JLINK。
軟件部分:PC機WINDOWS系統、MDK KEIL軟件、ISP軟件、串口調試助手。
五.實驗步驟
1.參考教材定時器中斷部分,編寫定時器中斷的驅動程序。2.編寫主程序
3.編譯代碼,使用JLINK或ISP下載到實驗板 4.記錄實驗過程,撰寫實驗報告
六.實驗結果及測試
源代碼:
七.實驗總結
通過本次實驗,認識到時間中斷來控制LED燈的閃爍,同時也可以將時間中斷應用到控制其他的程序塊。
以TIME3為例產生中斷的步驟為 1)TIM3 時鐘使能。
2)設置 TIM3_ARR 和 TIM3_PSC 的值。
3)設置 TIM3_DIER 允許更新中斷。
4)允許 TIM3 工作。
5)TIM3 中斷分組設置。6)編寫中斷服務函數。
在中斷產生后,通過狀態寄存器的值來判斷此次產生的中斷屬于什么類型。然后執行相關的操作,我們這里使用的是更新(溢出)中斷,所以在狀態寄存器 SR 的最低位。在處理完中斷之后應該向 TIM3_SR 的最低位寫 0,來清除該中斷標志。
實驗十三 ADC實驗
一.實驗簡介
通過DAC將STM32系統的數字量轉換為模擬量。使用ADC將模擬量轉換為數字量。
二.實驗目的
掌握DAC和ADC編程。
三.實驗內容
編寫代碼實現簡單的DAC單次發送
編寫代碼實現ADC采集DAC發送的數據,并發送到串口
四.實驗設備
硬件部分:PC計算機(宿主機)、亮點STM32實驗板、JLINK。
軟件部分:PC機WINDOWS系統、MDK KEIL軟件、ISP軟件、串口調試助手。
五.實驗步驟
1編寫主程序
2編譯代碼,使用JLINK或ISP下載到實驗板,使用串口調試助手觀察數據 3記錄實驗過程,撰寫實驗報告
六.實驗結果及測試
源代碼:
七.實驗總結
本節將利用 STM32的 ADC1 通道 0 來采樣外部電壓值,并在串口調試助手中顯示出來。步驟如下:
1)開啟 PA 口時鐘,設置 PA0 為模擬輸入。
2)使能 ADC1 時鐘,并設置分頻因子。
3)設置 ADC1 的工作模式。
4)設置 ADC1 規則序列的相關信息。
5)開啟 AD 轉換器,并校準。
6)讀取 ADC 值。
在上面的校準完成之后,ADC 就算準備好了。接下來我們要做的就是設置規則序列 0 里面的通道,然后啟動 ADC 轉換。在轉換結束后,讀取 ADC1_DR 里面的值。
通過以上幾個步驟的設置,可以正常的使用 STM32 的 ADC1 來執行 AD 轉換操作。
通過本次實驗的學習,我們了解了STM32 ADC的使用,但這僅僅是STM32強大的ADC 功能的一小點應用。STM32 的ADC 在很多地方都可以用到,其ADC 的DMA 功能是很不錯的,實驗十五 DMA實驗
一. 實驗簡介
直接存儲器存取(DMA)用來提供在外設和存儲器之間或者存儲器和存儲器之間的高速數據傳輸。無須CPU干預,數據可以通過DMA快速地移動,這就節省了CPU的資源來做其他操作。
二.實驗目的
熟練掌握DMA編程,學會對EPC02的讀寫操作,學習雙緩沖兵乓操作,理解互斥資源。提高編程能力。
三.實驗內容
利用外部按鍵KEY0 來控制DMA 的傳送,每按一次KEY0,DMA 就傳送一次數據
到USART1,然后在串口調試助手觀察進度等信息。LED0 還是用來做為程序運行的指示燈。
這里我們使用到的硬件資源如下: 1)按鍵KEY0。2)指示燈LED0。
3)使用串口調試助手觀察數據
四.實驗設備
硬件部分:PC計算機(宿主機)、亮點STM32實驗板、JLINK。
軟件部分:PC機WINDOWS系統、MDK KEIL軟件、ISP軟件、網絡調試助手。
五.實驗步驟
1編寫主程序
2編譯代碼,使用JLINK或ISP下載到實驗板,使用串口調試助手觀察數據 3記錄實驗過程,撰寫實驗報告
六.實驗結果及測試
源代碼:
伴隨 LED0 的不停閃爍,提示程序在運行。我們打開串口調試助手,然后按KEY0,可以看到串口顯示如下內容:
七.實驗總結
本節利用 STM32 的 DMA 來實現串口數據傳送,DMA通道的配置需要: 1)設置外設地址。
2)設置存儲器地址。
3)設置傳輸數據量。
4)設置通道 4 的配置信息。
5)使能 DMA1 通道 4,啟動傳輸。
通過以上 5 步設置,我們就可以啟動一次 USART1 的 DMA 傳輸了。
DMA控制器對DMA請求判別優先級及屏蔽,向總線裁決邏輯提出總線請求。當CPU執行完當前總線周期即可釋放總線控制權。此時,總線裁決邏輯輸出總線應答,表示DMA已經響應,通過DMA控制器通知I/O接口開始DMA傳輸。
DMA控制器獲得總線控制權后,CPU即刻掛起或只執行內部操作,由DMA控制器輸出讀寫命令,直接控制RAM與I/O接口進行DMA傳輸。
在DMA控制器的控制下,在存儲器和外部設備之間直接進行數據傳送,在傳送過中不需要中央處理器的參與。開始時需提供要傳送的數據的起始位置和數據長度。
當完成規定的成批數據傳送后,DMA控制器即釋放總線控制權,并向I/O接口發出結束信號。當I/O接口收到結束信號后,一方面停 止I/O設備的工作,另一方面向CPU提出中斷請求,使CPU從不介入的狀態解脫,并執行一段檢查本次DMA傳輸操作正確性的代碼。最后,帶著本次操作結果及狀態繼續執行原來的程序。
由此可見,DMA傳輸方式無需CPU直接控制傳輸,也沒有中斷處理方式那樣保留現場和恢復現場的過程,通過硬件為RAM與I/O設備開辟一條直接傳送數據的通路,使CPU的效率大為提高。
實驗十六 I2C實驗
一.實驗簡介
編程實現對使用I2C接口的EPC02芯片進行寫和讀操作。
二.實驗目的
熟練掌握I2C編程,學會對EPC02的讀寫操作。
三.實驗內容
編寫I2C驅動程序,使用驅動程序初始化EPC02,判斷設備正確性。
寫256個0x5A到EPC02,讀出并發送給串口,通過串口調試助手判別是否讀到的都是0x5A.四.實驗設備
硬件部分:PC計算機(宿主機)、亮點STM32實驗板、JLINK。
軟件部分:PC機WINDOWS系統、MDK KEIL軟件、ISP軟件、串口調試助手。
五.實驗步驟
1參考教材I2C部分,編寫I2C驅動程序。2編寫主程序
3編譯代碼,使用JLINK或ISP下載到實驗板 4記錄實驗過程,撰寫實驗報告
六.實驗結果及測試
伴隨 LED0 的不停閃爍,提示程序在運行。我們先按下KEY0,可以看到如下所示的內容,證明數據已經被寫入到24C02了。
接著我們按KEY2,可以看我們剛剛寫入的數據被顯示出來了,如下圖所示:
源代碼:
七.實驗總結
IIC是由數據線 SDA 和時鐘 SCL 構成的串行總線,可發送和接收數據。在 CPU 與被控 IC 之間、IC 與 IC 之間進行雙向傳送,高速 IIC 總線一般可達 400kbps 以上。
IIC總線在傳送數據過程中共有三種類型信號,它們分別是:開始信號、結束信號和應答信號。這些信號中,起始信號是必需的,結束信號和應答信號,都可以不要。程序在開機的時候會檢測 24C02 是否存在,如果不存在則會在TFTLCD 模塊上顯示錯誤信息,同時LED0 慢閃。大家可以通過跳線帽把PC11 和PC12 短接就可以看到報錯了。通過本次實驗,我掌握了如何使用IIC寫入與讀出數據,學習了編寫I2C驅動程序,使用驅動程序初始化EPC02,判斷設備正確性,以及如何在助手上顯示。
實驗十七 SPI實驗
一.實驗簡介
編程實現對SPI接口的W25Q64進行讀寫操作。
二.實驗目的
熟練掌握SPI編程,學會對的W25Q64讀寫操作。
三.實驗內容
1.2.3.4.5.編寫SPI驅動程序 初始化SPI接口
讀取SPIFLASH的ID,如果正確繼續,否則報錯
向SPIFALSH地址0x12AB00開始寫一串字符,再讀出比較判斷是否與寫入的一致 向SPIFALSH地址0x12AB00開始寫連續256個字節的0x5A,然后讀出并發送給串口,通過串口調試助手判別是否讀到的都是0x5A.四.實驗設備
硬件部分:PC計算機(宿主機)、亮點STM32實驗板、JLINK。
軟件部分:PC機WINDOWS系統、MDK KEIL軟件、ISP軟件、串口調試助手。
五.實驗步驟
1參考SPI及SPI FLASH部分,編寫SPI及SPI FLASH驅動程序(可參考書上代碼)。2編寫主程序
3編譯代碼,使用JLINK或ISP下載到實驗板 4記錄實驗過程,撰寫實驗報告
六.實驗結果及測試
源代碼:
伴隨 LED0 的不停閃爍,提示程序在運行。我們先按下KEY0,可以看到如圖13.17.4.2 所示的內容,證明數據已經被寫入到W25X16了。
接著我們按KEY2,可以看我們剛剛寫入的數據被顯示出來了,如下圖所示:
七.實驗總結
SPI 接口主要應用在EEPROM,FLASH,實時時鐘,AD 轉換器,還有數字信號處理器和數字信號解碼器之間。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節約了芯片的管腳,同時為 PCB 的布局上節省空間,提供方便,正是出于這種簡單易用的特性,現在越來越多的芯片集成了這種通信協議,STM32 也有 SPI 接口。
SPI 的設置步驟:
1)配置相關引腳的復用功能,使能 SPI時鐘。
2)設置 SPI 工作模式。
3)使能 SPI。
程序在開機的時候會檢測 W25X16 是否存在,如果不存在則會在TFTLCD 模塊上顯示錯誤信息,同時LED0 慢閃。大家可以通過跳線帽把PA5 和PA6 短接就可以看到報錯了。通過本實驗,我掌握了編寫SPI程序寫入和讀取FLASH的方法,掌握了對學會對的W25Q64讀寫操作。對STM32開發板有了進一步的了解。
實驗二十一 紅外遙控實驗
一. 實驗簡介
編程實現通過在 ALIENTEK MiniSTM32 開發板上實現紅外遙控器的控制。
二.實驗目的
掌握編程實現紅外遙控控制開發板的方法。
三.實驗內容
1.編寫紅外遙控驅動程序 2.編寫紅外遙控程序代碼 3.使用紅外遙控控制開發板
四.實驗設備
硬件部分:PC計算機(宿主機)、亮點STM32實驗板、JLINK。軟件部分:PC機WINDOWS系統、MDK KEIL軟件、ISP軟件。
五.實驗步驟
4.編寫紅外遙控驅動程序 5.編寫紅外遙控程序代碼
6.編譯代碼,使用JLINK或ISP下載到實驗板 7.記錄實驗過程,撰寫實驗報告
六.實驗結果及測試
源代碼:
使用串口調試助手觀察數據
七.實驗總結
紅外遙控是一種無線、非接觸控制技術,具有抗干擾能力強,信息傳輸可靠,功耗低,成本低,易實現等顯著優點,被諸多電子設備特別是家用電器廣泛采用,并越來越多的應用到計算機系統中。
通過本節實驗,我學習到了如何編程使用紅外遙控控制,在本程序中只是簡單地輸出一個數值,在以后的應用中可以實現更強大的功能,比如用紅外遠程輸入控制開發板進行一些操作。對STM32有了進一步的認識。
實驗二十二 DS18B20實驗
一. 實驗簡介
一. 在ALIENTEK MiniSTM32 開發板上,通過 DS18B20 來讀取環境溫度值。
二.實驗目的
鞏固SPI編程。掌握使用感應器獲取環境溫度的方法。
三.實驗內容
1.復位脈沖和應答脈沖
2.寫時序
3.讀時序
四.實驗設備
硬件部分:PC計算機(宿主機)、亮點STM32實驗板、JLINK。軟件部分:PC機WINDOWS系統、MDK KEIL軟件、ISP軟件。
五.實驗步驟
1.2.3.4.參考教材DS18B20編程部分,編寫DS18B20驅動程序 編寫主程序
編譯代碼,使用JLINK或ISP下載到實驗板 記錄實驗過程,撰寫實驗報告
六.實驗結果及測試
源代碼:
使用串口調試助手觀察數據:
七.實驗總結
DS18B20 是由 DALLAS 半導體公司推出的一種的“一線總線”接口的溫度傳感器。與傳統的熱敏電阻等測溫元件相比,它是一種新型的體積小、適用電壓寬、與微處理器接口簡單的數字化溫度傳感器。
通過本次實驗,我認識到STM32的強大,在開發板上可以添加其他感應器從而實現更強大的功能。添加了DS18B20后的開發板可以感應外界的溫度,通過公式計算顯示出來。