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); } } ************************************************************************************************** **/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具