1. 程式人生 > >stm32實現LED燈亮滅

stm32實現LED燈亮滅

stm32實現LED燈亮滅

[email protected]

一、概述

本章中,不特殊說明都以stm32F103VET6為例,軟體平臺為iar6.4

通過檢視原理圖,我們LED指示燈配置在PB8、PB9管腳上,通過配置GPIOB時鐘及引腳來控制指示燈的亮

 

二、本章學習目標

  1. 學會檢視原理圖
  2. 理解stm32埠配置
  3. 學會操作使用iar程式設計工具

三、GPIO埠配置

1.配置開啟GPIO時鐘

STM32上電時外設時鐘預設不開啟,用要時需要啟時鐘,本例開啟GPIOAGPIOB的時鐘。 

參考程式碼:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);


2.設定GPIO輸出模式

 stm32F1提供了4種輸出模式(推輓輸出開漏輸出 複用推輓輸出 複用開漏輸出)和3種輸出速度;一般配置LED採用推輓輸出;

/*PB8,out*/

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

3、控制LED燈

參考原理圖,可以看出點亮LED燈需要IO口輸出電平;

LED亮(設低電平) GPIO_ResetBits(GPIOB, GPIO_Pin_8)       

LED滅(設高電平) GPIO_SetBits(GPIOB, GPIO_Pin_8)  

四、例程參考

1、開啟led

 iar程式設計工具找開led目錄下的工程,可以參考《Iar工程編譯和下載的使用教程.docx》文件;

2、led目錄結構說明

目錄/檔案

說明

/led

包含專案、工程檔案、除錯資訊等(.eww  .ewp)

|-Debug

包含除錯目錄

|-Debug/Exe

包含配置生成的.hex或.bin檔案

|-Debug/Obj

包含.o編譯檔案

/Startup

包含啟動檔案

startup_stm32f10x_hd.s啟動檔案

 

/user

User層目錄

 

|-app

應用相關

|-app/main.c

main主程式

|-com

串列埠相關

|-com/USART.c

配置串列埠呼叫程式

|-sys

系統相關

|-sys/stm32f10x_it.c

編寫中斷程式

|-sys/RCC

設定系統時鐘和匯流排時鐘

|-sys/delay.c

配置延時呼叫函式

|-sys/NVIC.c

配置NVIC中斷

../LibrariesM3

M3庫目錄

 

|-CMSIS

CMSIS核心層

CMSIS\Core\CM3\stm32f10x.h暫存器地址和結構體型別的定義

|STM32F10x_StdPeriph_Driver

Stm32f10x系列驅動檔案包

|-stm32v3.1.0.a

Stm32v3.1庫檔案

 

三、檔案內容說明

1、startup_stm32f10x_hd.s(啟動檔案)

檔案描述:

該檔案作為啟動時執行的第一步,這個檔案中有一段啟動程式碼。

程式碼工作流程:

(1) 初始化SP;

(2)  初始化PC指標 --- 指向iar_program_start

(3)  設定中斷向量表各exception的地址

(4)  全域性變數清零

(5)  轉向C語言的main函式

 

  1. system_stm32f10x.c(系統配置)

檔案描述:

system_stm32f10x.c裡的函式的功能是完成系統時鐘的配置,通過RCC.c呼叫system_stm32f10x.c內部的SystemInit的函式,進行系統時鐘的初始化;

3、NVIC.c(中斷配置程式)

檔案描述:

 配置使能系統中斷程式檔案,本例中主要配置使能USART1串列埠接收中斷;

3.1 NVIC_Configuration()

呼叫該函式主要設定中斷允許及中斷優先順序;

函式原型:

void NVIC_Configuration(void);

引數:(無)

返回值:(無)

 

4、RCC.c(配置系統時鐘程式)

檔案描述:

 配置使能系統時鐘程式檔案,本例中主要配置系統時鐘頻率設為72MHz;主要呼叫system_stm32f10x.c內部的SystemInit的函式,進行系統時鐘的初始化;

4.1 RCC_Configuration()

呼叫該函式主要設定中斷允許及中斷優先順序;

函式原型:

void RCC_Configurationvoid);

引數:(無)

返回值:(無)

 

5、bsp.c(板載驅動程式)

檔案描述:

 初始化所有的硬體裝置;

5.1 bsp_Init()

呼叫該函式主要配置時鐘,初始化所有的硬體裝置。該函式配置CPU暫存器和外設的暫存器並初始化一些全域性變數。只需要呼叫一次;

函式原型:

void bsp_Init(void);

引數:(無)

返回值:(無)

 

6、main.c(主程式)

檔案描述:

  初始化全域性變數,配置時鐘,初始化所有的硬體裝置,定時每秒切換執行led指示燈。

 

程式碼工作流程:

int main(void)

{

bsp_Init();//硬體初始化

        

    USART1_Puts("demo led\r\n");

while(1)

{

 

              SET_LED_1;

                

              delay_ms(1000); //1000毫秒  1秒

              

              CLR_LED_1;

 

        delay_ms(1000);

}

 

}

 

  1. 參考本例程下載

https://download.csdn.net/download/flyme2010/10592332