当前位置: 首页 > news >正文

STM32标准库学习笔记-4.定时器中断

参考教程:【STM32入门教程-2023版 细致讲解 中文字幕】

定时器简介

  1. TIM(Timer)定时器。
  2. 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断。
  3. 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时。
  4. 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。
  5. 根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型。

定时器类型

        STM32F103RCT6上总共有8个定时器,其中TIM1和TIM8是高级定时器,它们挂载在APB2高速总线上。而TIM2、TIM3、TIM4、TIM5是通用定时器,TIM6、TIM7是基本定时器,它们都挂载在APB1上,基本定时器的功能最少,高级定时器功能最多。

定时器框图

通用计时器

基本定时器

高级定时器

定时器基本结构

预分频器时序

PSC为预分频系数,(PSC+1)为分频值。PSC = 1时,信号为2分频。

计数器时序

  • ARR:重装寄存器值(需要+1)
  • PSC:预分频寄存器值(需要+1)
  • ARR预装时序(影子寄存器是否使用):

存在预装时序

不存在预装时序

        框图中结构存在阴影时表示该寄存器具有可选影子寄存器,更改该结构对应的寄存器时,使用影子寄存器时,会在TIM当前计数周期结束前保持原有值,计数周期结束后影子寄存器才装入修改值,影子寄存器作为缓冲,该修改才生效。

#include "stm32f10x.h"    // Device headervoid Timer2_Init(void)
{//启用系统时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//让TIM2使用内部时钟TIM_InternalClockConfig(TIM2);//时基单元初始化TIM_TimeBaseInitTypeDef TIM2_TimeBaseInitStructure;TIM2_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//定时器时钟预分频设置为1,也就是不分频,直接使用相应总线频率TIM2_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM2_TimeBaseInitStructure.TIM_Period = 10000 - 1;    //重装值9999TIM2_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;    //预分频系数7199,72MHz => 10KHzTIM2_TimeBaseInitStructure.TIM_RepetitionCounter = 0x00;//TIM1,TIM8有效;STM32定时器用TIM_RepetitionCounter设置重复计数器的值时,当TIM_RepetitionCounter为N时,定时器计数结束后不产生中断而是再重复N次后产生一次中断 。TIM_TimeBaseInit(TIM2,&TIM2_TimeBaseInitStructure);//定时器中断控制TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);TIM_ClearFlag(TIM2,TIM_IT_Update);  //清除标志位避免马上进中断//使能定时器TIM_Cmd(TIM2,ENABLE);//NVIC配置NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitTypeDefStructure;NVIC_InitTypeDefStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitTypeDefStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitTypeDefStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitTypeDefStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitTypeDefStructure);}//中断服务程序模板
/*void TIM2_IRQHandler(void)
{if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET){//...TIM_ClearITPendingBit(TIM2,TIM_IT_Update);}
}*/

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 前端css动画transform多个属性值写法
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • 象棋布局笔记
  • 四天倒计时,SETTA会议你准备好了吗?
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • STM32标准库学习笔记-9.DMA 直接存储器存取
  • MySQL数据库——表的CURD(Update)
  • Ubuntu 基础使用
  • Nginx--代理与负载均衡(扩展nginx配置7层协议及4层协议方法、会话保持)
  • Global Structure-from-Motion Revisited golmap论文翻译
  • 搭建内网开发环境(五)|基于nexus搭建npm私服
  • IPage类与Page类区别和作用讲解
  • 【vim 学习系列文章 15.2 -- vim vimgrep 使用详细介绍】
  • WebRTC音视频开发读书笔记(六)
  • Go 语言并发--高级概述
  • JavaScript-如何实现克隆(clone)函数
  • $translatePartialLoader加载失败及解决方式
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Android系统模拟器绘制实现概述
  • CentOS 7 防火墙操作
  • Fastjson的基本使用方法大全
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JWT究竟是什么呢?
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Python_OOP
  • React16时代,该用什么姿势写 React ?
  • swift基础之_对象 实例方法 对象方法。
  • use Google search engine
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • Yii源码解读-服务定位器(Service Locator)
  • 初探 Vue 生命周期和钩子函数
  • 复习Javascript专题(四):js中的深浅拷贝
  • 前端自动化解决方案
  • 微信开放平台全网发布【失败】的几点排查方法
  • 小程序开发之路(一)
  • ionic异常记录
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • ###项目技术发展史
  • #QT(智能家居界面-界面切换)
  • (02)Unity使用在线AI大模型(调用Python)
  • (21)起落架/可伸缩相机支架
  • (C#)获取字符编码的类
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (转)ObjectiveC 深浅拷贝学习
  • *** 2003
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'