11-固件库点亮LED

原文链接:http://firebbs.cn/forum.php

固件库点亮LED

前提条件 建立一个固件库工程模板可以参考以下博客
https://blog.csdn.net/cainaiolin/article/details/52012786

硬件基础
11-固件库点亮LED
我的开发板上面一共有三个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	;
	}
}


上一篇:100BASE-TX / 100BASE-T4/100BASE-FX


下一篇:nRF52832-Bluefruit52学习之MicroPython开发(4)-- 引脚GPIO