固件庫點亮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 ;
}
}