【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.演示
作者:#小多子