STM32定时器详解——TIM详解
TIM简介
1、TIM (Timer)定时器
2、定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断
3、16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时4、钟下可以实现最大59.65s的定时
5、不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能
6、根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型
定时器类型
STM32F03C8T6具有四个定时器
基本定时器的结构图
通用定时器的结构图
查看一下引脚定义表
高级定时器结构图
定时中断基本结构图
预分频器的时序
计数器计数频率:
CK_CNT=CK_PSC/(PSC+1)
代码实现
我们要新建一个工程然后打开MDK5
找到time.h的库文件
这些函数我们会用到的
然后就编写我们的time.c和time.h文件
#include "stm32f10x.h" // Device header
#include "time.h"
extern uint16_t Num;
void Timer2_Init(void)//通用定时器2初始化
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//开启时钟TIM_InternalClockConfig(TIM2);//选择内部时钟TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;//定义结构体 然后填写参数TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1 ;//选择1分频TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//计数器模式 这里选择为向上计数TIM_TimeBaseInitStruct.TIM_Period = 10000-1;//arr -1是因为有偏差 自动重装载值TIM_TimeBaseInitStruct.TIM_Prescaler = 7200-1;//psc 预分频系数 72M分频7200得到10K的TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;//重复计数器高级定时器才有,这里直接给0TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);//配置实基单元TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);//避免刚初始化就进入中断的问题TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//使能中断 TIM2 向上计数 使能这样就可以了//配置优先级NVICNVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置NVIC分组 这里配置为分组2NVIC_InitTypeDef NVIC_InitStruct;//配置NVIC的结构体NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;//选择定时器2的中断NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//使能NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;//强占优先级NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;//响应优先级NVIC_Init(&NVIC_InitStruct);TIM_Cmd(TIM2, ENABLE);//启动定时器
}//编写中断服务函数void TIM2_IRQHandler()
{if(TIM_GetFlagStatus(TIM2,TIM_FLAG_Update) == SET)//检查一下中断标志位{Num++;TIM_ClearITPendingBit(TIM2,TIM_FLAG_Update);//清除中断标志位}}
time2.h
#ifndef __TIME_H
#define __TIME_Hvoid Timer2_Init(void);//通用定时器2初始化#endif
实现效果
定时器以1s的速度在计数
到这里今天学习的内容就分享完成啦!
STM32定时器详解——TIM详解相关推荐
- STM32定时器---正交编码器模式详解
编码器分类: 按工作原理:光电式.磁电式和触点电刷式 按码盘的刻孔方式:增量式和绝对式两类 由于博主接触面还不是很广,一共就用过两个种类的编码器,都是属于光电的 差分编码器:一般由8根线连接 信号线分 ...
- STM32 - 定时器的设定 - 基础 01.1 - Repetition counter
前言:Repetition counter是一个STM32增强的计数器功能,有很多用途,本文尝试进行简单阐述: 我们理解为,就是定时器溢出再增加一个倍率rate 的控制.注意是倍率,也就是如果是定时1 ...
- STM32 定时器详解
STM32 定时器详解 吃了一个猛亏,自己理解花了大半天时间,结果一看代码发现巨简单 算了,把自己理解的放上来吧 目录 STM32 定时器详解 前言 一.定时器种类和区分 二.时钟源 三.计数过程 3 ...
- STM32定时器之预分频器详解
STM32定时器(TIM)之预分频器(PSC)详解 在STM32的定时器中,预分频器(Prescaler-PSC)用来将定时器时钟源进行分频输出. 预分频器的值由寄存器TIMx_PSC设定,是一个16 ...
- 【STM32学习】时钟配置详解
[STM32学习]时钟配置详解 看懂时钟图 结合代码 外部高速时钟修改 看懂时钟图 在刚开始学习32的时候,并不会在意这些,或者即使看了也看的不是很明白.随着学习的深入,我们发现看门狗.定时器.ADC ...
- STM32接口FSMC/FMC难点详解
STM32接口FSMC/FMC难点详解 转载 http://blog.sina.com.cn/s/blog_808bca130102x94k.html STM32F767的FMC将外部存储器划分为 ...
- STM32之NVIC的深入详解
朋友们,如果你需要在STM32上移植RTOS,那么首先必须深入理解它的中断系统.[转载]STM32之NVIC的深入详解 什么是NVIC?即嵌套向量中断控制器(Nested Vectored Inter ...
- python线程池原理_Python定时器线程池原理详解
这篇文章主要介绍了Python定时器线程池原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 定时器执行循环任务: 知识储备 Timer(int ...
- STM32 USB设备远程唤醒机制详解
目录 1.USB Resume信号 2.USB远程唤醒的方式 3.J状态和K状态 4.STM32 USB设备远程唤醒机制详解 5.主机对设备远程唤醒功能状态的获取.清除和设置 1.USB Resume ...
最新文章
- iOS 中 load 和 initialize的实现顺序
- oracle如何给表上锁,【ORACLE】Oracle中发生表加锁、死锁的原因,查看,与解决方法...
- Android --- 命名规范
- 使用访问控制列表控制用户登录
- BZOJ 4242 水壶(BFS建图+最小生成树+树上倍增)
- 【项目调研+论文阅读】(目录)中文实体识别研究方法综述 day6
- PHP文件中定义加载资源文件
- 跳出公式,看清全局,图神经网络(GCN)原理详解
- java 类注释标准_Java 标准注释
- 拓扑排序 java_[Java]聊聊拓扑排序算法
- Mac解决Error: No such file or directory @ rb_sysopen报错问题
- Spring的事务控制
- 关于webpack登堂入室的必经之路(1)
- 在线免费体验的文字识别接口
- 系统设计中的集群隔离和机房隔离
- uniapp 埋点(友盟)
- Unity3D开发之折线图制作
- java计算机毕业设计会员商城管理系统源码+mysql数据库+系统+lw文档+部署
- 英语作文计算机国际会议开幕词,学术会议发言稿 英文(精选多篇)
- centos7 安装docker 报错 conflicts with file from package