使用stm32寄存器控制4个led流水灯零基础入门 使用GPIOA0、GPIOA1、GPIOC14和GPIOC15引脚,控制LED1、LED2、LED3和LED4,实现LED1~4依次亮灭,其中LED1和LED3低电平亮、高电平灭,LED2和LED4高电平亮、低电平灭
时间: 2024-10-07 13:02:17 浏览: 54
在STM32单片机中,要通过GPIO控制LED流水灯,你需要做以下几个步骤:
1. **初始化GPIO**:
首先,需要配置GPIOA0、GPIOA1、GPIOC14和GPIOC15作为输出模式,以便驱动LED。使用`GPIO_Init()`函数设置GPIO的朝向(推挽或开漏)、速度和功能。
```c
GPIO_InitTypeDef GPIO_InitStructure;
// 设置GPIOA0和GPIOA1为输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; // LED1和LED2对应的引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
// 设置GPIOC14和GPIOC15为输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15; // LED3和LED4对应的引脚
HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
```
2. **点亮/熄灭LED**:
对于LED1和LED3,当它们接收到低电平时(即GPIO线拉低),LED会发光;反之,高电平则表示关闭。同样地,LED2和LED4则是高电平亮低电平灭。
```c
void toggle_LED13() {
HAL_GPIO_WritePin(GPIOA, GPIO_Pin_0, GPIO_PIN_SET); // 点亮LED1 (GPIOA0)
HAL_Delay(500); // 等待一段时间
HAL_GPIO_WritePin(GPIOA, GPIO_Pin_0, GPIO_PIN_RESET); // 熄灭LED1 (GPIOA0)
}
void toggle_LED24() {
HAL_GPIO_WritePin(GPIOC, GPIO_Pin_14, GPIO_PIN_SET); // 点亮LED2 (GPIOC14)
HAL_Delay(500); // 等待一段时间
HAL_GPIO_WritePin(GPIOC, GPIO_Pin_14, GPIO_PIN_RESET); // 熄灭LED2 (GPIOC14)
}
```
3. **流水灯操作**:
要实现LED1~4的交替点亮和熄灭,你可以在一个循环中调用这两个函数,改变顺序即可。
```c
for(int i = 0; i < 4; ++i) {
toggle_LED13(); // LED1亮起
toggle_LED24(); // LED2亮起,然后LED1熄灭LED2亮起...
if(i % 2 == 1) { // 每两个LED一组,跳过LED3
continue;
}
toggle_LED24(); // LED2熄灭,LED3亮起
toggle_LED13(); // LED1熄灭,LED4亮起
// ...
}
```
阅读全文