第1點(diǎn):
我們用戶編寫的代碼,必須放在 user code begin 和 end 之間;否則,當(dāng)我們修改stm32cubemx 項(xiàng)目的 配置時(shí),再次生成代碼,就會刪除之前的代碼;正確做法如下圖所示:
我們用戶編寫的代碼,必須放在 user code begin 和 end 之間
第2點(diǎn):
在proteus中,電源需要更改成3.3V,VDDA添加到電源VCC/GND中去;VSSA添加到GND中去;如下圖所示:
電源需要改成3.3V
第3點(diǎn):
HAL_Delay(__IO uint32_t Delay)延時(shí)函數(shù)在stm32f1xx_hal.c里面,該函數(shù)能實(shí)現(xiàn)ms級別的延時(shí);該函數(shù)體前面有一個(gè)關(guān)鍵字__weak,該關(guān)鍵字簡單的說,表明該函數(shù)允許被重寫。
HAL_Delay(__IO uint32_t Delay)
第4點(diǎn):
在proteus中,由于proteus中 軟件的問題,導(dǎo)致程序中雖然IO口設(shè)置了內(nèi)部上拉,但在proteus仿真軟件中,卻是開漏的(也就是說IO口沒有高電平狀態(tài))。
而我們STM32單片機(jī)的外部中斷,需要IO口出現(xiàn)一個(gè)下降沿或者上升沿,才可以觸發(fā)中斷。所以我們在IO口外面加上拉電阻,便于產(chǎn)生跳邊沿,進(jìn)而觸發(fā)外部中斷;
下圖所示LED的限流電阻R1,不能設(shè)置過大,設(shè)置太大會導(dǎo)致流過LED的電流過小,LED不發(fā)光。本次我們設(shè)置成100Ω,讓實(shí)驗(yàn)現(xiàn)象更加明顯。
需要添加上拉電阻,限流電阻不能太大
第5點(diǎn):
下圖所示的這個(gè)按鍵稱為自鎖按鍵, 按下去之后是不會彈起來的,始終保持當(dāng)前狀態(tài);
我們在做外部中斷實(shí)驗(yàn)時(shí)需要輕觸按鍵,這種按鍵是按下去之后是會彈起來的,會恢復(fù)之前的狀態(tài)。
自鎖按鍵
輕觸按鍵
第6點(diǎn):
在keil軟件中,一定要勾選上Creat HEX File選項(xiàng),這樣項(xiàng)目編譯之后才會生成HEX文件,proteus軟件加載HEX文件,實(shí)現(xiàn)STM32單片機(jī)程序的仿真。
還有就是在keil代碼中,修改了代碼一定要重新編譯,然后再在proteus中去觀察實(shí)驗(yàn)現(xiàn)象。
最后
注意上述幾點(diǎn),就能將外部中斷實(shí)驗(yàn)成功的進(jìn)行下去了。
中斷回調(diào)函數(shù)代碼如下圖所示,實(shí)現(xiàn)兩個(gè)按鍵分別控制LED的亮和滅;
兩個(gè)按鍵分別控制LED的亮和滅;
實(shí)驗(yàn)現(xiàn)象
-
單片機(jī)
+關(guān)注
關(guān)注
6035文章
44554瀏覽量
634614 -
Proteus
+關(guān)注
關(guān)注
79文章
1692瀏覽量
106515 -
STM32
+關(guān)注
關(guān)注
2270文章
10895瀏覽量
355721 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
87瀏覽量
11554 -
stm32cubemx
+關(guān)注
關(guān)注
5文章
283瀏覽量
14791
發(fā)布評論請先 登錄
相關(guān)推薦
評論