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灯闪烁
本文介绍了如何使用STM32的GPIO口控制LED灯的闪烁,包括GPIO的不同输入输出模式(如浮空、上拉、下拉和模拟输入),以及如何配置为推挽输出驱动LED。还详细讲解了使用Delay函数实现LED的定时闪烁,并给出了实验接线和代码示例。
3102

被折叠的 条评论
为什么被折叠?



