stm32使用延时实现呼吸灯寄存器版

stm32使用延时实现呼吸灯(寄存器)

该实验是使用STM32F103C8T6实现,使用寄存器编程。
呼吸灯:灯光的亮度在控制下不断的从亮到暗,再从暗到亮之间变化,感觉好像是人在呼吸。
一般使用PWM脉冲实现,其原理就时通过改变高电平的时间(占空比),从而实现呼吸灯的效果。在这里通过延时来模拟PWM脉冲。
PWM原理如下图所示:
stm32使用延时实现呼吸灯寄存器版_第1张图片
硬件说明如下图所示:
在这里插入图片描述

实现代码

1.宏定义

#define LED1_ON GPIOA->ODR |= (1 << 0);  //LED灯亮
#define LED1_OFF GPIOA->ODR &= ~(1 << 0);//LED灯灭

2.GPIO口初始化

void Led_Init(void)
{
     
	//打开时钟
	RCC->APB2ENR |= (1 << 2);
	//清零
	GPIOA->CRL &= ~(0XF << 0);
	//通用推挽输出
	GPIOA->CRL |= (0X3 << 0);
	//LED灯默认灭
	GPIOA->ODR &= ~(0XFF << 0); 
}

3.呼吸灯实现代码

void Breathe _Led(void)
{
     
	int i = 0;
	int num = 5000;//周期时间
	//由暗到亮变化
	for(i = 0; i < num; i++)
	{
     
		LED1_ON;
		delay_us(i);//高电平时间   微秒延时函数
		LED1_OFF;
		delay_us(num - i);//低电平时间
	}
	//由亮到暗变化
	for(i = num; i > 0; i--)
	{
     
		LED1_ON;
		delay_us(i);//高电平时间
		LED1_OFF;
		delay_us(num - i);//低电平时间
	}
}

4.主函数

int main(void)
{
     
	Led_Init();//LED灯初始化	
	while (1)
	{
     
		Breathe_Led();//呼吸灯
	}
}

如若有什么错误的地方还望指出。

你可能感兴趣的:(stm32,stm32,单片机)