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);
	}
相关推荐
小李不想当小白41 分钟前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
lisw054 小时前
作为人类代理的大语言模型及其角色分类!
人工智能·学习·语言模型
Z21-X4 小时前
云原生运维实战笔记:企业网站综合上云部署与云运维服务全景解析
运维·笔记·学习·云原生
坤坤子吖4 小时前
Linux网络编程:UDP进阶,从字典服务器到简单聊天室
linux·服务器·网络·c++·笔记·学习
Rabitebla4 小时前
【Linux学习笔记】进程篇(九):进程的创建与退出——fork、写时拷贝与退出码
linux·c++·笔记·学习
楚山之石5 小时前
【MRM】CAPLEX 对比剂灌注 MRI 开源术语库:ISMRM OSIPI 共识报告
图像处理·人工智能·学习·mri
前进的李工16 小时前
Agent 学习笔记 05:系统提示词应该怎么写
笔记·学习·prompt·agent·个人开发·few-shot·ai应用开发
正在走向自律17 小时前
【3/5】人工智能训练师 三级/高级工 考证学习方向:从“独立执行”到“设计、归因与全链条负责”
人工智能·学习·人工智能训练师·注方案设计·数据质控负责人·模型评测与调优辅助·ai训练项目交付
CCIE-Yasuo19 小时前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
La Pulga20 小时前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统