认识定时器

一、软件延时

        软件延时就是让CPU数数,占用的是CPU的时间。

        容易在数数的过程中,捕获不到其他地方传来的信号(场景:当我蜂鸣器延时5秒,但是5秒内,有其他信号进来需要停止蜂鸣器响,CPU可能会捕抓不到,有一定的弊端)

二、定时器

1. 简介
        C51中的定时器和计数器是同一个硬件电路支持的,通过寄存器配置不同,就可以将他当做定时器
或者计数器使用。 确切的说,定时器和计数器区别是致使他们背后的计数存储器加1 的信号不同。当配置为定时器使
用时,每经过 1 个机器周期,计数存储器的值就加 1 。而当配置为计数器时,每来一个负跳变信号
( 信号从 P3.4 或者 P3.5 引脚输入 ) ,就加 1 ,以此达到计数的目的。
标准 C51 2 个定时器 / 计数器: T0 T1 。他们的使用方法一致。 C52 相比 C51 多了一个 T2
1.1 概念解读
  • 定时器和计数器,电路一样
  • 定时或者计数的本质就是让单片机某个部件数数
  • 当定时器用的时候,靠内部震荡电路数数
  • 当计数器用的时候,数外面的信号,读取针脚的数据
1.2 定时器怎么定时
        定时器的本质原理: 每经过一个机器周期,就加1 : 寄存器
        
思考:
        - 什么是晶振
                晶振(晶体震荡器 ) ,又称数字电路的 心脏 ,是各种电子产品里面必不可少的频率元器件。数字电
路的所有工作都离不开时钟,晶振的好坏、晶振电路设计的好坏,会影响到整个系统的稳定性。
        - 什么是时钟周期
                时钟周期也称为 振荡周期 ,定义为 时钟频率 倒数 。时钟周期是计算机中最基本的、最小的 时间单 位 。在一个时钟周期内, CPU 仅完成一个最基本的动作。时钟周期是一个时间的量。更小的时钟周 期就意味着更高的工作频率
        - 什么是机器周期
                机器周期也称为CPU周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶 段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为 机器周期。一般情况下,一个机器周期由若干个时钟周期组成
        - 加1经过多长时间
        当晶振频率是11.0592MHz的时候,等于11059.2KHz = 11059200Hz
        跳一次等于一个机器周期
        一个机器周期等于12个时钟周期
        一个时钟周期等于晶振的倒数:1/11059200 秒
        那么跳一次就是:12/11059200秒 = 12 000 000 / 11059200 微秒 = 1.085 微秒
        - 在哪里加1,最大计数时间,也就是爆表了能计算多长
        - 如何算出20ms定时器的初值
### STM32 CubeMX 定时器 CKD 配置使用教程 #### 1. 认识定时器预分频系数 (PSC) 和自动重装载寄存器 (ARR) 在STM32中,定时器的计数频率由两个参数决定:预分频系数(Prescaler, PSC)和自动重装载值(Auto Reload Register, ARR)[^1]。这两个参数共同决定了定时器的时间基准。 #### 2. 理解CKD位的作用 CKD(Clock Division)用于定义定时器的内部时钟如何被进一步划分来驱动计数操作。它有三种可能的状态: - **CKD=0:** 不进行额外除法,即TIMx_CK_INT = TIMxCLK - **CKD=1:** 进行二分频处理,即TIMx_CK_INT = TIMxCLK / 2 - **CKD=2:** 进行四分频处理,即TIMx_CK_INT = TIMxCLK / 4 这种设置允许开发者灵活调整定时精度[^2]。 #### 3. 在CubeMX中的配置方法 当通过STM32CubeMX工具配置定时器时,在高级控制选项卡下可以找到CKD字段。这里可以选择上述提到的不同分频方式之一。选择合适的CKD值取决于具体的项目需求以及所需的定时准确性[^5]。 ```c // 示例代码展示如何初始化并启动一个具有特定CKD配置的定时器实例 void MX_TIM2_Init(void){ htim2.Instance = TIM2; htim2.Init.Prescaler = __HAL_RCC_SYSCLK_CONFIG()/1000 - 1; // 假设系统时钟为72MHz,则此预分频得到72kHz htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 999; // 设置周期为1ms htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4; // 应用CKD=2,即四分频 HAL_TIM_Base_Init(&htim2); } ``` 这段C语言代码展示了如何利用`TIM_CLOCKDIVISION_DIV4`宏来指定CKD等于2的情况,从而实现对输入时钟信号的四分频效果[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枕上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值