1. 程式人生 > 其它 >使用韌體庫點亮led燈

使用韌體庫點亮led燈

1. 專案

  使用STM32F103VE的韌體庫實現流水燈設計。

2. 程式碼

  由於這是基於野火的視訊進行學習的,專案程式碼在上節基礎上進行編寫的。

  點亮綠燈:

  main.c

#include "stm32f10x.h"			//相當於51微控制器中的 	#include <reg51.h>
#include "bsp_led.h"
void Delay(uint32_t count)
{
	for(; count!=0; count--);
}

int main(void)
{
	//來到這裡是,系統的時鐘已經被配置到72MHz了
	LED_GPIO_Config();	//初始化LED函式
	while(1)
	{
		GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);	//熄滅LED
		Delay(0xfffff);
		GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);	//點亮LED
		Delay(0xfffff);
	}
}

  bsp_led.c

#include "bsp_led.h"

void LED_GPIO_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	
	RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE);
	GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN; 
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);
}

  bsp_led.h

#ifndef __bsp_led_h
#define __bsp_led_h

#include "stm32f10x.h"
#define LED_G_GPIO_PIN						GPIO_Pin_0
#define LED_G_GPIO_PORT						GPIOB
#define LED_G_GPIO_CLK						RCC_APB2Periph_GPIOB

void LED_GPIO_Config(void);
#endif /*__bsp_led._h*/

  點亮紅藍燈只需將對應程式碼替換即可

  main.c中需替換的程式碼:

		GPIO_SetBits(LED_R_GPIO_PORT,LED_R_GPIO_PIN);	//熄滅LED
		Delay(0xfffff);	
		GPIO_ResetBits(LED_R_GPIO_PORT,LED_R_GPIO_PIN);	//點亮LED
		Delay(0xfffff);


		
		GPIO_SetBits(LED_B_GPIO_PORT,LED_B_GPIO_PIN);	//熄滅LED
		Delay(0xfffff);
		GPIO_ResetBits(LED_B_GPIO_PORT,LED_B_GPIO_PIN);	//點亮LED
		Delay(0xfffff);

  bsp_led.c中需要替換的程式碼:

	GPIO_InitStruct.GPIO_Pin = LED_R_GPIO_PIN; 
	RCC_APB2PeriphClockCmd(LED_R_GPIO_CLK, ENABLE);
	GPIO_Init(LED_R_GPIO_PORT, &GPIO_InitStruct);
	
	GPIO_InitStruct.GPIO_Pin = LED_B_GPIO_PIN;
	RCC_APB2PeriphClockCmd(LED_B_GPIO_CLK, ENABLE);
	GPIO_Init(LED_B_GPIO_PORT, &GPIO_InitStruct);

  bsp_led.h中需要替換的程式碼:

#define LED_R_GPIO_PIN						GPIO_Pin_5
#define LED_R_GPIO_PORT						GPIOB
#define LED_R_GPIO_CLK						RCC_APB2Periph_GPIOB


#define LED_B_GPIO_PIN						GPIO_Pin_1
#define LED_B_GPIO_PORT						GPIOB
#define LED_B_GPIO_CLK						RCC_APB2Periph_GPIOB

3. 參考資料

  •   原理圖
  • 函式執行流程

(1) 使用 GPIO_InitTypeDef 在bsp_led.c中定義 GPIO_InitStruct初始化結構體變數,以便下面用於儲存 GPIO 配置。

(2) 呼叫庫函式 RCC_APB2PeriphClockCmd 來使能 LED 燈的 GPIO 埠時鐘,該函式有兩個輸入引數,第一個引數用於指示要配置的時鐘,如本例中的“LED_G_GPIO_CLK”;

 函式的第二個引數用於設定狀態,可輸入“Disable關閉或“Enable”使能時鐘。

(3) GPIO 初始化結構體賦值,把引腳初始化成推輓輸出模式,其中的 GPIO_Pin 使用巨集LED_X_GPIO_PIN”來賦值,使函式的實現方便移植。

(4) 使用以上初始化結構體的配置,呼叫 GPIO_Init 函式向暫存器寫入引數,完成 GPIO 的初始化,這裡的 GPIO 埠使用“LED_X_GPIO_PORT”巨集來賦值,也是為了程式移植方便。

(5) 使用同樣的初始化結構體,只修改控制的引腳和埠,初始化其它 LED 燈使用的 GPIO 腳。
(6) 使用巨集控制 RGB 燈預設關閉。