nucleo-f411re学习记录-4,定时器TIM2实现延时功能

代码仓库 -【传送门

之前认识了GPIO的输入输出功能,现在学习一下定时器的功能,相比于输入捕获与输出比较,还是用作延时来的简单一些。

查看数据手册,TIM2是挂载在APB1总线上,最大频率为50MHz,这个数据之后要用到。

1,新建delay.c与delay.h文件,把delay.c加入外设组中。

2,初始化定时器配置。可以理解为在不分频的情况下,就是50MHz,数一个数需要1/50Mhz=20ns,数50个数就需要1us。

复制代码
void Delay_TIMx_Init(void) 
{
    // 1. 使能定时器2时钟
    RCC_APB1PeriphClockCmd(DELAY_TIMx_CLK, ENABLE);

    // 2. 配置定时器2
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_TimeBaseStructure.TIM_Period        = 50 -1;                // 自动重装载寄存器值,APB1的最大频率就是50MHz
    TIM_TimeBaseStructure.TIM_Prescaler     = 0;                    // 不分频
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;         // 时钟分频因子
    TIM_TimeBaseStructure.TIM_CounterMode   = TIM_CounterMode_Up;   // 向上计数模式
    TIM_TimeBaseInit(DELAY_TIMx, &TIM_TimeBaseStructure);
}

3,微秒延时函数与毫秒延时函数实现

复制代码
void delay_us(uint32_t us)
{
    TIM_Cmd(DELAY_TIMx, ENABLE);
    for (uint32_t i = 0; i < us; i++) 
    {
        TIM_SetCounter(DELAY_TIMx, 0);                                    // 清零计数器
        while (TIM_GetFlagStatus(DELAY_TIMx, TIM_FLAG_Update) == RESET);  // 等待更新事件(等待计数值到达装载值)
        TIM_ClearFlag(DELAY_TIMx, TIM_FLAG_Update);                       // 清除更新事件标志
    }
    TIM_Cmd(DELAY_TIMx, DISABLE);
}
void delay_ms(uint32_t ms)
{
    for (uint32_t i = 0; i < ms; i++) 
    {
        delay_us(1000); // 1ms = 1000us
    }
}

之后可以替代滴答定时器了。

复制代码
	while (1)
	{
        key_event = KEY_User_Scan();
        if(key_event == KEY_EVENT_SHORT_PRESS)
            LED_Toggle();
        else if(key_event == KEY_EVENT_LONG_PRESS)
        {
            for(int i = 0; i<5;i++)
            {
                LED_Toggle();
                delay_ms(500);
            }
        }
		delay_ms(10);
	}
相关推荐
通信小呆呆13 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick13 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee13 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn8613 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e13 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨13 天前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙
cqbzcsq13 天前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
YangYang9YangYan13 天前
2026初入职场学习数据分析的价值
学习·数据挖掘·数据分析
guslegend13 天前
理论学习:什么是 Coding Agent?
学习
自传.13 天前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding