stm32g431rbt6 流水灯实验全过程教学
时间: 2024-09-28 13:17:36 浏览: 78
蓝桥杯嵌入式第13届完整代码(基于HAL库)
STM32G431RBT6是一款基于STM32 G4系列的微控制器,常用于嵌入式系统开发,特别是物联网应用。流水灯实验是一种基础的LED控制教程,通常用来展示GPIO(通用输入输出)模块的工作原理以及定时器的使用。
以下是进行STM32G431RBT6流水灯实验的简单步骤:
1. **硬件准备**:
- 准备一块搭载STM32G431RBT6的开发板,如Arduino Nucleo-144或STM32CubeMX配置好相应的GPIO引脚作为LED驱动(通常是PB0-PB7)。
- 连接电源,并确保LED正负极连接到指定的GPIO针脚。
2. **软件环境设置**:
- 安装STM32CubeIDE或Keil MDK等集成开发环境。
- 创建一个新的项目,选择STM32G431系列并配置对应的库文件。
3. **编写主函数**:
- 使用循环结构(例如for或while),设置定时器周期,比如每秒改变一次LED状态。
- 每次循环通过调整GPIO的状态(高电平或低电平)来控制LED亮灭,依次点亮下一个LED,直到所有LED都亮过一轮再回到第一个。
```c
#include "stm32f4xx_hal.h"
void led_blinking(uint8_t* leds, uint8_t num_leds) {
GPIO_InitTypeDef gpio_InitStruct;
uint8_t i;
// 初始化GPIO
for (i = 0; i < num_leds; i++) {
gpio_InitStruct.Pin = leds[i];
gpio_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
gpio_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &gpio_InitStruct);
}
while (1) {
for (i = 0; i < num_leds; i++) {
if (i == num_leds - 1) { // 当前LED是最右边的,换下一轮
i = 0;
}
HAL_GPIO_WritePin(GPIOB, leds[i++], LED_ON); // 点亮LED
HAL_Delay(1000 / num_leds); // 暂停一段时间
HAL_GPIO_WritePin(GPIOB, leds[i], LED_OFF); // 关闭LED
}
}
}
int main(void) {
// ... 其他必要的初始化操作 ...
// LED数组,假设PB0-PB7分别对应leds[0]到leds[6]
uint8_t leds[] = {GPIO_PIN_0, GPIO_PIN_1, GPIO_PIN_2, GPIO_PIN_3, GPIO_PIN_4, GPIO_PIN_5, GPIO_PIN_6};
led_blinking(leds, sizeof(leds) / sizeof(leds[0]));
return 0;
}
```
阅读全文