stm32實現LED燈亮滅
stm32實現LED燈亮滅
一、概述
本章中,不特殊說明都以stm32F103VET6為例,軟體平臺為iar6.4
通過檢視原理圖,我們的LED指示燈配置在PB8、PB9管腳上,通過配置GPIOB時鐘及引腳來控制指示燈的亮滅。
二、本章學習目標
- 學會檢視原理圖
- 理解stm32埠配置
- 學會操作使用iar程式設計工具
三、GPIO埠配置
1.配置開啟GPIO時鐘
STM32上電時外設時鐘預設不開啟,用要時需要先開啟時鐘,本例開啟GPIOA和GPIOB的時鐘。
參考程式碼:
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函式
- 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);
}
}
- 參考本例程下載
https://download.csdn.net/download/flyme2010/10592332