電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 46|回復(fù): 0
收起左側(cè)

STM32CubeMX之GPIO的使用

[復(fù)制鏈接]

454

主題

454

帖子

2398

積分

三級(jí)會(huì)員

Rank: 3Rank: 3

積分
2398
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-3-6 21:58:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
相信大多是硬件工程師的第一個(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。

    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。


    端口配置為外部中斷后,需要在NVIC配置中打開(kāi)相應(yīng)的中斷才能正常使用,如下圖所示?梢钥吹絊ystem tick中斷是默認(rèn)打開(kāi)的。

    時(shí)鐘配置
    首先按照上篇文章的介紹新建工程,之后配置系統(tǒng)時(shí)鐘,本例中選擇外部高速時(shí)鐘HSE作為系統(tǒng)時(shí)鐘,需要配置RCC如下圖,配置后相應(yīng)的引腳顯示為時(shí)鐘模式。

    配置完成后再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)紅提示。



    所有配置完成后即可生成工程,可以看到時(shí)鐘和GPIO初始化已經(jīng)有軟件生成,用戶只要編寫(xiě)自己的程序就行。普通IO操作比較簡(jiǎn)單,直接調(diào)用相關(guān)函數(shù)即可,如下圖。


    外部中斷的使用相對(duì)復(fù)雜一些,需要用戶自己編寫(xiě)回調(diào)函數(shù),在stm32f0xx_it.c文件中,可以看到,中斷函數(shù)已經(jīng)定義好。



    中斷程序最終調(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ù)。
  • 發(fā)表回復(fù)

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表