(1)在我們第乙個課題的基礎上。改寫定時器中斷的內容,做到每隔1s閃爍,再每隔2s閃爍,再隔3s閃爍,然後一直這樣迴圈,其他的led還有示波器都和原來的要求一樣。
一遍一遍的對照著led0開始計算led1是不是已經達到了迴圈的要求。
[1]每隔一秒閃爍 ,則週期為2;每隔2s閃爍則週期為4;每隔3s閃爍,週期為6;所以整體的週期就是2+4+6=12s。
[2]我先是用flag作為標記,每當判斷進入一次中斷成立,
if(tim_getitstatus(tim3,tim_it_update)==set)
flag就++。因為週期為12,我就直接設定flag=flag%12。
[3]剛開始寫條件判斷的時候,我是用的switch語句:
switch(flag)
tim_clearitpendingbit(tim3,tim_it_update);
結果燈每秒都會閃爍一次。
[4]我剛開始開始設定以2,以3為週期的時候,設定計數時鐘不知弄哪個函式,我就改了if(tim_getitstatus(tim3,tim_it_update)==set),把其中的tim3改為2*tim3,3*tim3,結果不符合stm32的使用規則,不能實現週期的改動。
[5]後來學姐跟我講,其實她是想讓我用stm32的庫函式tim_setautoreload(tim3,20000)來
設定 timx
自動重裝載暫存器值,這樣當flag=3的時候,就可以實現以2為週期的迴圈了。
[6]我就和之前的switch語句結合了一下
switch(flag)
led0=!led1;
sih0=!shi0;
tim_clearitpendingbit(tim3,tim_it_update);
[9]
想到前段時間,實驗室有小夥伴寫外部中斷的實驗,來控制流水燈的三個流速。一共有快中慢三種速度,每按一下鍵就可以改變一次。雖然他們是寫的
51的吧,系統不一樣,但是還可以找找思路的。我看了他們控制速度的這部分程式。
可以總結為,分了三部分來寫的。首先乙個
delay
的函式來控制相應的鍵按下時是什麼速度,再乙個實參的函式,判斷每次是按下了哪一種的鍵,最後在
main
函式中呼叫。
顯然系統不一樣,寫出來的程式差距還是很大的。
首先我們不能用
delay
函式,因為這個已經在
system
中呼叫了。當然這都是小事,改改函式名就好了。
第二我先寫了
51中的「
delay
」
void tim3_irqhandler(int i)
; if(i==3)
; if(i==7)
; tim_clearitpendingbit(tim3,tim_it_update);
}
但是當我用
51的方法寫實參的函式的時候,程式就會報錯呢~
void spee()
return tim3_irqhandler_dat;
}
凡是含有tim3_irqhandler_dat的語句都會報錯。(2
)調了一天實在是調不出來了,今天我就不打算在這上邊浪費時間了,我就看
nvic
之前的時候,寫外部中斷和定時器中斷的時候,我倒是都都用過
nvic
了,對於它的功能設定可以說是比較熟悉的了。今天就進一步的了解一下
nvic
中斷優先順序分組以及配置。
第一部分是
nvic
中斷優先順序分組。
[1]*cm4
核心支援
256個中斷,其中包含了
16個核心中斷和
240個外部中斷,並且具有
256級的可程式設計中斷設定。但
stm32f4
並沒有使用
cm4核心的全部東西,而是只用了它的一部分。
*stm32f40xx/stm32f41xx
總共有92
個中斷
*stm32f40xx/stm32f41xx的92
個中斷裡面,包括
10個核心中斷和
82個可遮蔽中斷,具有
16級可程式設計的中斷優先順序,而我們常用的就是這
82個可遮蔽中斷。
[2]中斷優先順序管理方法:對
stm32
中斷分組,組
0-4。同時,對每個中斷設定搶占優先順序和響應優先順序。 *
分組配置是在
scb->aircr
暫存器的
bit10~8
來定義的
[3]搶占優先順序和響應優先順序的區別:
*高優先順序的搶占優先順序是可以打斷正在進行的低搶占優先順序中斷的。
*搶占優先順序相同的中斷,高響應優先順序不可以打斷低響應優先順序的中斷。
*搶占優先順序相同的中斷,當兩個中斷同時發生的情況下,哪個響應優先順序高,哪個先執行。
*如果兩個中斷的搶占優先順序和響應優先順序都是一樣的話,則看哪個中斷先發生就先執行。
[4]特別要注意的是:一般情況下,系統**執行過程中,只設定一次中斷優先順序分組。
[5]中斷優先順序分組函式:
voidnvic_prioritygroupconfig(uint32_t nvic_prioritygroup);
第二部分是講的中斷優先順序配置。這個在之前的程式中就有寫過,算是比較熟悉的了。今天也是主要的學了幾個
中斷設定相關暫存器
[1]中斷優先順序控制的暫存器組
ip[240];
voidnvic_init(nvic_inittypedef*nvic_initstruct);
具體的用法,在前兩天寫定時器中斷的時候應該有提到的。
[2]中斷使能暫存器組:
iser[8]
[3]中斷失能暫存器組:
icer[8]
。特點及配置同
[2][4]
中斷掛起控制暫存器組:
ispr[8]
[6]中斷啟用標誌位暫存器組:
iabr[8]
32位暫存器,每個位控制乙個中斷的使能。
stm32f40x
只有82
個可遮蔽中斷,所以只使用了其中的
iser[0]~iser[2]
iser[0]
的bit0~bit31
分別對應中斷
0~31
。iser[1]
的bit0~27
對應中斷
32~63
;iser[2]
的bit0~17
對應中斷
64~81
[5]中斷解掛控制暫存器組:
icpr[8]
作用:唯讀,通過它可以知道當前在執行的中斷是哪乙個
.如果對應位為
1,說明該中斷正在執行。
~
學習筆記 124 預備知識總結
1.使用bash命令完成下面任務 2.需要完成下面任務 3.查詢man手冊的時候,關閉顏色顯示,輸出所有ls命令到文字檔案 home student lscolor.txt 4.拷貝檔案 home student vimfile.txt 到 home student loglisting.txt.使...
自學python計畫 python學習計畫
文件 為 從網路收集整理 word 版本可編輯 python 學習計畫 篇一 python 學習計畫 篇一 python 之模組學習 python 之模組學習 模組簡介 python 是由一系列的模組組成的,每個模組就是乙個 py為字尾的檔案,同時模組也是乙個命名空間,從而避免了 變數名稱衝突的問題...
暑期學習計畫
有句話是這麼說的 假期的學習計畫永遠是個計畫而已。的確,無數次的寒暑假曾暗暗下決心要好好充電,可總是一眨眼就到了開學的日子,又發現自己什麼都沒做。這就是成功者和失敗者的距離。大二了,朋友們都感覺到了巨大的壓力 就業,買房,買車。這一切看起來都是那麼的遙不可及。巨大的壓力面前,大家都忙著增加自身實力。...