【STM32】GPIO翻转操作实现流水灯

1.stm32cubemx配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.代码实现

实现四个灯的流转,一个灯亮500ms,然后灭500ms,四个灯都一样

1.打开GPIOB的时钟,以及配置模式

使用一个my_init()实现

__HAL_RCC_GPIOB_CLK_ENABLE();  //GPIOB时钟使能

配置模式
在这里插入图片描述
1.配置输出引脚,因为有四个灯,四个引脚取或即可
在这里插入图片描述

  GPIO_INIT.Pin=GPIO_PIN_10|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0;//配置输出引脚 

2.设置输出模式
在这里插入图片描述
选择推挽式输出

3.设置上下拉
在这里插入图片描述

 GPIO_INIT.Pull=GPIO_NOPULL; //不用上下拉

4.高低速设置
在这里插入图片描述

 GPIO_INIT.Speed= GPIO_SPEED_FREQ_LOW;//设置低速
void MY_INIT(void)
{
   __HAL_RCC_GPIOB_CLK_ENABLE();

   GPIO_InitTypeDef GPIO_INIT;
	
   GPIO_INIT.Pin=GPIO_PIN_10|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0; 
	 GPIO_INIT.Mode=GPIO_MODE_OUTPUT_PP;
	 GPIO_INIT.Pull=GPIO_NOPULL;  
	 GPIO_INIT.Speed= GPIO_SPEED_FREQ_LOW;
	 HAL_GPIO_Init(GPIOB,&GPIO_INIT);

}

记得要在gpio.h声明
在这里插入图片描述
在这里插入图片描述
main.cc调用

2.配置四个引脚输出电平实现流水

循环,根据对应序号实现一个灯的亮暗,接着另一个灯的亮暗,我们需要使用延迟函数来方便观察
实现一个灯的亮暗,亮500ms,灭500ms

HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_10);//电平翻转
HAL_Delay(500);//延迟500ms
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_10);//电平翻转
HAL_Delay(500);//延迟500ms

实现流水:

void Run(void)
{
   uint8_t i;
	 for(i=0;i<4;i++)
	   {
		    switch(i)
				{
					case 0:
					HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_10);
					HAL_Delay(500);
					HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_10);
					HAL_Delay(500);
					break;
					case 1:
					HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_2);
					HAL_Delay(500);
					HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_2);
					HAL_Delay(500);
					break;
				  case 2:
					HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
					HAL_Delay(500);
					HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
					HAL_Delay(500);
					break;
				  case 3:
					HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
					HAL_Delay(500);
					HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
					HAL_Delay(500);
					break;
			
				}
		 
		 
		 
		 
		 
		 }

}

在gpio.h声明
在这里插入图片描述
在main.cc调用
在这里插入图片描述

3.演示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

#小多子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值