点亮一个LED灯珠

点亮一个时间间隔,亮度时间,次数可控的LED

typedef struct led_contribution		//led的相关属性,包括次数,闪烁时间,间隔
{
	uint16_t interval[2];
	uint16_t num;
}led_con;
led_con red_led;

void led_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
		
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD, ENABLE);	
	
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Pin = LED_RED_PIN;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;	
	GPIO_Init(LED_RED_PORT, &GPIO_InitStruct);	
	
	GPIO_SetBits(LED_RED_PORT, LED_RED_PIN);	
	
	led_set(1000, 250, 3);
}


void led_flash(void)
{
	static uint32_t now;
	static uint8_t i = 0;
	
	if(red_led.num != 0)
	{
		if(millis() - now >= red_led.interval[i])
		{
			now = millis();
			i++;
			if(i > 1)
			{
				i = 0;
			}
			
			if((red_led.num & 1) == 1)
			{
				RED_OFF;
			}
			else
			{
				RED_ON;				
			}	
			red_led.num--;			
		}
	}
}

void led_set(uint16_t interval, uint16_t duration, uint16_t num)
{
	red_led.interval[0] = interval;
	red_led.interval[1] = duration;
	red_led.num = num * 2;
}

led_flash();在主函数中循环,时间单位为ms;通过led_set();就能想要按照自己的想法让LED闪烁啦。
当然也可以设置相应的宏给到这些变量。

版权声明:本文为CSDN博主「xinshou249」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xinshou249/article/details/121925847

生成海报
点赞 0

xinshou249

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

RT-Thread Studio移植LAN8720A驱动

RTT网络协议栈驱动移植(霸天虎) 1、新建工程 ​ 工程路径不含中文路径名,工程名用纯英文不含任何符号。 2、用CubeMx配置板子外设 2.1、配置时钟 ​ 按照自己板子配置相应时钟。

【STM32Cube笔记】12-配置外部中断

【STM32Cube笔记】系列文章目录 1-基于STM32的VSCode入门级教程前言 2-STM32Cube安装教程 3-STM32CubeIDE汉化 4-STM32Cube配置时钟设置 5-跑马灯引脚配置 6-Cortex-M7内核基本配

stm32cubemx+HAL+串口接收中断

stm32cubemxHAL串口接收中断 在cubemx配置完串口和global interrupt后需要在keil中添加如下代码。 第一步:在main函数中添加接收中断标志位开启函数 HAL_UART_Receive_IT