用stm32生成四个流水灯代码
时间: 2024-12-02 10:14:51 浏览: 12
stm32f10x 流水灯
5星 · 资源好评率100%
在STM32微控制器上实现四路流水灯,通常需要配置GPIO作为输出口,定时器用于控制LED的点亮和熄灭周期。这是一个基本的示例代码,假设我们使用的是Keil MDK集成开发环境:
```c
#include "stm32f10x.h" // 包含STM32库
// 定义LED灯的GPIO端口和位地址
#define LED_PORT GPIOB
#define LED_PIN_1 PB0
#define LED_PIN_2 PB1
#define LED_PIN_3 PB2
#define LED_PIN_4 PB3
// 初始化GPIO和定时器
void init_GPIO(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); // 开启GPIOD时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = LED_PIN_1 | LED_PIN_2 | LED_PIN_3 | LED_PIN_4; // 设置所有LED
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 输出推挽模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_PORT, &GPIO_InitStructure);
}
// 更新流水灯状态
void update_Led(int led_num, bool state) {
GPIO_SetBits(LED_PORT, led_num << 1); // LED编号从0开始,左移一位代表低8位
if (state) {
GPIO_ResetBits(LED_PORT, led_num << 1);
}
}
// 主循环流水灯函数
void blink_Leds(uint32_t delay_ms) {
for (int i = 0; i < 4; ++i) {
update_Led(i, true); // 点亮第一个LED
HAL_Delay(delay_ms); // 暂停一段时间
update_Led(i, false); // 熄灭第一个LED,点亮下一个
}
}
int main(void) {
init_GPIO();
while (1) {
blink_Leds(500); // 每次点亮0.5秒
}
}
阅读全文