STM32F103C8T6——LED灯闪烁实验

本文介绍了如何使用STM32的GPIO口控制LED灯的闪烁,包括GPIO的不同输入输出模式(如浮空、上拉、下拉和模拟输入),以及如何配置为推挽输出驱动LED。还详细讲解了使用Delay函数实现LED的定时闪烁,并给出了实验接线和代码示例。
摘要由CSDN通过智能技术生成

LED灯闪烁实验用到了STM32中的一个外设GPIO口,通过对GPIO口的配置使引脚输出高低电平来驱动LED灯的闪烁,下面简单介绍一下GPIO的输入输出模式和配置GPIO口:

输入模式:

1、浮空输入(Floating Input):GPIO引脚可以被用来检测外部输入电平。例如,将GPIO引脚连接到按键,通过检测电平高低可以判断按键是否被按下。

2、上拉输入(Pull-Up Input)下拉输入(Pull-Down Input):在这两种模式下,GPIO内部会有上拉或下拉电阻,可以用来读取外部电平状态。

3、模拟输入(Analog Input):这种模式用于读取模拟量,即具体的电压值,这在ADC(模数转换器)中会被用到,将模拟量转化为数字量。

输出模式:

1、开漏输出(Open-Drain Output):此模式下,GPIO只能输出低电平,高电平需要外部电阻拉高。

2、推挽输出(Push-Pull Output):在这种模式下,GPIO可以输出强高低电平。当输出高电平时,电流输出到负载,称为灌电流;当输出低电平时,负载电流流向芯片,称为拉电流。推挽结构指两个三极管受两路互补的信号控制,总是在一个导通的时候另外一个截止,优点是开关效率高,电流大,驱动能力强。

在LED灯闪烁实验中LED相当于负载STM32需要输出高或低电平到LED灯,从而点亮或者熄灭LED灯(由此可以知道下面实验应该使GPIO口配置到推挽输出模式),再加上使用延迟函数Delay()来控制LED点亮或者熄灭的时长,使LED达到自己想要的闪烁效果。

GPIO口配置:

本次实验我们使用STM32的GPIOA外设Pin_0口进行LED所需的高低电平输出,配置GPIOA前要将GPIOA的外部时钟开启,再采用结构体进行GPIO初始化,GPIOA外部时钟和GPIO初始化的配置只需要调用STM32的库函数进行相应的函数配置即可:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启GPIOA时钟
GPIO_InitTypeDef GPIO_IntStructure;//定义结构体变量
GPIO_IntStructure.GPIO_Mode= GPIO_Mode_Out_PP;//设置为推挽模式
GPIO_IntStructure.GPIO_Pin= GPIO_Pin_0;//初始化0号引脚
GPIO_IntStructure.GPIO_Speed= GPIO_Speed_50MHz;//GPIO速度,赋值为50MHz
GPIO_Init(GPIOA,&GPIO_IntStructure);//将赋值后的构体变量传递给GPIO_Init函数
Pin_0口输出高低电平:

GPIOA配置好后,调用STM32库函数GPIO_ResetBits()使引脚Pin_0输出低电平,调用GPIO_SetBits使引脚Pin_0输出高电平:

GPIO_ResetBits(GPIOA, GPIO_Pin_0);//将PA0引脚设置为低电平
GPIO_SetBits(GPIOA, GPIO_Pin_0);//将PA0引脚设置为高电平

Delay()延迟函数:
void Delay_ms(uint32_t xms)
{
	while(xms--)
	{
		Delay_us(1000);
	}
}
实验LED灯接线:

把LED灯的正极接STM32PA0口,负极接面包板负极,如下图:

实验代码:
#include "stm32f10x.h"                  // Device header

void Delay_ms(uint32_t xms)//延迟函数
{
	while(xms--)
	{
		Delay_us(1000);
	}
}

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启GPIOA时钟
	GPIO_InitTypeDef GPIO_IntStructure;//定义结构体变量
	GPIO_IntStructure.GPIO_Mode= GPIO_Mode_Out_PP;//设置为推挽模式
	GPIO_IntStructure.GPIO_Pin= GPIO_Pin_0;//初始化0号引脚
	GPIO_IntStructure.GPIO_Speed= GPIO_Speed_50MHz;//GPIO速度,赋值为50MHz
	GPIO_Init(GPIOA,&GPIO_IntStructure);//将赋值后的构体变量传递给GPIO_Init函数
	
	while(1)
	{
		GPIO_ResetBits(GPIOA, GPIO_Pin_0);//将PA0引脚设置为低电平
		Delay_ms(500);//延迟500ms
		GPIO_SetBits(GPIOA, GPIO_Pin_0);//将PA0引脚设置为高电平
		Delay_ms(500);//延迟500ms
	}
}

Delay_ms(500):LED灯点亮0.5秒后熄灭0.5秒(500ms=0.5s),想要不同的点亮或者熄灭时间可调整500数值,调节成自己想要的效果。

实验现象:

LED灯闪烁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值