STM32F103C8T6按键呼吸灯代码
时间: 2024-06-23 14:00:49 浏览: 116
STM32F103C8T6最小系统板的呼吸灯程序
5星 · 资源好评率100%
STM32F103C8T6是一款基于Cortex-M3内核的STM32微控制器,通常用于嵌入式系统开发。按键和LED呼吸灯的交互是一个常见的入门项目,可以帮助初学者理解中断、定时器以及GPIO的基本操作。
以下是一个简单的示例代码,使用STM32的GPIO控制LED的按键呼吸灯功能:
```c
#include "stm32f10x.h"
// 假设GPIOA配置为输出,PA0连接LED,PA1连接按键
GPIO_InitTypeDef GPIO_InitStructure;
// 定义按键和LED的引脚
#define KEY_PIN GPIO_Pin_1
#define LED_PIN GPIO_Pin_0
void Delay(__IO uint32_t nCount);
void Key_Breath_LED(void);
int main(void) {
// 初始化GPIO
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // 配置GPIOA时钟
GPIO_InitStructure.GPIO_Pin = LED_PIN | KEY_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 输出推挽模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 高速
GPIO_Init(GPIOA, &GPIO_InitStructure);
while (1) {
// 按键检测
if (GPIO_ReadInputDataBit(GPIOA, KEY_PIN)) { // 如果按键按下
Key_Breath_LED(); // 开始LED呼吸灯闪烁
} else {
// 按键释放,停止LED闪烁
GPIO_SetBits(GPIOA, LED_PIN); // 关闭LED
}
}
}
void Key_Breath_LED(void) {
static uint8_t state = 0; // 0:亮,1:灭
static uint16_t delay_ms = 500; // 呼吸周期时间
GPIO_ToggleBits(GPIOA, LED_PIN); // 切换LED状态
state = state ^ 1;
if (state == 0) { // 当LED亮时
// 进行延时,模拟呼吸效果
Delay(delay_ms);
// 缩短延时,使LED闪烁频率加快
delay_ms /= 2;
} else { // LED灭时
// 延时恢复到初始值
delay_ms = 500;
}
}
// 延迟函数,实现微秒级精确延时
void Delay(__IO uint32_t nCount) {
for (; nCount != 0; nCount--) {
// 这里省略了内核级别的延时细节,用while循环代替
}
}
//
阅读全文