STM32G431RBT6的LED3以0.1s时间间隔闪烁5s后熄灭
时间: 2024-12-08 12:24:18 浏览: 109
STM32G431RBT6是一款基于Cortex-M4F的微控制器,它有内置的GPIO模块可以驱动LED。如果你想让LED3每0.1秒闪烁一次,然后在5秒后自动熄灭,你可以参考以下步骤:
首先,确保已正确配置了该型号的GPIO和时钟,因为不同系列的STM32可能略有差异。例如,如果你使用的是GPIOB的PB13作为LED3,可以进行如下设置:
1. 包含必要的头文件并初始化GPIO:
```c
#include "stm32g4xx_hal.h"
#include "delay.h"
#define LED3_PIN PB_13
#define LED3_GPIO GPIOD
```
2. 初始化GPIO:
```c
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOD_CLK_ENABLE(); // 初始化GPIOD时钟
GPIO_InitStruct.Pin = LED3_PIN; // 设置LED3的引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
GPIO_InitStruct.Pull = GPIO_NOPULL; // 无上拉下拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; // 最高速度
HAL_GPIO_Init(LED3_GPIO, &GPIO_InitStruct); // 初始化LED3的GPIO
```
3. 创建延时函数,比如使用哈尔库的延时API或者自定义一个函数,假设`delay_us(uint32_t us)`能延迟指定的微秒数:
```c
void toggle_LED3() {
HAL_GPIO_TogglePin(LED3_GPIO, LED3_PIN); // 切换LED3的状态
}
void wait_half_second() {
for (uint32_t i = 0; i < 500000; i++) { // 约等于0.1s,具体数值取决于你的实际延时精度
delay_us(1);
}
}
```
4. 主循环实现闪烁和计时:
```c
int main(void) {
uint8_t loop_count = 50; // 一共50个闪烁周期(每个周期0.1s)
while (loop_count > 0) {
toggle_LED3();
wait_half_second();
--loop_count; // 每次闪烁减一
}
HAL_Delay(5000); // 等待5s
HAL_GPIO_WritePin(LED3_GPIO, LED3_PIN, GPIO_PIN_RESET); // 关闭LED3
return 0;
}
阅读全文
相关推荐


















