一、IO简介

    (1)工程目录

实验1:跑马灯实验

二、原理图

实验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); 
    }
}

相关文章: