《嵌入式系统原理与应用》 |(六) 定时器(计数器) 知识梳理

 

系列索引:《嵌入式系统原理与应用》 | 嵌入式系统 重点知识梳理


目录

 

 

 

嵌入式系统中延时实现的方式及其优缺点

STM32 F103中的基本定时器、通用定时器及高级定时器的区别(包括所在总线及功能区别)

定时器的时钟源有哪些?

定时器的工作模式

PWM的作用及其实现方式

定时器中预分频、自动重装载、捕获/比较寄存器的初始值的设置

定时器延时时间的计算

定时器相关库函数的使用(arr,psc及ccr值的设置,定时器中断的使用)


 

嵌入式系统中延时实现的方式及其优缺点

嵌入式系统中延时的实现

1. 完全硬件实现

使用电容及电阻即可完成特定的振荡延时作用

延时时间无法改变

2. 纯软件方式(不精确,占用CPU

3. 微控制器中的可编程定时/计数器

 

STM32 F103中的基本定时器、通用定时器及高级定时器的区别(包括所在总线及功能区别)

功能: 计数 =  基本定时器  +  输入输出,捕获 =  通用定时器 + 刹车信号输入,7路信号互补输出  = 高级定时器

 

定时器的时钟源有哪些?

  • 内部时钟(系统时钟),来自于输入为APB1或APB2的一个倍频器
  • 外部时钟模式    1: 外部输入引脚  ;2:外部触发输入ETR
  • 内部引脚
  • 其他定时器

 

定时器的工作模式

计数模式(以普通定时器为例)

输出比较模式

输入捕获模式

先设置输入捕获为上升沿检测,记录发生上升沿时TIMx_CNT的值。然后配置捕获信号为下降沿捕获,当下降沿到来的时候发生捕获,并记录此时的TIMx_CNT的值。这样,前后两次TIMx_CNT的值之差就是高电平的脉宽。同时根据TIM的计数频率,我们就能知道高电平脉宽的准确时间。

单脉冲模式

PWM模式

 

PWM的作用及其实现方式

PWM(脉冲宽度调制),简称脉冲调制,顾名思义,指对脉冲宽度的控制,它是一种利用微控制器的数字输出来对模拟电路进行控制的非常有效的技术

实现方式

(1)传统的数字电路方式。用传统的数字电路实现PWM,电路设计较复杂,体积大,抗干扰能力差,系统的控制周期较长。

(2)微控制器普通I/O模拟方式。对于微控制器中无PWM输出功能的情况,可以通过CPU操控普通1/O口来实现PWM输出。但这样实现PWM将消耗大量的时间,大大降低了CPU的效率,而且得到的PWM信号精度不太高。

(3)微控制器的PWM直接输出方式。对于具有PWM输出功能的微控制器,在进行简单的配置后即可在微控制器的指定引脚上输出PWM脉冲。这也是目前使用最多的PWM实现方式。

PWM和输出比较模式的区别

PWM模式为输出比较模式的特殊形式pwm模式在对应定时器上的四个通道产生的频率是同步的(即相同的),而输出比较模式在四个通道可以产生的频率不同,但他们都输出占空比不同的信号

 

定时器中预分频、自动重装载、捕获/比较寄存器的初始值的设置

CCR:捕获/比较寄存器,包括捕获输入(测量脉冲频率)和比较输出(比较两个脉冲)两部分

初始化输入捕获通道。调用函数:TIM_ICInit()

 

ARR:自动重装载寄存器

PSC:预分频寄存器作用:

在更新事件(UEV)之前,预分频系数为1,一个时钟周期一个计数;UEV之后,预分频系数为2,两个始终周期一个计数

 

定时器延时时间的计算

延时时间=(Timx_ARR+1)*(TIMx_PSC+1)/TIMxCLK

例:

以时钟频率72MHZ为例,要计数500us,则预分频值和计数值为多少?

解:时钟频率72MHZ,其时钟周期为1/72000000 s,500us则需要500*72个时钟周期。若预分频值为71,则计数器时钟频率为1MHZ,时钟周期为1/1000000s, 500us需要500个时钟周期,则计数值为499.

 

定时器相关库函数的使用(arr,psc及ccr值的设置,定时器中断的使用)

TIM_TimeBaseInit:根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx。

TIM_OC1Init:根据TIM_OCInitStruct中指定的参数初始化外设 TIMx的通道1。

TIM_OC2Init:根据TIM_OCInitStruct中指定的参数初始化外设 TIMx的通道2。

TIM_OC3Init:根据TIM_OCInitStruct中指定的参数初始化外设 TIMx的通道3。

TIM_OC4Init:根据TIM_OCInitStruct中指定的参数初始化外设 TIMx的通道4。

TIM_OC1PreloadConfig:使能或者禁止TIMx在CCR1上的预装载寄存器。

TIM_OC2PreloadConfig:使能或者禁止TIMx在CCR2上的预装载寄存器。

TIM_OC3PreloadConfig:使能或者禁止TIMx在CCR3上的预装载寄存器。

TIM_OC4PreloadConfig:使能或者禁止TIMx在CCR4上的预装载寄存器。

TIM_ARRPreloadConfig:使能或者禁止TIMx在ARR上的预装载寄存器。

TIM_CtrlPWMOutputs:使能或禁止TIMx的主输出。

TIM_Cmd:使能或者禁止TIMx。

初始化输入捕获通道。调用函数:TIM_ICInit();

TIM_GetFlagStatus:检查指定的TIMx标志位的状态。

TIM_ClearFlag:清除 TIMx 的待处理标志位。

TIM_ITConfig:使能或者禁止指定的TIMx中断。

TIM_GetITStatus:检查指定的TIMx中断是否发生。

TIM_ClearITPendingBit:清除TIMx的中断挂起位。

 

 

 

 

 

 


 

发布了112 篇原创文章 · 获赞 975 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/qq_41523096/article/details/103774573