STM32几种让LED灯闪烁的方法

 

目录

1.硬件连接

2.main函数部分代码呈现

3.led.c部分呈现 

4.led.h部分呈现

5.延时函数呈现


1.硬件连接

 

        本代码所选择的硬件连接是将LED1连接在单片机的PB0端口上,将LED2连接在单片机的PB1端口上。

2.main函数部分代码呈现

#include "stm32f10x.h" //STM32Í·Îļþ
#include "sys.h"
#include "delay.h"
#include "led.h"


int main (void){//主程序
	RCC_Configuration(); //时钟初始化¯
	LED_Init();//LED初始化
	while(1){
		
		//方法一
		GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1)); //LED1接口输出高电平1
		delay_us(50000); //延时一秒
		GPIO_WriteBit(LEDPORT,LED1,(BitAction)(0)); //LED1接口输出低电平0
		delay_us(50000); //延时一秒
		
		//方法二
//		GPIO_WriteBit(LEDPORT,LED1,(BitAction)(1-GPIO_ReadOutputDataBit(LEDPORT,LED1))); //取反LED1
//		delay_ms(500); //延时一秒
		
		//方法三
//		GPIO_SetBits(LEDPORT,LED1); //LED1为高电平1
//		delay_s(1); //延时一秒
//		GPIO_ResetBits(LEDPORT,LED1); //LED1为低电平0
//		delay_s(1); //延时一秒

	}
}

3.led.c部分呈现 

#include "led.h"

void LED_Init(void){ //LED灯接口初始化初始化
	GPIO_InitTypeDef  GPIO_InitStructure; 	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);    //管脚初始化  
    GPIO_InitStructure.GPIO_Pin = LED1 | LED2; //选择端口号                       
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO口的工作方式      
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO口的速度(2/10/50MHz)    
	GPIO_Init(LEDPORT, &GPIO_InitStructure);			
}

4.led.h部分呈现

#ifndef __LED_H
#define __LED_H	 
#include "sys.h"

//#define LED1 PBout(0)// PB0
//#define LED2 PBout(1)// PB1	
#define LEDPORT	GPIOB	//定义IO接口
#define LED1	GPIO_Pin_0	//定义IO接口
#define LED2	GPIO_Pin_1	//定义IO接口



void LED_Init(void);//初始化

		 				    
#endif

5.延时函数呈现

delay.c

#include "delay.h"


#define AHB_INPUT  72  //请按RCC中设置的AHB时钟频率填写到这里(单位MHz)


void delay_us(u32 uS){ //uS微秒级延时程序(参考值即是延时数,72MHz时最大值233015)	
	SysTick->LOAD=AHB_INPUT*uS;      //重装计数初值(当主频是72MHz,72次为1微秒)
	SysTick->VAL=0x00;        //清空定时器的计数器
	SysTick->CTRL=0x00000005;//时钟源HCLK,打开定时器
	while(!(SysTick->CTRL&0x00010000)); //等待计数到0
	SysTick->CTRL=0x00000004;//关闭定时器
}

void delay_ms(u16 ms){ //mS毫秒级延时程序(参考值即是延时数,最大值65535)	 		  	  
	while( ms-- != 0){
		delay_us(1000);	//调用1000微秒的延时
	}
}
 
void delay_s(u16 s){ //S秒级延时程序(参考值即是延时数,最大值65535)	 		  	  
	while( s-- != 0){
		delay_ms(1000);	//调用1000毫秒的延时
	}
} 

 delay.h

#ifndef __DELAY_H
#define __DELAY_H 			   
#include "sys.h"
 
void delay_s(u16 s);
void delay_ms(u16 ms);
void delay_us(u32 us);

#endif

  • 6
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!要使STM32上的LED闪烁,您可以按照以下步骤进行操作: 1. 首先,确保您已经配置了STM32的开发环境,并且正确连接了LED到正确的引脚。 2. 在代码中包含必要的头文件,例如"stm32fxxx.h"或者对应的型号头文件。 3. 初始化GPIO引脚作为输出。您需要使用相应的函数来初始化引脚。例如,如果您要使用GPIOA的引脚5来控制LED,则可以使用类似如下的代码进行初始化: ```c RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // 使能GPIOA时钟 GPIOA->MODER |= GPIO_MODER_MODE5_0; // 将引脚设置为输出模式 GPIOA->OTYPER &= ~GPIO_OTYPER_OT5; // 将引脚设置为推挽输出 GPIOA->OSPEEDR |= GPIO_OSPEEDR_OSPEED5; // 设置引脚输出速度 GPIOA->PUPDR &= ~GPIO_PUPDR_PUPD5; // 禁用上拉和下拉电阻 ``` 4. 在主循环中使用延迟函数和GPIO寄存器来控制LED状态。您可以使用类似如下的代码来实现LED闪烁的效果: ```c while (1) { GPIOA->BSRR = GPIO_BSRR_BS5; // 将引脚置高,点亮LED delay(500); // 延迟一段时间 GPIOA->BSRR = GPIO_BSRR_BR5; // 将引脚置低,熄灭LED delay(500); // 延迟一段时间 } ``` 在这个示例中,使用了一个延迟函数来控制LED的亮和灭,您可以根据需要进行调整。 请注意,以上代码只是一个示例,具体的实现可能会根据您使用的STM32型号和开发环境有所不同。您需要根据您的具体情况进行相应的配置和修改。 希望对您有所帮助!如果您有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝天幻梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值