STM32F103C8T6呼吸灯程序
时间: 2025-01-06 15:38:24 浏览: 46
STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,常用于各种嵌入式系统设计中,包括简单的LED控制应用,如呼吸灯效果。下面是一个基本的STM32F103C8T6呼吸灯程序示例:
```c
#include "stm32f10x.h"
// LED定义
GPIO_TypeDef* GPIO_PORT = GPIOA;
uint16_t GPIO_PIN = GPIO_Pin_0;
void delay_ms(uint16_t ms) {
uint32_t start = HAL_GetTick();
while((HAL_GetTick() - start) < ms * 1000 / 1000);
}
void led_breathe(void) {
GPIO_InitTypeDef GPIO_InitStruct;
// 设置LED初始化配置
GPIO_InitStruct.Pin = GPIO_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // Push Pull模式
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速
HAL_GPIO_Init(GPIO_PORT, &GPIO_InitStruct);
bool state = false;
for(int i = 0; i <= 4; ++i) {
// 开始状态
HAL_GPIO_WritePin(GPIO_PORT, GPIO_PIN, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
delay_ms(500); // 呼吸周期较长的一半时间
state = !state; // 变换状态
// 深度闪烁状态
for(int j = 0; j < 2; ++j) {
HAL_GPIO_WritePin(GPIO_PORT, GPIO_PIN, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
delay_ms(250); // 呼吸周期较短的一半时间
HAL_GPIO_WritePin(GPIO_PORT, GPIO_PIN, GPIO_PIN_RESET);
delay_ms(250);
}
}
}
int main(void) {
RCC_OscInitTypeDef RCC_OscInitStruct;
HAL_Init();
// ... 其他必要的硬件配置 ...
while (1) {
led_breathe(); // 每次循环改变LED的呼吸节奏
}
}
```
在这个程序中,我们首先初始化GPIO和定时器来控制LED的开关,并通过`led_breathe()`函数实现了简单的呼吸灯效果。主循环中不断调用这个函数,使得LED灯光按照规律起伏。
阅读全文
相关推荐


















