控制LED燈閃爍(NB-IoT項目實戰專欄—4)

目錄

1、實驗目的

2、實驗設計

3、實驗步驟

3.1、使用 STM32CubeMX 新建項目工程

3.2、工程介紹

3.2.1、MDK工程目錄結構介紹

3.2.2、MDK工程文件介紹

3.3、編寫LED閃爍代碼

3.4、配置燒寫參數

3.5、燒寫程序


1、實驗目的

  • 瞭解STM32L431RCT6 LED燈外圍電路搭建原理;
  • 學習STM32CubeMX 新建工程的方法;
  • 掌握STM32編程實現LED閃爍的編程技巧。

2、實驗設計

  1. 實驗開發板的 LED 燈連接在 MCU 的 PC13 引腳上,原理圖如下所示,將該引腳輸出高電平,LED 燈會被點亮;
  2. 延時函數使用 HAL 庫函數自帶的 HAL_Delay()函數,傳入參數單位爲 ms,輸入 500ms;
  3. 然後將該引腳輸出低電平,LED 燈會被熄滅,再使用 HAL_Delay()函數延時 500ms;
  4. 最終實現每隔500ms閃爍效果。

3、實驗步驟

3.1、使用 STM32CubeMX 新建項目工程

第一步:雙擊打開 STM32CubeMX,點擊新建工程,在 MCU 選型框裏輸入 STM32L431RC,右側選擇芯片封裝爲 LQFP 的型號,雙擊進入。

第二步:參照原理圖配置GPIO。看到 STM32L431RC MCU有高速和低速外部晶振,LED 燈接在的是PC13 引腳,當 PC13 輸出爲高的時候點亮 LED 燈。因此我們在 Pinout 配置界面先設置使用外部晶振,在 RCC 下面將高速時鐘和低速時鐘都設置爲 Crystal/Ceramic Resonator,然後單擊PC13 引腳設置爲 GPIO_Output 模式。

在 SYSTEM 一欄裏點擊 GPIO 進入設置,點擊 PC13 引腳,配置初始化參數:推輓輸出、默認輸出低電平(初始化不讓 LED 亮)、無上拉無下拉。 

這裏講解一下 GPIO 的輸出模式,分爲兩種(複用輸出暫時不講):推輓輸出模式和開漏輸出模式。

推輓輸出模式:在輸出高電平時,P-MOS 管導通,低電平時,N-MOS 管導通。兩個管子輪流導通,一個負責灌電流,一個負責拉電流,使其負載能力和開關速度都比普通的方式有很大的提高。推輓輸出的低電平爲 0V,高電平爲 3.3V。

開漏輸出模式:如果我們控制輸出爲 0,低電平,則使 N-MOS 管導通,使輸出接地,若控制輸出爲 1,則既不輸出高電平,也不輸出低電平,爲高阻態。要正常使用必須在外部接一個上拉電阻。它具有線與特性,即多個開漏模式引腳連接到一起時,只有當所有引腳都輸出高阻態,才由上拉電阻提供高電平,此高電平的電壓爲外部上拉電阻所接電源的電壓。若其中一個引腳爲低電平,那線路就相當於短路接地,使得整條線路都爲低電平,0V。

普通推輓輸出模式一般應用在輸出電平爲 0 和 3.3 伏的場合。而普通開漏輸出模式一般應用在電平不匹配的場合,如需要輸出 5V 的高電平,就需要在外部接一個上拉電阻,電源爲 5V,把 GPIO 設置爲開漏模式,當輸出高阻態時,由上拉電阻和電源向外輸出 5V 的電平。 

第三步:配置時鐘。按照自己的工程要求配置時鐘,本次以自動設置爲例,直接將最後的頻率設置爲 80MHz(確定後電機回車),STM32CubeMX 會自動設置。 

第四步:配置生成代碼的一些配置。在 Project 界面設置本工程名稱,選擇按照什麼開發工具生成項目工程,這裏我們使用的是 MDK5。

 在這個界面中還需要配置的是 Code Generator,這一欄中將“Generate peripheral initialization as a……”選中,這樣生成的工程會把使用的資源(IIC、SPI、USART、GPIO 等)初始化代碼分別放在對應名字的單獨的.c 文件中,方便我們自己增刪改查使用。

第五步:點擊上面的 OK 生成工程代碼。 生成工程代碼成功後,可以選擇打開工程目錄或者直接打開工程。

 選擇打開工程目錄。可以看到工程目錄分爲兩個部分,一個是 MDK5 的工程目錄,一個是 STM32CubeMX 的工程。STM32CubeMX 工程文件還可以用 STM32CubeMX 打開提供增加或者刪除、修改本工程,非常方便。

3.2、工程介紹

3.2.1、MDK工程目錄結構介紹

在MDK工程中具體文件目錄結構如下:

 重點文件介紹如下:

 STM32L4xx_HAL_Driver 文件包含STM32L4xx 硬件抽象層的外設驅動,具體描述如下:

3.2.2、MDK工程文件介紹

進入MDK-ARM文件夾,打開LED工程文件。

 整個工程目錄設置的特別清楚,分爲 4 個部分:

並且在用戶代碼區的每一個.C 文件中,都有多處是 BEGIN 和 END 且每處 BEGIN 和 END都有對應的提示,開發者只需將自己的代碼放在對應的區域就行(當然也可以不這麼做,這個只是爲了方便再次使用 STM32CubeMX 開發縮小研發時間,增強代碼可讀性,便於團隊協作)。

編譯之後無錯誤無警告。

3.3、編寫LED閃爍代碼

第一步:找到 GPIO 接口。在 main.c 文件中可以看到,工程文件首先重置所有外設,初始化 Flash 接口和 Systick,然後配置初始化了系統時鐘,再配置初始化了 GPIO(本例程裏只用了 GPIO,如果用其他的也會在這一部分初始化),初始化函數在 gpio.c 文件裏,剩下的我們就可以直接寫自己需要的應用了,這裏我們想做的事情是LED 燈閃爍。

由於 HAL 庫是封裝的比較好的,因此我們不需要和底層的寄存器打交道,只需要利用外設庫提供的接口即可,我們想點亮 LED 燈閃爍就是讓對應的引腳拉低拉高,打開 stm32l4xx_hal_gpio.h 中接口函數。

打開步驟爲:

  • Drivers/STM32L4xx_HAL_Driver→點開stm32l4xx_hal_gpio.c 前面的“+”;
  • 找到 stm32l4xx_hal_gpio.h 雙擊打開,拉倒最下面,會看到/* IO operation functions *****************************************************/,這個下面的函數就是 GPIO 的一些接口,如下圖所示:

第二步: 編寫程序,使PC13 引腳每隔500ms輸出高電平或低電平切換, 實現LED 燈閃爍。

這裏將使用三個GPIO函數:

HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState),功能是設置拉高還是拉低某個引腳,函數各個參數說明如下:

HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin),功能是將某個引腳輸出方波,函數各個參數說明如下:

HAL_Delay(uint32_t Delay),功能是延時單位毫秒,函數各個參數說明如下:

將這三個函數名複製到 main.c 文件的 while 下面的 USER CODE BEGIN 3 和 USERCODE END 3 中間。

根據函數參數說明提示和類型,設置函數中的參數,有兩種方式實現LED燈閃爍,具體代碼如下:

 第三步: 編譯程序,確保無誤。

3.4、配置燒寫參數

將NB-IoT實驗版供電,插上燒寫器,配置燒寫參數,設置使用 ST-LINK 下載,設置好下圖參數,點擊下載程序。

3.5、燒寫程序

最終實現LED燈閃爍效果,此處省略效果圖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章