tft每日頭條

 > 科技

 > stm32應用框架

stm32應用框架

科技 更新时间:2024-12-19 10:11:19

在上一節中,我們在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 開發模闆程序的解讀,歡迎共同讨論,糾錯。期待點贊、轉發。粉絲朋友可直接私信索要相關資料(包括模闆及源代碼)。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved