一、IO简介
(1)工程目录
二、原理图
三、初始化结构体
typedef struct
{
uint32_t GPIO_Pin; //设置IO口
GPIOMode_TypeDef GPIO_Mode; //设置GPIO的工作模式。
GPIO_Mode_IN (输入模式)
GPIO_Mode_OUT (输出模式)
GPIO_Mode_AF (复用模式)
GPIO_Mode_AN (模拟输入模式)
GPIOSpeed_TypeDef GPIO_Speed; //设置GPIO的输出速率。
GPIO_Speed_2MHz
GPIO_Speed_25MHz
GPIO_Speed_50MHz
GPIO_Speed_100MHz
GPIOOType_TypeDef GPIO_OType; //设置GPIO的输出类型。
GPIO_OType_PP (推挽输出)
GPIO_OType_OD (开漏输出)
GPIOPuPd_TypeDef GPIO_PuPd; //设置GPIO的上下拉
GPIO_PuPd_NOPULL (无上下拉)
GPIO_PuPd_UP (上拉)
GPIO_PuPd_DOWN (下拉)
}GPIO_InitTypeDef;
四、固件库函数
(1)GPIO初始化函数
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
(2)输出高电平
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
参数:
GPIO_Pin--->GPIO_Pin_x
(3)输出低电平
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
参数:
GPIO_Pin--->GPIO_Pin_x
五、程序
led.h文件
#ifndef __LED_H__
#define __LED_H__
#include "stm32f4xx_conf.h"
void LED_Config(void);
void LED_ON(uint16_t num);
void LED_OFF(uint16_t num);
#endif
led.c文件
#include "./LED/led.h"
/************************
功能:配置LED
参数:无
返回值:无
*************************/
void LED_Config(void)
{
GPIO_InitTypeDef initValue;
/*1、打开GPIO时钟*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOG,ENABLE);
/*2、配置GPIO的输出功能*/
initValue.GPIO_Mode = GPIO_Mode_OUT;
initValue.GPIO_OType = GPIO_OType_PP;
initValue.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;
initValue.GPIO_PuPd = GPIO_PuPd_UP;
initValue.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&initValue);
initValue.GPIO_Pin = GPIO_Pin_9;
GPIO_Init(GPIOG,&initValue);
/*3、设置默认值(默认灯灭)*/
GPIO_SetBits(GPIOE,GPIO_Pin_3);
GPIO_SetBits(GPIOE,GPIO_Pin_4);
GPIO_SetBits(GPIOG,GPIO_Pin_9);
}
/*******************************
功能:点亮指定的LED
参数:LED编号
返回值:无
********************************/
void LED_ON(uint16_t num)
{
switch(num)
{
case 1:
GPIO_ResetBits(GPIOG,GPIO_Pin_9);
break;
case 2:
GPIO_ResetBits(GPIOE,GPIO_Pin_4);
break;
case 3:
GPIO_ResetBits(GPIOE,GPIO_Pin_3);
break;
default:
break;
}
}
/*******************************
功能:点亮指定的LED
参数:LED编号
返回值:无
********************************/
void LED_OFF(uint16_t num)
{
switch(num)
{
case 1:
GPIO_SetBits(GPIOG,GPIO_Pin_9);
break;
case 2:
GPIO_SetBits(GPIOE,GPIO_Pin_4);
break;
case 3:
GPIO_SetBits(GPIOE,GPIO_Pin_3);
break;
default:
break;
}
}
main.c文件
#include "delay.h"
#include "./LED/led.h"
int main(void)
{
//配置GPIO
LED_Config();
while(1)
{
//点亮LED1
LED_ON(1);
LED_OFF(2);
LED_OFF(3);
delay_ms(500);
//点亮LED2
LED_ON(2);
LED_OFF(1);
LED_OFF(3);
delay_ms(500);
//点亮LED3
LED_ON(3);
LED_OFF(1);
LED_OFF(2);
delay_ms(500);
}
}