打印
[STM32H7]

定时器与按键结合

[复制链接]
521|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
t60yz|  楼主 | 2024-12-9 23:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定时器触发 LED 周期闪烁。
按键中断改变闪烁频率。
代码实现:
c
复制代码
volatile uint32_t blink_delay = 500; // LED 闪烁延时

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
    if (GPIO_Pin == GPIO_PIN_0) { // 按键中断
        blink_delay = (blink_delay == 500) ? 200 : 500; // 切换延时
    }
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
    if (htim->Instance == TIM2) {
        HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // 切换 LED 状态
    }
}

// 主循环中动态调整定时器周期
while (1) {
    __HAL_TIM_SET_AUTORELOAD(&htim2, blink_delay); // 动态更新定时周期
}

使用特权

评论回复
沙发
公羊子丹| | 2025-1-24 09:38 | 只看该作者
这个实现看起来很棒!按键中断用来切换闪烁频率,挺简单而且高效的。

使用特权

评论回复
板凳
周半梅| | 2025-1-24 09:39 | 只看该作者
动态更新定时器周期的方式很巧妙,能让LED频率响应快速变化。

使用特权

评论回复
地板
帛灿灿| | 2025-1-24 09:40 | 只看该作者
记得在按键中断处理函数里加个防抖,否则按键可能会触发多次变化。

使用特权

评论回复
5
童雨竹| | 2025-1-24 09:42 | 只看该作者
不过注意定时器的延迟和频率切换之间的平衡,避免太频繁的切换导致闪烁效果不稳定。

使用特权

评论回复
6
万图| | 2025-1-24 09:43 | 只看该作者
这个方法对于实时应用来说很合适,定时器定期触发任务,按键中断动态调整频率,效率高。

使用特权

评论回复
7
Wordsworth| | 2025-1-24 09:44 | 只看该作者
使用__HAL_TIM_SET_AUTORELOAD来动态调整定时器周期挺聪明的!可以根据需求快速改变LED闪烁的速度。

使用特权

评论回复
8
Bblythe| | 2025-1-24 09:46 | 只看该作者
你可以考虑加入一些调试输出,看看在按键触发时blink_delay是否正常切换。

使用特权

评论回复
9
Pulitzer| | 2025-1-24 09:47 | 只看该作者
按键的触发条件很直观,只要按键按下就能切换LED闪烁频率,使用起来非常方便。

使用特权

评论回复
10
Uriah| | 2025-1-24 09:48 | 只看该作者
动态调整定时器周期是实现类似功能的好方法,不过要注意不会影响其他定时器的工作。

使用特权

评论回复
11
Clyde011| | 2025-1-24 09:49 | 只看该作者
如果需要更多控制,可以给按键增加多级频率选择,让用户有更多调节选项。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

187

主题

1184

帖子

0

粉丝