第1點(diǎn):
我們用戶(hù)編寫(xiě)的代碼,必須放在 user code begin 和 end 之間;否則,當(dāng)我們修改stm32cubemx 項(xiàng)目的 配置時(shí),再次生成代碼,就會(huì)刪除之前的代碼;正確做法如下圖所示:
我們用戶(hù)編寫(xiě)的代碼,必須放在 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級(jí)別的延時(shí);該函數(shù)體前面有一個(gè)關(guān)鍵字__weak,該關(guān)鍵字簡(jiǎn)單的說(shuō),表明該函數(shù)允許被重寫(xiě)。
HAL_Delay(__IO uint32_t Delay)
第4點(diǎn):
在proteus中,由于proteus中 軟件的問(wèn)題,導(dǎo)致程序中雖然IO口設(shè)置了內(nèi)部上拉,但在proteus仿真軟件中,卻是開(kāi)漏的(也就是說(shuō)IO口沒(méi)有高電平狀態(tài))。
而我們STM32單片機(jī)的外部中斷,需要IO口出現(xiàn)一個(gè)下降沿或者上升沿,才可以觸發(fā)中斷。所以我們?cè)贗O口外面加上拉電阻,便于產(chǎn)生跳邊沿,進(jìn)而觸發(fā)外部中斷;
下圖所示LED的限流電阻R1,不能設(shè)置過(guò)大,設(shè)置太大會(huì)導(dǎo)致流過(guò)LED的電流過(guò)小,LED不發(fā)光。本次我們?cè)O(shè)置成100Ω,讓實(shí)驗(yàn)現(xiàn)象更加明顯。
需要添加上拉電阻,限流電阻不能太大
第5點(diǎn):
下圖所示的這個(gè)按鍵稱(chēng)為自鎖按鍵, 按下去之后是不會(huì)彈起來(lái)的,始終保持當(dāng)前狀態(tài);
我們?cè)谧鐾獠恐袛鄬?shí)驗(yàn)時(shí)需要輕觸按鍵,這種按鍵是按下去之后是會(huì)彈起來(lái)的,會(huì)恢復(fù)之前的狀態(tài)。
自鎖按鍵
輕觸按鍵
第6點(diǎn):
在keil軟件中,一定要勾選上Creat HEX File選項(xiàng),這樣項(xiàng)目編譯之后才會(huì)生成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)注
6023文章
44376瀏覽量
628292 -
Proteus
+關(guān)注
關(guān)注
78文章
1690瀏覽量
106076 -
STM32
+關(guān)注
關(guān)注
2257文章
10828瀏覽量
352432 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
87瀏覽量
11508 -
stm32cubemx
+關(guān)注
關(guān)注
5文章
278瀏覽量
14618
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論