STM32开发--LED

1.头文件led.h 首先对LED的IO端口进行定义,对LED的端口进行宏定义方便调用,到时候只需要在头文件里宏定义进行修改端口的引脚而不用到初始化函数里进行修改 

复制代码
#ifndef __LED_H
#define __LED_H     
#include "sys.h"

#define LED0_PORT_RCC  RCC_APB2Periph_GPIOB    //LED0所在端口时钟
#define LED0_PORT      GPIOB                   //LED0所在端口
#define LED0_PIN       GPIO_Pin_5              //LED0所在端口引脚

#define LED1_PORT_RCC  RCC_APB2Periph_GPIOE    //LED1所在端口时钟
#define LED1_PORT      GPIOE                   //LED1所在端口
#define LED1_PIN       GPIO_Pin_5              //LED1所在端口引脚

//位带操作
#define LED0 PBout(5)// PB5
#define LED1 PEout(5)// PE5    

void LED_Init(void);//初始化

                             
#endif
复制代码

 

 

2.源文件led.c 定义LED的IO端口配置

复制代码
#include "led.h"

        

//初始化PB5和PE5为输出口.并使能这两个口的时钟            
//LED IO初始化
void LED_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
     
 RCC_APB2PeriphClockCmd(LED0_PORT_RCC|LED1_PORT_RCC, ENABLE);     //使能PB,PE端口时钟
    
 GPIO_InitStructure.GPIO_Pin = LED0_PIN;           //LED0-->PB.5 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
 GPIO_Init(LED0_PORT, &GPIO_InitStructure);        //根据设定参数初始化GPIOB.5
 GPIO_SetBits(LED0_PORT,LED0_PIN);                 //PB.5 输出高

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
 GPIO_InitStructure.GPIO_Pin = LED1_PIN;           //LED1-->PE.5 端口配置, 推挽输出
 GPIO_Init(LED1_PORT, &GPIO_InitStructure);        //推挽输出 ,IO口速度为50MHz
 GPIO_SetBits(LED1_PORT,LED1_PIN);                 //PE.5 输出高 
}
复制代码

 

mian.c文件

复制代码
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"

 int main(void)
 {    
    delay_init();        //延时函数初始化      
    LED_Init();              //初始化与LED连接的硬件接口
    while(1)
    {
        LED0=0;
        LED1=1;
        delay_ms(300);     //延时300ms
        LED0=1;
        LED1=0;
        delay_ms(300);    //延时300ms
    }
 }


 /**
 *****************下面注视的代码是通过调用库函数来实现IO控制的方法*****************************************
int main(void)
{ 
 
    delay_init();          //初始化延时函数
    LED_Init();                //初始化LED端口
    while(1)
    {
            GPIO_ResetBits(GPIOB,GPIO_Pin_5);  //LED0对应引脚GPIOB.5拉低,亮  等同LED0=0;
            GPIO_SetBits(GPIOE,GPIO_Pin_5);   //LED1对应引脚GPIOE.5拉高,灭 等同LED1=1;
            delay_ms(300);             //延时300ms
            GPIO_SetBits(GPIOB,GPIO_Pin_5);       //LED0对应引脚GPIOB.5拉高,灭  等同LED0=1;
            GPIO_ResetBits(GPIOE,GPIO_Pin_5); //LED1对应引脚GPIOE.5拉低,亮 等同LED1=0;
            delay_ms(300);                     //延时300ms
    }
} 
 
 ****************************************************************************************************
 ***/
 

    
/**
*******************下面注释掉的代码是通过 直接操作寄存器 方式实现IO口控制**************************************
int main(void)
{ 
 
    delay_init();          //初始化延时函数
    LED_Init();                //初始化LED端口
    while(1)
    {
     GPIOB->BRR=GPIO_Pin_5;//LED0亮
       GPIOE->BSRR=GPIO_Pin_5;//LED1灭
         delay_ms(300);
     GPIOB->BSRR=GPIO_Pin_5;//LED0灭
       GPIOE->BRR=GPIO_Pin_5;//LED1亮
         delay_ms(300);

     }
 }
**************************************************************************************************
**/
复制代码

 

posted @   Horizon_PHR  阅读(207)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示