GPIO的使用--操作PF09 PF10 PF08实现呼吸灯、跑马灯、警报闪烁灯
先来个呼吸灯演示
呼吸灯
目录
一、GPIO的介绍
1.含义
2.控制原理
3.控制流程
二、LED控制
1.呼吸灯
操作代码
烧录结果
2.蜂鸣器+红绿灯交替
操作代码
3.红绿灯交替闪烁
操作代码
一、GPIO的介绍
1.含义
GPIO(general porpose intput output),通用输入输出端口。通过程序,借助芯片外接的引脚(GPIO)来控制硬件设备上的的器件。芯片和引脚如图所示:
2.控制原理
电流输出的高低,是由程序决定的,芯片中的程序决定给这根电线供电或断电,芯片外侧接LED灯,可以通过观察led灯的亮灭判断我们的控制是否成功。
3.控制流程
二、LED控制
1.呼吸灯
操作代码
#include "stm32f4xx.h" // Device header
//呼吸灯delay
void delay2(uint32_t t)
{
while(t--);
}
int main()
{
//时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
//GPIO时钟控制 //参数配置,五大参数
//让程序决定第几组第几根引脚,如何工作
GPIO_InitTypeDef led_gpio;
led_gpio.GPIO_Mode = GPIO_Mode_OUT; //参数一:引脚以何种方式工作,输出->led灯只能是输出
led_gpio.GPIO_OType = GPIO_OType_PP; //参数二:推挽或开漏,只设置其一 GPIO_OType_PP推挽; GPIO_OType_OD开漏
led_gpio.GPIO_Pin = GPIO_Pin_9| GPIO_Pin_10;//参数三:引脚工作成员;9、10两个成员同时工作
key_gpio.GPIO_Speed=GPIO_High_Speed; //参数四:gpio的反应速率,不太影响
key_gpio.GPIO_PuPd=GPIO_PuPd_UP; //参数五:上拉 GPIO_PuPd_DOWN 下拉//GPIO_PuPd_NOPULL
GPIO_Init(GPIOF,&led_gpio); //初始化变量
//GPIO操控
while(1)
{
uint32_t time;
while(1)
{
GPIO_SetBits(GPIOF,GPIO_Pin_10);
GPIO_ResetBits(GPIOF, GPIO_Pin_9);
delay2(time);
GPIO_ResetBits(GPIOF, GPIO_Pin_10);
GPIO_SetBits(GPIOF,GPIO_Pin_9);
delay2(5000-time);
time++;
if(time == 5000) break;
}
while(1)
{
GPIO_SetBits(GPIOF,GPIO_Pin_10);
GPIO_ResetBits(GPIOF, GPIO_Pin_9);
delay2(time);
GPIO_ResetBits(GPIOF, GPIO_Pin_10);
GPIO_SetBits(GPIOF,GPIO_Pin_9);
delay2(5000-time);
time--;
if(time == 0) break;
}
}
}
烧录结果
2.蜂鸣器+红绿灯交替
操作代码
#include "stm32f4xx.h" // Device header
void delay()
{
uint32_t t=6000000;
while(t--);
}
int main()
{
//时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
//GPIO时钟控制 //参数配置,五大参数
//让程序决定第几组第几根引脚,如何工作
GPIO_InitTypeDef led_gpio;
led_gpio.GPIO_Mode = GPIO_Mode_OUT; //参数一:引脚以何种方式工作,输出->led灯只能是输出
led_gpio.GPIO_OType = GPIO_OType_PP; //参数二:推挽或开漏,只设置其一 GPIO_OType_PP推挽; GPIO_OType_OD开漏
led_gpio.GPIO_Pin = GPIO_Pin_9| GPIO_Pin_10;//参数三:引脚工作成员;9、10两个成员同时工作
key_gpio.GPIO_Speed=GPIO_High_Speed; //参数四:gpio的反应速率,不太影响
key_gpio.GPIO_PuPd=GPIO_PuPd_UP; //参数五:上拉 GPIO_PuPd_DOWN 下拉//GPIO_PuPd_NOPULL
GPIO_Init(GPIOF,&led_gpio); //初始化变量
//GPIO操控
while(1)
{
GPIO_SetBits(GPIOF, GPIO_Pin_8);
GPIO_ResetBits(GPIOF, GPIO_Pin_9);
delay();
GPIO_SetBits(GPIOF, GPIO_Pin_9);
GPIO_ResetBits(GPIOF, GPIO_Pin_8);
GPIO_ResetBits(GPIOF, GPIO_Pin_10);
delay();
GPIO_SetBits(GPIOF, GPIO_Pin_10);
}
}
3.跑马灯--红绿灯交替闪烁
操作代码
#include "stm32f4xx.h" // Device header
void delay()
{
uint32_t t=6000000;
while(t--);
}
int main()
{
//时钟使能
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
//GPIO时钟控制 //参数配置,五大参数
//让程序决定第几组第几根引脚,如何工作
GPIO_InitTypeDef led_gpio;
led_gpio.GPIO_Mode = GPIO_Mode_OUT; //参数一:引脚以何种方式工作,输出->led灯只能是输出
led_gpio.GPIO_OType = GPIO_OType_PP; //参数二:推挽或开漏,只设置其一 GPIO_OType_PP推挽; GPIO_OType_OD开漏
led_gpio.GPIO_Pin = GPIO_Pin_9| GPIO_Pin_10;//参数三:引脚工作成员;9、10两个成员同时工作
key_gpio.GPIO_Speed=GPIO_High_Speed; //参数四:gpio的反应速率,不太影响
key_gpio.GPIO_PuPd=GPIO_PuPd_UP; //参数五:上拉 GPIO_PuPd_DOWN 下拉//GPIO_PuPd_NOPULL
GPIO_Init(GPIOF,&led_gpio); //初始化变量
//GPIO操控
while(1)
{
GPIO_ResetBits(GPIOF, GPIO_Pin_9);
delay();
GPIO_SetBits(GPIOF, GPIO_Pin_9);
GPIO_ResetBits(GPIOF, GPIO_Pin_10);
delay();
GPIO_SetBits(GPIOF, GPIO_Pin_10);
}
}