stm32寄存器版学习笔记04 定时计数器中断
STM32共有8个定时计数器,其中TIME1和TIME8是高级定时器,TIME2~TIME5是通用定时器,TIME6和TIME7是基本定时器。以TIME3为例总结定时计数器的基本用法。
1.TIM3的配置步骤
①TIM3时钟使能
APB1外设复位寄存器 (RCC_APB1RSTR)

置1开启。清0关闭。
第一位对TIM3的时钟使能
Eg:RCC->APB1ENR|=1<<1; //使能TIM3时钟
APB2外设时钟使能寄存器(RCC_APB2ENR)

②设置TIM3_ARR和TIM3_PSC的值
通过这两个寄存器来设置自动重装的值以及分频系数。
自动重装载寄存器(TIMx_ARR)

预分频器(TIMx_PSC)

③设置TIM3_DIER允许更新中断
中断使能寄存器(TIMx_DIER)

0:禁止更新中断。1:允许更新中断
因为要使用TIM3的更新中断,所以设置DIER的UIE为为1,使能更新中断。
Eg: TIM3->DIER|=1<<0; //允许更新中断
④允许TIM3工作
控制寄存器1(TIMx_CR1)

CEN:使能计数器 位0 0:禁止计数器; 1:使能计数器。
Eg: TIM3->CR1|=0x01; //使能定时器3
或 TIM3->CR1|=1<<0;
⑤TIM3中断分组设置

直接调用MY_NVIC_Init()函数
Eg:MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2
⑥编写中断服务函数
状态寄存器(TIMx_SR)


Eg: if(TIM3->SR&0X0001)//溢出中断
编写定时器中断服务函数,从而处理定时器产生的相关中断。在中断产生后,通过状态寄存器的值来判断此次产生的中断属于什么类型。然后执行相关的操作,这里使用的是更新(溢出)中断,所以在状态寄存器SR的最低位。处理完中断之后应该向TIM3_SR的最低位写0,来清除该中断标志。
Eg://定时器3中断服务程序
void TIM3_IRQHandler(void) //TIM3_Int_Init(5000,7199); //10Khz的计数频率,计数到5000为500ms
//500ms中断一次
{
if(TIM3->SR&0X0001) //溢出中断
{
//add your code
}
TIM3->SR&=~(1<<0); //清除中断标志位
}
2.关于溢出事件的计算
因为Stm32_Clock_Init函数里面已经初始化APB1的时钟为2分频,所以APB1的时钟是32MHz(系统时钟72MHz)。
从STM32内部时钟树图可知:当APB1的时钟分频数为1时,TIM2~7的时钟为APB1的时钟;而如果APB1的时钟分频数不为1,那么TIM2~7的时钟频率是APB1时钟的两倍。因此TIM3的时钟为72MHz,再根据arr和psc即可计算中断时间
Tout = ( (arr+1) * (psc+1) ) / Tclk
其中,Tclk为TIM3的输入时钟频率(单位:MHz)。Tout为TIM3的溢出时间(单位:us)。
Eg:void TIM3_Int_Init(u16 arr,u16 psc)----->TIM3_Int_Init(5000,7199);//10Khz的计数频率,计数到5000为500ms
Tout = (5000 * 7200)/72 = 500,000us = 500ms

3.定时器中断的应用
timer.c
//定时器3中断服务程序
void TIM3_IRQHandler(void) //TIM3_Int_Init(5000,7199);//10Khz的计数频率,计数到5000为500ms
//500ms中断一次
{
if(TIM3->SR&0X0001)//溢出中断
{
LED1=!LED1;
}
TIM3->SR&=~(<<);//清除中断标志位
}
//通用定时器中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void TIM3_Int_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=<<; //TIM3时钟使能
TIM3->ARR=arr; //设定计数器自动重装值
TIM3->PSC=psc; //预分频器设置
TIM3->DIER|=<<; //允许更新中断
TIM3->CR1|=0x01; //使能定时器3
MY_NVIC_Init(,,TIM3_IRQn,);//抢占1,子优先级3,组2
}
main.c
int main(void)
{
Stm32_Clock_Init(); //系统时钟设置
delay_init(); //延时初始化
uart_init(,); //串口初始化
LED_Init(); //初始化与LED连接的硬件接口
TIM3_Int_Init(,);//10Khz的计数频率,计数到5000为500ms
while()
{
LED0=!LED0;
delay_ms();
}
}
stm32寄存器版学习笔记04 定时计数器中断的更多相关文章
- stm32寄存器版学习笔记06 输入捕获(ETR脉冲计数)
STM32外部脉冲ETR引脚:TIM1-->PA12;TIMER2-->PA0:TIMER3-->PD2;TIMER4-->PE0… 1.TIM2 PA0计数 配置步骤 ①开启 ...
- stm32寄存器版学习笔记05 PWM
STM32除TIM6和TIM7外都可以产生PWM输出.高级定时器TIM1和TIM8可以同时产生7路PWM,通用定时器可以产生4路PWM输出. 1.TIM1 CH1输出PWM配置步骤 ①开启TIM1时钟 ...
- stm32寄存器版学习笔记03 外部中断
stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...
- stm32寄存器版学习笔记07 ADC
STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把A ...
- stm32寄存器版学习笔记08 DMA
DMA(Direct Memory Access),直接存储器访问.DMA传输方式无需CPU直接控制传输,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU效率大大提高.stm32f10 ...
- stm32寄存器版学习笔记02 串口通信
stm32F103RCT6提供5路串口.串口的使用,只要开启串口时钟,设置相应的I/O口的模式,然后配置下波特率.数据位长度.奇偶校验等信息,即可使用. 1.串口的配置步骤 ①串口时钟使能 APB2外 ...
- stm32寄存器版学习笔记01 GPIO口的配置(LED、按键)
STM32的I/O口可以由软件配置成如下8种模式:输入浮空.输入上拉.输入下拉.模拟输入.开漏输出.推挽输出.推挽式复用功能及开漏复用功能.每个I/O口由7个寄存器来控制:配置模式的端口配置寄存器CR ...
- stm32寄存器版学习笔记10 SPI
SPI(Serial Peripheral Interface),串行外围设备接口.SPI是一种高速的.全双工.同步的通信总线. SPI接口一般使用4条线通信: MISO 主设备数据输入,从设备数据输 ...
- stm32寄存器版学习笔记09 IIC
I²C(Inter-Integrated Circuit)总线是一种两线式串行总线,用于连接微控制器及其外设,是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据. IIC总线在传送数据过程中 ...
随机推荐
- caohaha's stuff
2017-08-20 11:12:29 writer:pprpCCPC预选赛水平太菜了,去不了了 这个是一个找规律的题目,题意一开始也很难理解 题意描述: 给你一个数,比如说1,在一个坐标系中你需要用 ...
- cocos2d-x入门一
为什么要学cocos2d-x 首先要明白什么是cocos2d-x,能干什么.cocos2d-x是一种跨平台的2D.3D游戏开发工具,目前较为流行的大多数android.ios游戏都是用它 ...
- RabbitMQ 之消息确认机制(事务+Confirm)
概述 在 Rabbitmq 中我们可以通过持久化来解决因为服务器异常而导致丢失的问题,除此之外我们还会遇到一个问题:生产者将消息发送出去之后,消息到底有没有正确到达 Rabbit 服务器呢?如果不错得 ...
- MySQL5.7 半同步复制
一.概述 5.5与5.7的半同步复制可能存在差异,从MySQL5.5开始,MySQL以插件的形式支持半同步复制 异步:默认情况下,MySQL复制是异步的.主库在执行完客户端提交的事务后会立即将结果返给 ...
- 为什么使用Lambda表达式(翻译版)
简介 如上图所示,绿色框中就是Lambda表达式,是可以执行的代码块.Lambda表达式是很多编程语言的特征,比如Lisp, Python, Scala等. 但是对于java,在8以后才支持这种写法. ...
- 工作流引擎Activiti使用总结(转)
1.简单介工作流引擎与Activiti 对于工作流引擎的解释请参考百度百科:工作流引擎 1.1 我与工作流引擎 在第一家公司工作的时候主要任务就是开发OA系统,当然基本都是有工作流的支持,不过当时使用 ...
- wget下载指定目录下的文件
wget -r -np -k -P ~/tmp/ http://xxx.com/download -P 表示下载到哪个目录-r 表示递归下载-np 表示不下载旁站连接.-k 表示将下载的网页里 ...
- Ansible 手册系列 一(介绍)
一 介绍 Ansible 是一个配置管理和应用部署工具,功能类似于目前业界的配置管理工具 Chef,Puppet,Saltstack.Ansible 是通过 Python 语言开发.Ansible 平 ...
- Java进阶1. Synchronized 关键字
Java进阶1. Synchronized 关键字 20131025 1.关于synchronized的简介: Synchronized 关键字代表对这个方法加锁,相当于不管那一个线程,运行到这个方法 ...
- 【zznu-2173】
题目链接 题目描述 春天自幼学习人间大道,斩断情缘,现已修成正果,势必要斩尽巨魔.某朝末年,战乱四起,民不聊生,魔界与人间界的封印减弱,n只巨魔趁机降临人间,祸乱百姓.n只巨魔只知扰乱人间,会有天谴降 ...