定时器实验

  1. 定时器概述

    • 软件定时原理:使用纯软件(CPU死等)的方式实现定时(延时)功能。

void delay(int us)
{
    us *= 70;    //这里根据需要自行调整参数
    while(us--);
}
  •  缺点:延时不精准,CPU死等浪费资源。
  • 定时器中的软件定时为什么会导致延时不精准:
    • 操作系统调度延迟
    • 时钟源分辨率限制
    • 中断屏蔽与延迟
    • 软件实现逻辑缺陷
    • 多核竞争与同步
  • 定时器定时原理

    • 使用一个精准的时钟源,通过硬件的方式实现定时。
    • 核心:计数器(不一定是递减)
    • 定时器分类:
    •  基本定时器,通用定时器,高级定时器功能区别:

2.基本定时器 

  • 基本定时器简介:TIM6/TIM7
    • 主要特性:16位递增计数器(0~65535),16位预分频器,触发DAC,计数器溢出时可产生中断/DMA请求。
    • 基本定时器框图:

  • 基本定时器计数模式及溢出条件: 
  • 定时器时间溢出计算方法:
  • 定时器中断实验配置步骤:
    • 配置定时器基础工作参数:HAL_TIM_Base_Init()
    • 定时器基础MSP初始化: HAL_TIM_Base_MspInit(),配置NVIC,CLOCK等
    • 使能更新中断并启动计数器:HAL_TIM_Base_Start_IT()
    • 设置优先级,使能中断:HAL_NVIC_SetPriority(),HAL_NVIC_EnablelRQ()
    • 编写中断服务函数:在TIMx_IRQHandler()中调用HAL_TIM_IRQHandler()
    • 编写定时器更新中断回调函数:HAL_TIM_PeriodElapsedCallback()

3.定时器中断实验 

  • 实现功能:使用定时器6,实现500ms定时器更新中断,在中断里翻转LED0
  • 500ms=%定时器时钟频率(APB1总线36Mhz*2=72Mhz)
  • btimer.h文件
  • btimer.c文件 
  • main.c文件 
  • 在这里有个问题就是需要在设备文件的HAL库驱动文件中添加两个源文件
  • 没有这两个文件的话会出现找不到一些函数的声明,他会提示这些函数未引用。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值