当前位置:   article > 正文

32入门-TIM定时中断_72mhz计

72mhz计

目录

概念

定时器

时基单元

分频数和输入输出频率间的关系

基本流程

主从触发模式

如果想要跨文件使用某个变量,extern申明

终端服务函数的位置

什么时候使用浮空输入


概念

定时器

定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断。

72MHz计72个数,那就是1MHz也是1us的时间;如果计数72000个数,那就是1KHz也就是1ms的时间。

时基单元

时基单元:计数器、预分频器、自动重装寄存器。

STM32具有16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时。同时支持级联,也就是一个定时器的输出,当作另一个定时器的输入。 这样最大的定时时间就是59.65s*65536*65536。
 

不同的外设功能不同,在操作不同的系统时,一定要查看是不是有这个外设。

分频数和输入输出频率间的关系

预分频数写0->不分频,输出频率=输入频率=72MHz

预分频数写1->2分频,输出频率=输入频率/2=36MHz

预分频数写2->3分频,输出=输入/3

以此类推【实际的值和预分频数的值相差1】

16位的预分频器,最大值可以是65535,也就是65536分频。

基本流程

预分频器就是对输入的基准频率提前进行一个分频的操作。

分频后进行计数器计数。-------->对预分频后的计数时钟进行计数。

基本计数器的原理就是,预分频器先进行预分频,然后经过计数器进行计数,计数器可以从0~65536计数,然后清零。自增道道目标值【目标值存储在自动重装寄存器】时,产生中断,完成定时功能,并然后清零计数器,开始下一轮。

主从触发模式

主从触发模式(STM32的一大功能)

内部硬件在不受程序控制下实现自动运行。可以在某些情况下极大的减轻CPU负担。

当我们使用DAC的时候,可能会使用DAC输出一段波形,则需要每隔一段时间触发一次DAC让它输出下一个电压点。

一般思路:设置一个定时器,每隔一段时间在中断程序中调用代码出发一次DAC转换,然后DAC输出。但是这个方法会导致主程序频繁处于被中断状态,影响其他中断。

通过把更新时间通过主模式映射到TRGO上,然后TRGO就会直接去触发DAC,而不通过中断,整个程序不需要软件的参与,实现硬件的自动化。

通用定时器

不做描述

配置的流程图

 1、RCC开启时钟(基本每个代码都是第一步)

开启时钟后,定时器的基准时钟和整个外设的工作时钟都会同时打开

2、选择时基单元的时钟源

如果是定时中断,要选择内部时钟源

3、配置时基单元

包括预分频器,自动重装器、计数模式等等,配置在一个结构体内。

4、配置输出中断控制

允许更新中断输出到NVIC

5、配置NVIC

在NVIC中打开定时器中断的通道,并配置一个优先级

6、允许控制

在整个模块配置好之后,使能一下计数器,保证计数器运行,当计数器更新世,触发中断。注意要写一个定时器的中断函数,让中断函数每隔一段时间运行一次。

内置Timer函数的一些常用函数

TIM_DeInit 恢复缺省配置

【时基单元】

TIM_TimeBaseInit (选择某个定时器,包含配置时基单元参数结构体)时基单元初始化

TIM_TimerBaseStructInit把结构体变量赋一个默认值

【运行控制】

TIM_Cmd (选择定时器,使能/失能)运行控制 

【输出控制】

TIM_ITConfig 使能终端输出控制【终端控制】

【时钟源选择】

TIM_InteClockConfig,选择内部时钟

TIM_ITRxExternalClockConfig,选择ITRx其他定时器时钟

TIM_TIxExternalClockConfig 选择TIx捕获通道的时钟

TIM_ETRClockMode1Config 选择ETR通过外部时钟模式1输入的时钟

TIM_ETRClockMode2Config 选择ETR通过外部时钟模式2输入的时钟

TIM_ETRConfig 单独用来配置ETR引脚的预分频器、极性、滤波器这些参数

更人性化的函数

TIM_PrescalerConfig单独用来写预分频值

TIM_CounterModeConfig 用来写计数器的

TIM_ARRPreloadConfig 自动重装器预装功能配置

TIM_SetCounter 给计数器写入一个值

TIM_SetAutoreload 给自动重装器写入一个值

---------------------------------相关知识----------------------------------

中断服务函数

 

如果想要跨文件使用某个变量,extern申明

比如在main.c声明了某个变量,需要在使用但未声明的文件上extern+类型+变量,这样就可以是实现在其他文件对main文件的变量进行操作。

在模块化声明的.h文件中,每次都是这个道理,但是在声明函数前我们一般省略不写。

终端服务函数的位置

对于定时中断而言,中断服务函数就是为了别的文件服务的,所以中断函数可以放在使用它的地方

什么时候使用浮空输入

如果你的外部输入信号功率很小,内部的上拉电阻可能影响到这个输入信号。使用浮空输入可以防止外部输入的电平。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号