首页
/
每日頭條
/
科技
/
stm32應用框架
stm32應用框架
更新时间:2026-02-25 08:45:26

在上一節中,我們在MDK5中建立了STM32的模闆程序,今天,我們來對程序進行解讀。我們先來上程序,然後對程序當中主要的語句進行解讀。

4.1 模闆主程序解讀

#include "stm32f10x.h" #引入頭文件

void Delay(u32 count) #延遲函數

{

u32 i=0;

for(;i<count;i );

}

int main(void)#進入主程序

{

GPIO_InitTypeDef GPIO_InitStructure;//①

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //②

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //③

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //④

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //⑤

GPIO_Init(GPIOC, &GPIO_InitStructure); //⑥

GPIO_SetBits(GPIOC,GPIO_Pin_13); //⑦

while(1)

{

GPIO_ResetBits(GPIOC,GPIO_Pin_13);⑧

Delay(3000000);

GPIO_SetBits(GPIOC,GPIO_Pin_13);

Delay(3000000);

}

}

解讀程序:

①GPIO_InitTypeDef GPIO_InitStructure;

這一句聲明了一個GPIO_InitStructure的結構體,該結構體用來初始化stm32的GPIO。

GPIO_InitStructure的結構體采用函數GPIO_InitTypeDef來初始化。如果想要查看函數GPIO_InitTypeDef的具體定義,可以選擇GPIO_InitTypeDef後,單擊鼠标右鍵,在打開的快捷菜單中選擇Go To Definition Of 'GPIO_InitTypeDef'選項,如圖1所示。

stm32應用框架(零基礎學習STM32智能家居系統之STM32模闆程序解讀)1

圖1 查看函數GPIO_InitTypeDef

單擊後可以進入到GPIO_InitTypeDef函數體内,如圖2所示。

stm32應用框架(零基礎學習STM32智能家居系統之STM32模闆程序解讀)2

圖2 函數GPIO_InitTypeDef

具體内容為:

typedef struct

{

uint16_t GPIO_Pin;

GPIOSpeed_TypeDef GPIO_Speed;

GPIOMode_TypeDef GPIO_Mode;

}GPIO_InitTypeDef;

結構體中的第一句uint16_t GPIO_Pin定義了相應的IO口;第二句GPIOSpeed_TypeDef GPIO_Speed是對所定義IO的引腳速度;第三句GPIOMode_TypeDef GPIO_Mode定義了IO口的引腳模式。

②RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

第二句是對外設時鐘的處理,RCC_APB2PeriphClockCmd函數用來開啟或關閉APB2外設時鐘。RCC_APB2Periph_GPIOC表示給端口GPIOC(PC)執行操作;ENABLE表示操作為使能。

stm32應用框架(零基礎學習STM32智能家居系統之STM32模闆程序解讀)3

圖3 STM32時鐘樹(摘自正點原子STM32材料)

圖3表示的是STM32的時鐘樹。

③ ④ ⑤ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

③ ④ ⑤這三句是根據GPIO_InitTypeDef的參數給IO引腳進行賦值。

第③ 句 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;表示引腳定義為PC13;

第④句 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;表示IO口設置為推挽輸出;GPIO的引腳為了保證正常工作常接兩個保護二極管(MOS管),根據兩個MOS管的工作狀态可以分為若幹種輸出方式,推挽是其中的一種,兩個二極管都工作。

第⑤句 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;表示速度為50HZ .

⑥GPIO_Init(GPIOC, &GPIO_InitStructure);按以上GPIO_InitStructure的設置初始化GPIOC口

⑦GPIO_SetBits(GPIOC,GPIO_Pin_13); 對PC13端口設置高電平。

⑧GPIO_ResetBits(GPIOC,GPIO_Pin_13); 對PC13端口設置低電平。

圖4為LED燈的接線圖,可以看出LED燈接在PC13引腳上,所以系統先對PC13引腳進行初始化,最後設置PC13引腳的電平為高電平,LED燈初始化狀态為滅。

stm32應用框架(零基礎學習STM32智能家居系統之STM32模闆程序解讀)4

圖4 LED燈接線圖

在後面的主程序中:

while(1)

{

GPIO_ResetBits(GPIOC,GPIO_Pin_13);

Delay(3000000);

GPIO_SetBits(GPIOC,GPIO_Pin_13);

Delay(3000000);

}

通過GPIO_ResetBits()和GPIO_SetBits()來改變PC13的電平,并結合Delay()延遲函數來控制LED燈循環亮和滅。

4.2 HARDWARE 文件夾中的外設規範化處理

為了規範化處理外設,模闆中應該單獨設置HARDWARE 文件夾來單獨處理與外設相關的操作。處理的步驟如下:

步驟一:在 HARDWARE 文件夾下創建外設文件夾,以 LED 燈為例,如圖 5所示。

stm32應用框架(零基礎學習STM32智能家居系統之STM32模闆程序解讀)5

圖5 創建外設文件夾LED

步驟二:在LED文件夾下創建兩個文件led.c和led.h,如圖6所示。

stm32應用框架(零基礎學習STM32智能家居系統之STM32模闆程序解讀)6

圖6 創建文件

步驟三:進入keil中,為HARDWARE添加文件led.c,如圖7所示。

stm32應用框架(零基礎學習STM32智能家居系統之STM32模闆程序解讀)7

圖7 添加文件

步驟四:為項目添加HARDWARE下的LED頭文件,如圖8所示。

stm32應用框架(零基礎學習STM32智能家居系統之STM32模闆程序解讀)8

圖8 添加頭文件

步驟五:回到主界面,對程序進行編譯,這時可以看到HARDWARE下的led.c和led.h,如圖9所示。

stm32應用框架(零基礎學習STM32智能家居系統之STM32模闆程序解讀)9

圖9 led.c和led.h文件

步驟七:向led.c和led.h中添加代碼。

led.c

#include "led.h"

void LED_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOC, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOC, &GPIO_InitStructure);

GPIO_SetBits(GPIOC,GPIO_Pin_13);

}

led.h

#ifndef __LED_H

#define __LED_H

#include "sys.h"

#define LED2 PCout(13)

void LED_Init(void);

#endif

4.3 編寫main.c代碼

#include "sys.h"

#include "delay.h"

#include "usart.h"

#include "led.h"

int main(void)

{

delay_init(); //延時函數初始化

LED_Init(); //初始化與LED連接的硬件接口

while( 1)

{

LED2=0;

delay_ms(300); //延時300ms

LED2=1;

delay_ms(300); //延時300ms

}

}

以上是STM32 開發模闆程序的解讀,歡迎共同讨論,糾錯。期待點贊、轉發。粉絲朋友可直接私信索要相關資料(包括模闆及源代碼)。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
番茄晚疫病發生原因
番茄晚疫病發生原因
1、濕度。如果番茄在生長的時候突然遇到了陰雨天氣,那麼田間空氣的濕度就會很大,這種天氣很容易加重晚疫病的危害。2、溫度。在我們種植番茄的時候,如果溫度在18℃-20℃的時候,晚疫病也會非常容易出現,而高溫天氣下,晚疫病的發生幾率也會小很多。3、種植結構。如果你經常連作種植,那麼病原菌的數量就會逐年增...
2026-02-25
如何把幾張照片合并成一張照片
如何把幾張照片合并成一張照片
演示機型:Iphone12&&華為P40&&小米11系統版本:iOS14.4&&EMUI11&&MIUI12.0.7APP版本:美圖秀秀9.1.801、首先在手機裡安裝下載美圖秀秀,進入後點擊右邊的裝飾圖标。2、選擇趣味多圖中一種樣式。3、在手機相冊裡面選擇要合并的圖片。4、即可看到剛剛選擇的四張圖片已經合并在一起,并且比較美觀。5、點擊底部的更多圖标,可以更換成多種樣式。6、在樣式确定合并完成之
2026-02-25
支持鴻蒙系統的設備
支持鴻蒙系統的設備
演示機型:HuaweiMate40系統版本:HarmonyOS2.0HuaweiMate40、HuaweiMate40Pro、HuaweiMate40Pro+、HuaweiMate40RSPorscheDesign、HuaweiMateX、HuaweiMateXs、HuaweiP40、HuaweiP40Pro、HuaweiP40Pro+、HuaweiMate304G、HuaweiMate30Pro
2026-02-25
車輛報廢流程是什麼
車輛報廢流程是什麼
1、帶證件到解體廠。2、核發汽車報廢通知。3、将車輛送正規拆解廠。4、拍照五大總成解體。5、持解體照片辦理報廢登記。6、申領補貼。
2026-02-25
word文檔如何增加一頁
word文檔如何增加一頁
1、以華為MateBookX,win10,MicrosoftOffice2020為例,在word中點擊工具欄的“插入”選項卡。找到并點擊“空白頁”即可為WORD文檔增加一個頁面。MicrosoftOfficeWord是微軟公司的一個文字處理器應用程序。最初由RichardBrodie為了運行DOS的IBM計算機而在1983年編寫。随後的版本可運行于A
2026-02-25
Copyright 2023-2026 - www.tftnews.com All Rights Reserved