首页
/
每日頭條
/
科技
/
stm32應用框架
stm32應用框架
更新时间:2024-08-06 09:11:09

在上一節中,我們在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
推荐阅读
win10卸載ie11失敗
win10卸載ie11失敗
題圖viageekwire前兩天新版Edge的文章中有小夥伴問如何卸載IE11,今天來介紹兩種方式。1、通過“可選功能”操作打開設置->應用->應用和功能找到InternetExplorer11->點擊卸載重啟後IE就卸載了。安裝請選擇“添...
2024-08-06
初二物理重難點
初二物理重難點
《透鏡及其應用》在光學中既是重點又是難點,今天我把整理出來,相互交流。初中物理的複習,無論是期末還是中考,抓住命題方向才是重點。才能真正做到有的放矢,事半功倍。如果需要點贊轉發加微信。隻為傳播正能量!知識點一、透鏡1.透鏡的概念和分類,透鏡...
2024-08-06
2022年3月高性價比筆記本電腦推薦
2022年3月高性價比筆記本電腦推薦
大過年的,好不容易放幾天假,就别說自己累得像條狗了。其實,狗沒那麼累。所以今天,Yo哥就随便聊聊2022年初,比較推薦的4台筆記本電腦!以及大學生該選哪個?準備買電腦的小夥伴,一定要看完!點贊了嗎?關注了嗎?謝謝!2022年初,Yo推薦的第...
2024-08-06
多個路由器如何設置上網方式
多個路由器如何設置上網方式
多個路由器如何設置上網方式?多台路由器組網連接上網怎麼設置?本文主要以有線路由器TL-R460和無線路由器TL-WR541G為例為詳細教大家多台路由器組網設置教程,今天小編就來說說關于多個路由器如何設置上網方式?下面更多詳細答案一起來看看吧...
2024-08-06
魅族手機怎麼樣查看wifi密碼
魅族手機怎麼樣查看wifi密碼
日常生活中有時會忘記以前設置WIFI的密碼,或者是通過WIFI萬能鑰匙連接上了一個目标WIFI,需要查看其密碼,以便其他設備使用。我以小米手機為例,系統是MIUI9.5穩定版。安卓據我所知隻有小米、華為、榮耀、魅族可以,IOS均不可以。​1...
2024-08-06
Copyright 2023-2024 - www.tftnews.com All Rights Reserved