|
相信大多是硬件工程師的第一個(gè)程序都是使用IO口點(diǎn)燈,就像程序員的第一個(gè)程序都是Hello world一樣。本篇文章將詳細(xì)的介紹使用STM32CubeMx生成工程并使用GPIO,包括基本的輸入輸出、中斷等的使用。前期準(zhǔn)備: STM32硬件電路板及仿真器(本篇以STM32F072C8單片機(jī)為例) Keil v5以上版本(MDK-ARM)
系統(tǒng)配置然后配置調(diào)試接口為SWD模式,系統(tǒng)時(shí)基為Systick定時(shí)器,如下圖所示。Systick初始化時(shí)會(huì)自動(dòng)打開(kāi)中斷(最低優(yōu)先級(jí)),定時(shí)周期為1ms。
o4wqpmgayi464048947042.jpg (209.76 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
o4wqpmgayi464048947042.jpg
2024-10-5 23:00 上傳
GPIO配置
配置GPIO時(shí),直接點(diǎn)擊右側(cè)相應(yīng)的引腳,在彈出菜單中選擇相應(yīng)的功能,輸入還是輸出等,本例中配置了PA0、PA1、PA2三個(gè)端口,分別配置為輸出模式、輸入模式和外部中斷模式。配置完成后可在中間區(qū)域?qū)γ總(gè)IO進(jìn)行詳細(xì)配置,包括端口初始電平,輸出模式是推挽輸出還是開(kāi)漏輸出,輸入上下拉選擇,端口速度以及端口標(biāo)簽。如下圖所示。本例中PA0配置為推挽輸出模式,用于控制LED,PA1配置為上拉輸入模式,用于檢測(cè)按鍵KEY1,PA2配置為外部中斷模式,下降沿中斷,用于檢測(cè)按鍵KEY2。
00fqugetg3064048947142.jpg (190.43 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
00fqugetg3064048947142.jpg
2024-10-5 23:00 上傳
端口配置為外部中斷后,需要在NVIC配置中打開(kāi)相應(yīng)的中斷才能正常使用,如下圖所示?梢钥吹絊ystem tick中斷是默認(rèn)打開(kāi)的。
smyzz1kfbvj64048947242.jpg (155.48 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
smyzz1kfbvj64048947242.jpg
2024-10-5 23:00 上傳
時(shí)鐘配置
首先按照上篇文章的介紹新建工程,之后配置系統(tǒng)時(shí)鐘,本例中選擇外部高速時(shí)鐘HSE作為系統(tǒng)時(shí)鐘,需要配置RCC如下圖,配置后相應(yīng)的引腳顯示為時(shí)鐘模式。
kmoy0rvqdsa64048947342.jpg (233.98 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
kmoy0rvqdsa64048947342.jpg
2024-10-5 23:00 上傳
配置完成后再Clock Configuration頁(yè)面進(jìn)一步配置時(shí)鐘,首先輸入外部時(shí)鐘的頻率,然后依次選擇時(shí)鐘源以及分頻、倍頻系數(shù)。本例外部時(shí)鐘為8MHz,最終配置系統(tǒng)時(shí)鐘為48MHz。當(dāng)配置出現(xiàn)問(wèn)題時(shí),軟件會(huì)標(biāo)紅提示。
xu3pf4bpryq64048947442.jpg (172.66 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
xu3pf4bpryq64048947442.jpg
2024-10-5 23:00 上傳
xsvpf22tjy164048947542.jpg (177.59 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
xsvpf22tjy164048947542.jpg
2024-10-5 23:00 上傳
所有配置完成后即可生成工程,可以看到時(shí)鐘和GPIO初始化已經(jīng)有軟件生成,用戶只要編寫(xiě)自己的程序就行。普通IO操作比較簡(jiǎn)單,直接調(diào)用相關(guān)函數(shù)即可,如下圖。
teuys5ulku364048947643.jpg (299.61 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
teuys5ulku364048947643.jpg
2024-10-5 23:00 上傳
外部中斷的使用相對(duì)復(fù)雜一些,需要用戶自己編寫(xiě)回調(diào)函數(shù),在stm32f0xx_it.c文件中,可以看到,中斷函數(shù)已經(jīng)定義好。
wiwf3mx0wly64048947743.png (17.29 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
wiwf3mx0wly64048947743.png
2024-10-5 23:00 上傳
tp31y2okcgs64048947843.png (39.84 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
tp31y2okcgs64048947843.png
2024-10-5 23:00 上傳
中斷程序最終調(diào)用的是void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)函數(shù),該函數(shù)已經(jīng)由系統(tǒng)生成,但內(nèi)容為空,且前面加了__weak聲明。用戶需要重新定義該函數(shù),并在函數(shù)內(nèi)實(shí)現(xiàn)自己需要的功能,當(dāng)外部中斷產(chǎn)生時(shí),就會(huì)調(diào)用用戶自定義的函數(shù),而不是調(diào)用__weak聲明的函數(shù)。
tzritezm4aj64048947943.png (15.93 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
tzritezm4aj64048947943.png
2024-10-5 23:00 上傳
|
|