STM32F1 - 点亮LED_标准库版

本文详细介绍了GPIO的工作原理,包括其工作模式(如模拟输入、上拉/下拉输入、推挽/开漏输出),并通过点灯实验展示了硬件设计(PB5和PE5控制LED)和C语言编程(GPIO_Init函数)。
摘要由CSDN通过智能技术生成


1> 硬件框图

1


2> 工作模式

2

C语言描述

/** 
  * @brief  Configuration Mode enumeration  
  */

typedef enum
{ GPIO_Mode_AIN = 0x0,			 // Analog Input    模拟输入 
  GPIO_Mode_IN_FLOATING = 0x04,	 // input floating  浮空输入
  GPIO_Mode_IPD = 0x28,			 // Input pull-down 下拉输入
  GPIO_Mode_IPU = 0x48,			 // Input pull-up   上拉输入
  GPIO_Mode_Out_OD = 0x14,		 // Output open-drain  开漏输出
  GPIO_Mode_Out_PP = 0x10,       // Output push-pull 推挽输出
  GPIO_Mode_AF_OD = 0x1C,        // Alternate function push-pull 复用推挽输出
  GPIO_Mode_AF_PP = 0x18         // Alternate function open-drain 复用开漏输出
}GPIOMode_TypeDef;

3> 点灯实验


3.1> 硬件设计

31
看原理图得到信息:

PB5控制DS0灯
PE5控制DS1灯
PB5,PE5引脚输出低电平,点亮LED;
输出高电平关闭LED;

3.2> 程序设计

bsp_led.c:

void LED_Init(void)
{
	GPIO_InitTypeDef gpio_Struct_tmp = {0};
	
	// 2话不说,先使能时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
	
	
	// PB5
	gpio_Struct_tmp.GPIO_Pin = GPIO_Pin_5;
	gpio_Struct_tmp.GPIO_Speed = GPIO_Speed_50MHz;
	gpio_Struct_tmp.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
	
	GPIO_Init(GPIOB, &gpio_Struct_tmp); 	
	
	// PE5
	gpio_Struct_tmp.GPIO_Pin = GPIO_Pin_5;
	gpio_Struct_tmp.GPIO_Speed = GPIO_Speed_50MHz;
	gpio_Struct_tmp.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
	
	GPIO_Init(GPIOE, &gpio_Struct_tmp);
}


void LED_On(void)
{
	GPIO_ResetBits(GPIOB, GPIO_Pin_5);
	GPIO_ResetBits(GPIOE, GPIO_Pin_5);
}



void LED_Off(void)
{
	GPIO_SetBits(GPIOB, GPIO_Pin_5);
	GPIO_SetBits(GPIOE, GPIO_Pin_5);
}

标准库初始化函数 套路:

Step 1> 先用初始化结构体类型GPIO_InitTypeDef ,定义1个临时变量;
Step 2> 给结构体中的成员赋值,例如,gpio_Struct_tmp.GPIO_Pin = GPIO_Pin_5;
Step 3> 把初始化结构体的地址,传给初始化函数 GPIO_Init(),
初始化函数把参数赋值给GPIO模块相关的寄存器,完成配置;

这招我得好好学学;


main.c:

int main(void)
{ 
	LED_Init();
	LED_Off();
	// LED_On();
	while(1) /* stop */;
	//return 0;		
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值