嵌入式系統(tǒng) 流水燈、按鍵、定時器實驗報告_第1頁
嵌入式系統(tǒng) 流水燈、按鍵、定時器實驗報告_第2頁
嵌入式系統(tǒng) 流水燈、按鍵、定時器實驗報告_第3頁
嵌入式系統(tǒng) 流水燈、按鍵、定時器實驗報告_第4頁
嵌入式系統(tǒng) 流水燈、按鍵、定時器實驗報告_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式系統(tǒng)應用試驗報告姓 名:學 號:學 院:專 業(yè):班 級:指導老師:試驗1、流水燈試驗1.1試驗要求編程把握試驗板上LED燈輪番點亮、熄滅,中間間隔肯定時間。1.2原理分析試驗主要考察對STM32F10X系列單片機GPIO的輸出操作。參閱數(shù)據(jù)手冊可知,通過軟件編程,GPIO可以配置成以下幾種模式:輸入浮空輸入上拉輸入下拉模擬輸入開漏輸出推挽式輸出推挽式復用功能開漏式復用功能依據(jù)試驗要求,應當首先將GPIO配置為推挽輸出模式。由原理圖可知,單片機GPIO輸出信號經過74HC244緩沖器,連接LED燈。由于74HC244的OE1和OE2都接地,為相同電平,故A端電平與Y端電平相同且LED燈共陽

2、,所以,假如要點亮LED,GPIO應輸出低電平。反之,LED燈熄滅。1.3程序分析軟件方面,在程序啟動時,調用SystemInit()函數(shù)(見附錄1),對系統(tǒng)時鐘等關鍵部分進行初始化,然后再對GPIO進行配置。GPIO配置函數(shù)為SZ_STM32_LEDInit()(見附錄2),函數(shù)中首先使能GPIO時鐘:RCC_APB2PeriphClockCmd(GPIO_CLKLed, ENABLE);然后配置GPIO輸入輸出模式:GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;再配置GPIO端口翻轉速度:GPIO_InitStructure.GPIO_Sp

3、eed = GPIO_Speed_50MHz;最終將配置好的參數(shù)寫入寄存器,初始化完成:GPIO_Init(GPIO_PORTLed, &GPIO_InitStructure)。初始化完成后,程序循環(huán)點亮一個LED并熄滅其他LED,中間通過Delay()函數(shù)進行延時,達到流水燈的效果(程序完整代碼見附錄3)。試驗程序流程圖如下:硬件方面,依據(jù)試驗指南,將試驗板做如下連接:1.3試驗結果試驗二、按鍵試驗2.1試驗要求利用STM32讀取外部按鍵狀態(tài),按鍵按下一次產生一次外部中斷在中斷處理函數(shù)中使按鍵所對應的燈亮起。2.2原理分析試驗主要考察對STM32F10X系列單片機GPIO外部中斷功能

4、的使用。STM32F107VCT一共有5組GPIO,分別是PA15:0、PB15:0、PC15:0、PD15:0、PE15:0。STM32的全部GPIO都可以作為中斷輸入源,單片機通過復用的方式使其對處理器來說來自 GPIO 的一共有 16 個中斷Px15:0。具體實現(xiàn)是PA0、PB0、PC0、PD0和PE0共享一個GPIO中斷;PA1、PB1、 PC1、PD1和PE1共享一個GPIO中斷;PA15、PB15、PC15、PD15和PE15共享一個GPIO中斷。以下圖片為以EXTI0為例的外部中斷/大事線路映像:要產生中斷,必需先配置好并使能中斷線。依據(jù)需要的邊沿檢測設置2個觸發(fā)寄存器,同時在中

5、斷屏蔽寄存器的相應位寫1允許中斷懇求。當外部中斷線上發(fā)生了期盼的邊沿時,將產生一個中斷懇求,對應的掛起位也隨之被置1。在掛起寄存器的對應位寫1,將清除該中斷懇求。要把IO口作為外部中斷輸入,有以下幾個步驟:(1) 初始化 IO 口為輸入。這一步設置要作為外部中斷輸入的IO口的狀態(tài),可以設置為上拉/下拉輸入,也可以設置為浮空輸入,但浮空的時候外部肯定要帶上拉,或者下拉電阻。否則可能導致中斷不停的觸發(fā)。在干擾較大的地方,就算使用了上拉/下拉,也建議使用外部上拉/下拉電阻,這樣可以肯定程度防止外部干擾帶來的影響。(2) 開啟IO口復用時鐘,設置IO口與中斷線的映射關系。STM32的IO口與中斷線的對

6、應關系需要配置外部中斷配置寄存器EXTICR,這樣我們要先開啟復用時鐘,然后配置IO口與中斷線的對應關系。才能把外部中斷與中斷線連接起來。(3) 開啟與該IO口相對的線上中斷/大事,設置觸發(fā)條件。這一步,我們要配置中斷產生的條件,STM32可以配置成上升沿觸發(fā),下降沿觸發(fā), 或者任意電平變化觸發(fā),但是不能配置成高電平觸發(fā)和低電平觸發(fā)。這里依據(jù)自己的實際狀況來配置。同時要開啟中斷線上的中斷,這里需要留意的是:假如使用外部中斷,并設置該中斷的EMR位的話,會引起軟件仿真不能跳到中斷,而硬件上是可以的。而不設置EMR,軟件仿真就可以進入中斷服務函數(shù),并且硬件上也是可以的。建議不要配置EMR位。(4)

7、 配置中斷分組(NVIC),并使能中斷。這一步,我們就是配置中斷的分組以及使能,對STM32的中斷來說,只有配置了 NVIC 的設置,并開啟才能被執(zhí)行,否則是不會執(zhí)行到中斷服務函數(shù)里面去的。(5) 編寫中斷服務函數(shù)。這是中斷設置的最終一步,中斷服務函數(shù),是必不行少的,假如在代碼里面開啟了中斷,但是沒編寫中斷服務函數(shù),就可能引起硬件錯誤,從而導致程序崩潰。所以在開啟了某個中斷后,應為該中斷編寫服務函數(shù)。在中斷服務函數(shù)里面編寫要執(zhí)行的中斷后的操作,并很據(jù)狀況推斷是否要對中斷產生的標志位進行清零。由原理圖可知,按鍵未按下時,GPIO讀到的為高電平,按鍵按下后,IO口接地,產生一個電平跳變,所以外部中

8、斷觸發(fā)方式應當設置為下降沿觸發(fā)。2.3程序分析LED燈的點亮與試驗一中相同,不過多贅述。程序首先對按鍵進行初始化,初始化函數(shù)為GPIO_KEY_Config()(見附錄4),配置過程與試驗一中GPIO配置基本全都。由于此處GPIO需要采集外界按鍵信號,故GPIO模式應當為調整為內部上拉電阻輸入GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU。然后執(zhí)行GPIO中斷初始化函數(shù)KEY_EXIT_Init()(見附錄5),首先將連接按鍵的IO口與EXTI線鏈接到一起:GPIO_EXTILineConfig(GPIO_KEY1_EXTI_PORT_SOURCE,G

9、PIO_KEY1_EXTI_PIN_SOURCE);然后將觸發(fā)方式設置為下降沿觸發(fā)并寫入中斷配置寄存器,并使能中斷:EXTI_InitStructure.EXTI_Line = GPIO_KEY1_EXTI_LINE;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure)。之后進行中斷分組

10、配置及中斷優(yōu)先級配置,函數(shù)為InterruptConfig()(見附錄6)。配置過程較為簡單,涉及到搶占優(yōu)先級和響應優(yōu)先級的概念。程序首先將全部外部中斷歸為NVIC_PriorityGroup_2,即2位搶占優(yōu)先級和2位響應優(yōu)先級:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);然后將全部外部中斷信號的搶占優(yōu)先級規(guī)定為0、1、2,使其可以相互區(qū)分,并將配置好的參數(shù)寫入對應寄存器中,完成配置:NVIC_InitStructure.NVIC_IRQChannel = GPIO_KEY1_EXTI_IRQn;NVIC_InitStructure.NVIC

11、_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = GPIO_KEY2_EXTI_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_Init(&NVIC_

12、InitStructure);NVIC_InitStructure.NVIC_IRQChannel = GPIO_KEY3_EXTI_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_Init(&NVIC_InitStructure)。初始化完成后,程序進入等待按鍵中斷觸發(fā)狀態(tài),一旦按鍵按下,則進入中斷服務函數(shù)EXTI9_5_IRQHandler()(見附錄7)中。在函數(shù)中對LED燈進行點亮、熄滅操作,并重置中斷產生標志位。試驗流程圖如下(主函數(shù)代碼見附錄8):硬件連接方式如下圖所示:2.3試驗結果試驗

13、三、定時器試驗3.1試驗要求利用STM32的通用定時器 TIM5 產生一個1S的中斷,在中斷函數(shù)中實現(xiàn) LED1、LED2、LED3、LED4同時翻轉的效果。3.2原理分析試驗主要考察對STM32F10X系列單片機定時器的使用。試驗中使用的STM32F107單片機有多達10個定時器,包括:多達4個16位定時器,每個定時器有多達4個用于輸入捕獲/輸出比較/PWM 或脈沖計數(shù)的通道和增量編碼器輸入1個16位帶死區(qū)把握和緊急剎車,用于電機把握的 PWM 高級把握定時器2個獨立的看門狗定時器(獨立的和窗口型的)系統(tǒng)時間定時器:24 位自減型計數(shù)器2個 16 位基本定時器用于驅動DAC依據(jù)時鐘樹可知,系

14、統(tǒng)時鐘經過分頻之后,進入TIM5的時鐘模塊入口,在經過預分頻處理,才供應TIM5作時鐘使用。預分頻器的系數(shù)為:TIMx_PSC,當TIMx_PSC = 0時表示不分頻,則TIM5定時器的時鐘用CK_CNT =模塊入口時鐘72MHz;當TIMx_PSC = 1時表示不分頻,則TIM5定時器的時鐘用CK_CNT=模塊入口時鐘36MHz;以此類推。公式為:CK_CNT =fCK_PSC/(PSC15:0+1),其中PSC最大為65535。其次是TIM5計數(shù)器計數(shù)值的設置,TIM5計數(shù)器以CK_CNT為時鐘計數(shù),向下計數(shù)到0或向上計數(shù)到設定值(TIMx_ARR)則產生中斷。以向上計數(shù)為例,從 0 開頭

15、計數(shù)到設定值TIMx_ARR 時產生中斷。要產生一秒一次中斷則要使計數(shù)器的值乘以預分頻的值=系統(tǒng)時鐘72MHz,其中計數(shù)器的值和預分頻值都必需小于65535。我們使預分頻值為7200,計數(shù)器值為10000,則7200 * 10000 = 72,000,000即72M。其中拆分方法很多35000*2000 = 72,000,000,只要留意計數(shù)器的值和預分頻值都必需小于65535即可。當計數(shù)值溢出后,會轉變計數(shù)溢出標志位,并產生定時器中斷,試驗中使用其產生中斷來進行LED燈翻轉。3.3程序分析LED初始化部分與試驗一相同,完成初始化后,點亮全部LED燈。定時器配置函數(shù)為TIM5_Init()(見

16、附錄6)。配置函數(shù)首先使能計數(shù)器時鐘:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);然后自動裝載計數(shù)值,計數(shù)從0開頭:TIM_TimeBaseStructure.TIM_Period = (100 - 1);再對計時器進行預分頻系數(shù)設置:TIM_TimeBaseStructure.TIM_Prescaler = (7200 - 1);并將計數(shù)器設置為向上計數(shù):TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;最終寫入計時器配置寄存器,完成配置:TIM_TimeBaseI

17、nit(TIM5, &TIM_TimeBaseStructure)。配置完成后,還要對計數(shù)器溢出標志位進行清零,并打開溢出中斷,使能計數(shù)器以開頭計數(shù)。TIM_ClearITPendingBit(TIM5, TIM_IT_Update);TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE);TIM_Cmd(TIM5, ENABLE)。定時器配置完成并使能后,計數(shù)器開頭工作,當?shù)竭_預設的計數(shù)值之后,產生中斷信號。系統(tǒng)在進行相關配置后可以響應定時器產生的中斷,中斷配置函數(shù)為NVIC_Configuration()(見附錄7)。函數(shù)首先將中斷向量表首地址置于0x0

18、8000000:NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);然后使能TIM5中斷:NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;最終將配置參數(shù)寫入中斷把握寄存器,完成配置:NVIC_Init(

19、&NVIC_InitStructure)。一旦中斷產生,系統(tǒng)會對中斷產生響應,暫停全部正在執(zhí)行的低優(yōu)先級任務且將任務信息和數(shù)據(jù)壓入對應對戰(zhàn)區(qū),并進入中斷服務函數(shù)TIM5_IRQHandler()(見附錄8)中進行處理。在中斷服務函數(shù)中推斷并清除了中斷標志位,以便定時器下一次計數(shù)中斷產生。函數(shù)中調用了LED_Spark()函數(shù)(見附錄9),實現(xiàn)了LED的閃爍。程序流程圖如下:硬件連接方式如下圖所示:試驗四、按鍵中斷把握LED燈定時閃爍4.1試驗要求綜合試驗一、二、三,利用STM32讀取外部按鍵狀態(tài),按鍵按下一次產生一次外部中斷在中斷處理函數(shù)中使按鍵所對應的燈閃爍,閃爍間隔通過定時器定時把握。其中,SKEY1把握LED1以1S為間隔,閃爍3次,SKEY2把握LED2以2S為間隔閃爍3次,SKEY3把握LED3以3S為間隔,閃爍3次。4.2原理分析試驗需要用到STM32的GPIO輸入輸出操作,GPIO外部中斷和內部定時器中斷。在以上三個試驗中,對各個部分都已經進行過詳盡的解釋,這里不再贅述。此試驗需要將以上試驗做綜合,并對時序進行調整。難點為,對GPIO外部中斷和定時器內部中斷的處理,即如何確定兩種不同中斷的優(yōu)先級。這里的使用的方法是,將全部按鍵外部中斷置于中斷分組2,即NVIC_PriorityGroup_2中。將全部按鍵中斷搶占優(yōu)先級置

溫馨提示

  • 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

提交評論