STM32之通用定时器
广大的互联网的大家早上中午晚上、、又好、、没错了、、我又来了、、写博客不是定时的、、为什么我要提写博客不是定时的呢??聪明的人又猜到我要说什么了吧、有前途、其实我还是第一次听到定时器有通用和高级之分的、、原来定时器也有分等级的呀、、STM32果真不简单呀、、
好了、、为啥名为通用呢?、恕小弟不才、目前只理解为:因为可以通用,所以名为通用定时器、那可以通用在哪些方面呢?那通用的原理又是什么呢?咦,不急不急、、待我慢慢翻开“葵花宝典”第STM32篇之通用定时器:葵花兄,近来可好?咱们又见面了、能告诉我定时器可以通用在哪些方面吗?只见葵花兄镇定自若的说:通用定时器可以用来:
1、测量输入信号的脉冲长度,也就是输入捕获(请对此四字短语养成良好的形象哈)
2、产生输出波形,也就是输出比较或者PWM(同上)
那葵花兄,通用的原理呢?又见葵花兄坦然自若的说:通用定时器是一个通过可编程预分频器(PSC)(注:这三个字母要有印象哈)驱动的16位自动装载计数器(CNT)(注:同上)构成。
好了,大家撇开葵花兄,把焦点重新聚焦在我身上、那通用定时器有什么功能呢?我想肯定有人马上反应:有定时的功能、、额、、我也不能说你错是吧、、那我来具体点吧,其实也不是我具体,多亏了“葵花宝典”第STM32篇中文参考手册 :
1) 16 位向上 、向下 、向上/向下自动装载计数器 (TIMx_CNT)。
2) 16 位可编程( 可以实时修改 )预分频器(TIMx_PSC)(TIMx_PSC)(TIMx_PSC),计数器时钟频率的分系为 1~ 65535 之间的任意数值。
3)4个独立通道( TIMx_CH1~4 TIMx_CH1~4 TIMx_CH1~4 TIMx_CH1~4)
A.输入捕获
B.输出比较
C.PWM 生成 (边缘或中间对齐模式 )
D.单脉冲模式输出
4)可使用外部信号( TIMx_ETR )控制定时器和互连(可以用1个定时器控制另外一个定时器)的同步电路。
5)如下事件发生时产生中断/DMA:
A.更新:计数器向上溢出/向下溢出,计数器初始化 ( 通过软件或者内部 /外部触发 )
B.触发事件 (计数器启动、停止初始化或者由内部/外部触发计数 )
C.输入捕获
D.输出比较
E.支持针对定位的增量 (正交 )编码器和霍尔传感电路
F.触发输入作为外部时钟或者按周期的电流管理
当然啦,在此博客中不考虑那么多功能先哈、、先淡定、、若是被吓到了、、先去喝杯茶压压惊哈、、那我们怎么来实现定时的功能呢?
只要定时、当达到一定容量时,就会发生溢出、、聪明的人又知道我要说什么了吧?世上太多聪明的人了、、没错了、、把中断这位兄弟叫上、让溢出兄和中断兄合身、、(省略合身等待的时间)、对了、诞生了溢出中断、我们给取个好听的名字:更新中断、在这里,我们是利用中断来定时的、、
接下来,容小弟介绍下与此博客有关系的寄存器(具体的位是什么功能我就不讲了哈,因为我们是采用库而不是操作寄存器,想知道的可以参考中文参考手册哈),大家掌声响起:欢迎控制兄(TIMx_CR1)

欢迎中断/DMA使能兄(TIMx_DIER):

欢迎预分频器兄(TIMx_PSC):

欢迎自动重装载寄存器兄(TIMx_ARR):

好了、、这四位可以在旁边休息了(我们就不介绍了)、、因为我们的重点:库兄要出现了,接下来,用最热烈的掌声欢迎:
首先:有请挂载时钟大神ABP1(为什么要请这位大神呢?因为我们的通用定时器是挂载在这位ABP1的,证据如下)

再者,我们有请第二大神:初始化大神:TIM_TimeBaseInit(为什么是他呢?为什么?究竟是为什么?啊哈、、请看)
看到了吧、、所以请不要怀疑大神的地位哈、、至于参数具体是哪些,大家可以打开#include "stm32f10x_tim.h"哈,在这里就不多说了、、相信大家都是聪明人、
前两位大神出来了,我们还有大神、、哎、、大神无处不在、、来、有请类型中断使能大神
void TIM_ITConfig(TIM_TypeDef* TIMx, u16 TIM_IT, FunctionalState NewState)
看到中断、、大家又有想到什么猫腻没??条件发射就是这样炼成的、、没错了、、就是中断优先级设置大神啦、、这个大家应该有印象、我就不细说了哈,没印象的话这位大神可就要躲到某个角落伤心了,
看到以上大神、、其实还有一位大神没出现、、此大神没出现、、其他大神啥都不是、、对了、就是定时器启动大神
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)
好了、、最后,编写中断服务函数,在中断函数里检查中断标志位和清中断标志位,还有你想要做的事,相信大家也是比较熟悉的了、、
在这里,我们来谈谈时钟的问题、、大家可以看到系统时钟树图里:

看到我美丽销魂的涂鸦没、、由于我的系统时钟初始化是36MHZ的、而且设置APB1的预分频系数为2,所以定时器的时钟就为72MHZ,大家可以根据自己的系统时钟设置选择哈、、
到此,我们来总结下使用中断的定时器:
1.开启挂载在ABP1上的TIM3的时钟
2.对定时器进行初始化
3.设置中断类型
4.设置中断优先级
5.开启定时器3
6.编写中断服务函数 看一下参考代码:
void Timer_3_Init(u16 arr,u16 psc)
{ //Tout = (arr + 1) * (psc + 1) / 72; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //1 此数字对应上面的步骤 TIM_TimeBaseStructure.TIM_Period = arr; //这个值在0~65535之间 为16位计数值 //
TIM_TimeBaseStructure.TIM_Prescaler = psc;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, & TIM_TimeBaseStructure); TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE ); // NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = ;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = ;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); TIM_Cmd(TIM3, ENABLE); //
} void TIM3_IRQHandler(void) //6
{
if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
LED1 = !LED1;
}
}
好了、、说到这里、、通用果然是通用的、、对于所有的通用定时器都是同样的原理、、在这里我们只是实现了简单的定时(值加到某个程度就更新产生中断,通过LED灯显示)、、希望大家多多指教、、本博客比较滑稽、、望大家莫怪哈、、有什么说错的地方请像抓腐败那样提出来哈、、我虚心向您请教、、谢谢大家、、
STM32之通用定时器的更多相关文章
- [stm32] STM32的通用定时器TIMx系统了解
通用定时器(TIMx) 一.TIMx简介 二.TIMx主要功能 三.TIMx功能描述 3.1 时基单元 3.2 计数器模式 3.3 时钟选择 3.4 捕获/比较通道 3.5 输入捕获模式 3.6 PW ...
- stm32之通用定时器TIM
STM32系列的CPU,有多达8个定时器: 1.其中TMI1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动:它们的时钟有APB2的输出产生: 2.其它6个为普通定时器,时钟由 ...
- Stm32之通用定时器复习
因为毕业设计要用到PWM调光很久都没用到Stm32的定时器,有些内容已经遗忘,为了回顾复习相关内容今天开下通用定时器这一章节的数据手册. 1.时钟 通用定时器一般是TIM2~TIM5,TIM1.TIM ...
- 一文打尽PWM协议、PPM协议、PCM协议、SBUS协议、XBUS协议、DSM协议 | STM32的通用定时器TIM3实现PPM信号输出
PWM.PPM.PCM.SBUS.XBUS.DSM都是接收机与其他设备通信的协议. 请注意这里不要将遥控器和接收机之间的协议混淆.遥控器和接收机之间会采用某种协议来互相沟通,这些协议往往各个厂牌各自有 ...
- stm32通用定时器中断问题
在使用stm32的通用定时器定时中断的时候,发现定时器在完成初始化配置后,定时器UIF位会立刻置位,导致在使能中断后,程序会立刻进入定时器中断. 如果设计代码时不希望定时器配置完成后,立刻进入中断,可 ...
- STM32学习笔记——定时器中断(向原子哥学习)
定时器中断 STM32 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器.在本章中,我们将利 ...
- STM32F103单片机学习—— 通用定时器
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fengshuiyue/article/details/79150724 本篇重点记录的是STM32F ...
- STM32通用定时器(转载)
STM32的定时器功能很强大,学习起来也很费劲儿. 其实手册讲的还是挺全面的,只是无奈TIMER的功能太复杂,所以显得手册很难懂,我就是通过这样看手册:while(!SUCCESS){看手册-}才搞明 ...
- STM32学习笔记(五)——通用定时器计数延时
STM32定时器概述 STM32F40x系列总共最多有14个定时器,定时器分为三类:基本定时器.通用定时器和高级定时器.它们的都是通过计数来达到定时的目的,和51的定时器差不多,基本原理都是一样的,就 ...
随机推荐
- Python全栈开发【基础四】
Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 迭代器 三元表达式 列表解析与生成器表达式 生成器 匿名函数 lamb ...
- css keyframes动画属性设置
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- windows耳机没有声音
问题描述: 扬声器有声音,耳机没有声音,重装了驱动也没有用,系统配置.耳机也没有问题,具体原因我不太清楚,参考网址:http://forum.ubuntu.org.cn/viewtopic.php?f ...
- 史上最全的maven的pom.xml文件详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- iOS 创建模型时自动生成属性
转载 mark666(简书作者), 链接:http://www.jianshu.com/p/63ee533a7705 我们在创建模型的时候,常常要写一大堆恶心的@property(nonatomic, ...
- nodeJS(express4.x)+vue(vue-cli)构建前后端分离详细教程(带跨域)
好想再回到大学宿舍,当时床虽小,房随小,但是心确是满的 ----致 西安工程大学a-114舍友们 转载请注明出处:水车:http://www.cnblogs.com/xuange306/p/6185 ...
- json_decode返回NULL
最近在调用某公司的API时,将对方返回的数据,使用PHP的json_decode函数解析,但是返回NULL,最终排查为对方传送来的json格式有误 打印$_REQUEST,数据结构大致如下: arra ...
- 通过dll或def文件提取lib导入库文件
很多时候第三方库或其他项目提供的库多数会以动态库的形式提供dll以及相应的lib导入库.头文件,不过也有的只是提供dll和头文件,或者也提供了def模块定义(用于导出函数)文件,此时若使用将不得不调用 ...
- ZooKeeper基本原理
ZooKeeper简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. ZooKeeper设计目的 1. ...
- UVA 11768 Lattice Point or Not(扩展欧几里德)
将直线转化为ax + by = c的形式,然后扩展欧几里得求在[x1, x2]之间的解 对直线与坐标轴平行的特判 调试了好长时间,注意: 1 正负数转化为整型的处理 2 注意判断有无解 #includ ...