11-固件庫點亮LED

固件庫點亮LED

前提條件 建立一個固件庫工程模板可以參考以下博客
https://blog.csdn.net/cainaiolin/article/details/52012786

硬件基礎
在這裏插入圖片描述
我的開發板上面一共有三個led燈 我選擇點亮PB5這個燈

話不多說看代碼:新建一個文件名字爲“bsp_led.h”
BoardSupport Packet 的縮寫(板級支持包) 多用在用戶自己定義的文件中

#ifndef __BSP_LED_H
#define __BSP_LED_H

//R紅色的燈
/*-----LED 燈的 GPIO 端口、GPIO 引腳號以及 GPIO 端口時鐘----*/
#define 	LED1_GPIO_PORT		GPIOB
#define		LED1_GPIO_CLK		RCC_APB2Periph_GPIOB
#define 	LED1_GPIO_PIN		GPIO_Pin_5

/*直接操作寄存器的方法控制IO*/
#define		digitalHi(p,i)		{p->BSRR = i;}	//輸出高電平
#define		digitalLo(p,i)		{p->BRR = i;}	//輸出爲低電平
#define 	digitalToggle(p,i)	{p->ODR ^= i;}	//輸出爲反正狀態 異或

/*定義控制IO的宏*/
#define LED1_TOGGLE			digitalToggle(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED1_OFF			digitalHi(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED1_ON				digitalLo(LED1_GPIO_PORT,LED1_GPIO_PIN)


/*LED_GPIO初始化函數*/
void LED_GPIO_Config(void)
{
	/*定義一個GPIO_InitTypeDef類型的結構體*/
	GPIO_InitTypeDef GPIO_InitStructure;
	
	/*開啓LED的相關GPIO外設時鐘*/
	RCC_APB2PeriphClockCmd(LED1_GPIO_CLK,ENABLE);
	
	/*選擇需要控制的GPIO引腳*/
	GPIO_InitStructure.GPIO_Pin  = LED1_GPIO_PIN;
	
	/*設置引腳的模式爲通用推輓輸出模式*/
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	
	/*設置輸出的速率爲50MHz*/
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
	 /*選擇需要控制的引腳*/
	GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;
	
	/*調用GPIO_Init函數初始化GPIO端口*/
	GPIO_Init(LED1_GPIO_PORT,&GPIO_InitStructure);
	
	/*關閉所有燈*/
	GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);
	
}

#endif

LED_GPIO_Config 初始化函數步驟解讀
1.定義一個GPIO_InitTypeDef類型的變量,這個結構體中包含三個變量uint16_t GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode分別設置管腳,輸出速率,模式選擇。
2.開啓相關的GPIO口的時鐘
3.對GPIO_InitTypeDef類型的的變量進行賦值
4.調用GPIO_Init函數對GPIO端口進行初始化
5.LED默認是關閉的

主函數:main

#include"stm32f10x.h"
#include"bsp_led.h"
/*
	*@brief 	Main program
	*@param 	None
	*@retval  	Nane
*/

int main(void)
{
	LED_GPIO_Config();
	while(1)
	{
		LED1_ON	;
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章