stm32f103定时器中断

发布者:SereneSoul55最新更新时间:2019-09-29 来源: eefocus关键字:stm32f103  定时器  中断 手机看文章 扫描二维码
随时随地手机看文章

stm32为我们提供了8个定时器,分为:通用是定时器(TIM2~TIM5),高级定时器(TIM1和TIM8),基本定时器(TIM6和TIM7)。


至于三者之间的区别可以参考以下博客:https://blog.csdn.net/dukai392/article/details/72058041


本次我们主要讨论的是通用定时器的基本知识以及更新中断的配置过程。


通用定时器框图如下:

由于stm32的定时器十分复杂,功能特多而本次我们只讨论他的计数跟新功能(定时)。


时钟的选择:


由框图中红色部分可知定时器的时钟来源有三个:内部时钟(CK_INT),外部时钟(TIMx_ETR),其他定时器的时钟(ITR0-ITR3).


本次我们主要讲解内部时钟的配置,至于其他时钟可以自行尝试(实际工作中大多使用内部时钟)。


内部时钟框图:

从图中可以看出:由AHB时钟经过APB1预分频系数转至APB1时钟,再通过某个规定转至TIMxCLK时钟(即内部时钟CK_INT、CK_PSC)。最终经过PSC预分频系数转至CK_CNT。

注:X1/X2有APB1预分频系数来决定,如果AHB时钟为72m,APB1预分频器值为2那么CK_PSC=APB1*2=72m。定时器最终时钟由PSC预分频器得到。


计数模式:


向上计数:从0计数到预装载值就会产生一个溢出事件,然后继续从0开始计数。


向下计数:从预装载值计数到0就会产生一个溢出事件,然后继续从预装载值开始计数。


中央对齐:计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。

相关寄存器:计数器当前值寄存器CNT,预分频寄存器TIMx_PSC,自动重装载寄存器(TIMx_ARR),控制寄存器1(TIMx_CR1),DMA中断使能寄存器(TIMx_DIER)


寄存器的相关配置方法参考手册


库函数初始化定时器方法:


① 能定时器时钟:RCC_APB1PeriphClockCmd();


②  初始化定时器,配置ARR,PSC:TIM_TimeBaseInit();


③开启定时器中断,配置NVIC:


      void TIM_ITConfig();


      NVIC_Init();


④  使能定时器:TIM_Cmd();


⑥  编写中断服务函数:TIMx_IRQHandler();


Tout(溢出时间)=(ARR+1)(PSC+1)/Tclk      (其中Tclk为PSC时钟也就是定时器还未分频时的时钟,一般为72M)


例如定时1S:


1S=(10000)*(7200)/72M


注:


typedef struct


{


  uint16_t TIM_Prescaler;       //TIMx 时钟频率除数的预分频值(PSC)


  uint16_t TIM_CounterMode;    //计数模式


  uint16_t TIM_Period;       //自动重装载值


  uint16_t TIM_ClockDivision; //时钟分频


  uint8_t TIM_RepetitionCounter; //重复计数


} TIM_TimeBaseInitTypeDef


状态标志位获取和清除:


FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);


void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);

关键字:stm32f103  定时器  中断 引用地址:stm32f103定时器中断

上一篇:stm32库函数学习篇----通用定时器(PWM功能)
下一篇:stm32的can总线理解及应用——程序对应stm32f103系列

推荐阅读最新更新时间:2024-11-09 19:32

51单片机是如何产生串口中断
首先,你要用软件允许中断, 即C语言中EA = 1; 允许总中断ES = 1; //允许串口中断汇编中可用 SETB EA ;允许总中断 SETB ES ;允许串口中断 当单片机接收到一帧数据后,RI会置1,向CPU申请中断,若之前有中断允许,则产生了中断,进入中断服务程序。 当然,单片机发送完一帧数据,TI也会置1,同样会产生中断! 一般我们在发送数据时要关中断,因为一般你不用在发送时不用处理数据; 接收数据时要开中断,以便你在中断服务程序中将接收到的数据进行存储并处理。 补充:其实,不管你有没有允许中断,上位机(此时即给单片机发送信息的机器)只要给单片机发送数据,单片机就会自动接收数据,并把它放在数据缓
[单片机]
ARM中的中断向量表
当中断或异常发生的时候,CPU自动将PC指向一个特定的地址,这个地址就是中断向量表。 在32位ARM系统中,一般都是在中断向量表中放置一条分支指令或PC寄存器加载指令,实现程序跳转到中 断服务例程的功能。例如: IRQEntry B HandleIRQ ;跳转范围较小 LDR PC,=HandleFIQ ;LDR伪指令等效生成1条存储读取指令和1条32位常数定义指令。32位常数存储在LDR指令四周的存储单元 中,相对偏移小于4KB。该32位数据就是要跳转到的中断服务程序入口地址。 之所以使用LDR伪指令,是因为ARM的RISC指令为单字指令,不能装载32位的立即数 (常数),无法直接 把一个32位常数数据或地
[单片机]
STM32学习笔记:外部中断的使用
中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大大增加,而且中断的设置也更加复杂。今天就将来探讨一下关于STM32中的中断系统。 1 基本概念 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI
[单片机]
STM32F103标准库开发:内部Flash的读写
一、STM32存储器介绍 STM32存储器分为以下两种: 1. 随机存储器—RAM RAM是与CPU直接交换数据的内部存储器,也叫主存(内存)。 它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。 当电源关闭时RAM不能保留数据(掉电数据消失哦)如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)。 2. 只读存储器—ROM ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。 ROM所存数据稳定,断电后所存数据也不会改变。 二、STM32F103系列存储器介绍 1. STM32F103系列存储器分类 具体分类
[单片机]
<font color='red'>STM32F103</font>标准库开发:内部Flash的读写
ACM32F303对比STM32F103差异说明
一、整体功能对比 分别选择两款芯片(LQFP64封装)最大配置资源的型号(STM32F103RG、ACM32F303RC)进行比对,两者比对如下: 二、管脚差异说明 举例如下: 举例如下:LQFP64
[单片机]
ACM32F303对比<font color='red'>STM32F103</font>差异说明
STM32外部中断详解
一、基本概念 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但是STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字构成一个32位的优先级寄存器。68个通道的优先级控制字至少构成17个32位的优先级寄存器。 4bit的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,后面是响应优先级。按照这种分组,4bit一共可以分成5组 第0组:所有4bit用于指定响应优先级; 第1组:最高1位用于指定抢占式优先级,后面3位用于指定响应优先级; 第2组:最高2位用于指定抢占式优先级,后面2位用于指定响应优先级; 第3组
[单片机]
51单片机之中断实验
什么叫中断: 中断是指CPU在执行当前程序的过程中,由于某种随机出现的外设请求或CPU内部的异常事件,使CPU暂停正在执行的程序而转去 执行相应的服务处理程序;当服务处理程序运行完毕后,CPU再返回到暂停处继续执行原来的程序。 单片机在执行程序时其程序流程图 引起CPU中断的根源,称为中断源,中断源向CPU提出中断请求,CPU暂时中断原来的事务A,转去处理事件B,对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。中断的开启与关闭、设置启用哪一个中断等都是由单片机内部的一些特殊功能寄存器来决定的。 当CPU正在处理一个中断源请求的时候(执行相应的中断服务程
[单片机]
51单片机之<font color='red'>中断</font>实验
单片机定时器与串口中断的问题
{ TMOD |= 0x20; //0011 0000 SCON = 0x50; //0101,0000 TH1 = 0xFA; TL1 = 0xFA; TMOD = 0x01; //应该改成TMOD |= 0x01; TH0 = 0x70; TL0 = 0xc6; ET0=1; ES = 1; // EA = 1; // TR0 = 1; TR1 = 1; // } 如上是串口中断初始化和定时器T0初始化,,,咋一看没有啥问题,, 但注意了,在设置定时器的TMOD时,应使用TMOD |= 0x01,,,否则串口中断是不工作的,,,,这些小问题总是很恼火~~~~~
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved