首页 > 其他分享 >通用定时器及定时器中断实验

通用定时器及定时器中断实验

时间:2023-12-20 22:35:55浏览次数:43  
标签:TIM3 定时器 通用 中断 NVIC TIM 计数器

定时器:顾名思义是用来定时的一个外设。stm32有八个定时器,分三类

计数器计数模式又分为三种:向上,向下,向上/下计数。

向上:计数器从零计数到自动加载值,然后重新从零开始并产生一个计数器溢出事件。

向下:计数器从自动加载值计数到零,然后重新从自动加载值开始并产生一个计数器溢出事件。

向上/下计数:计数器从零计数到自动加载值并产生一个计数器溢出事件,从自动加载值计数到零并产生一个计数器溢出事件。

 

通用定时器功能:

第四个应用少。

DMA:直接存储器访问。

作用:将数据从一个地址栏空间复制到另一个地址空间。实现外设与存储器之间的高速数据传输,或者是存储器间的高速数据传输。

定时器工作过程:

 

分为四个模块:时钟产生模块,输入捕捉模块,寄存器模块,输出比较模块。

1,定时器时钟源来源很多TIMx_ETR(外部引脚),CK_INT(内部时钟),ITR(来自其他定时器),因为定时器间可以级联,其他定时器输出可以为此底定时器输入,TI1FP1,TI1FP2.

2,寄存器模块:从产生的时钟经过预分频器,进入计数器,开始计数。

3,输入捕捉模块:通过边沿检测器捕捉输入。

4,输出比较模块:例如:计数器值在变化,与比较寄存器中的值比较,大于输出高电平,小于输出低电平。

 

 

定时器中断实验:

原理:计数时,会产生计数器溢出事件,而后更新事件,这触发中断(更新中断标志位)

工作过程:1,选择时钟:除非APB1的分频系数是1,否则通用定时器时钟为APB1时钟的2倍。(84M)

                   使能定时器时钟

                 函数:RCC_APB1PeriphClockCmd();

             2,初始化定时器:TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);//第一个参数为哪个定时器,第二个为初始化结构体。

TIM_TimeBaseInitStruct.TIM_ClockDivision//
TIM_TimeBaseInitStruct.TIM_CounterMode//定时器模式
TIM_TimeBaseInitStruct.TIM_Period//自动重装值
TIM_TimeBaseInitStruct.TIM_Prescaler//分频系数

 

中断时间计算公式:

Tout= ((arr+1)*(psc+1))/Tclk;

3,使能定时器

TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)//第一个参数为哪个定时器,第二个为是否使能

4,开启定时器中断,配置NVIC

TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)//开启定时器中断函数

配置NVIC不赘述

5,编写中断服务函数

TIMx_IRQHandler()

注意写完要实现的功能记得清除中断状态标志位(回到程序)。

 

 

 

 

完整代码:

void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); ///使能TIM3时钟

TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;

TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断
TIM_Cmd(TIM3,ENABLE); //使能定时器3

NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定时器3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);

}

//定时器3中断服务函数
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
{
LED1=!LED1;//DS1翻转
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
}

 

标签:TIM3,定时器,通用,中断,NVIC,TIM,计数器
From: https://www.cnblogs.com/panshoudeng/p/17917768.html

相关文章

  • [香橙派开发系列]中断?不!中断!
    目录前言一、什么是中断二、普通单片机和系统单片机的区别三、中断的区别四、配置香橙派的中断1.进程版2.wiringPi库函数版3.线程版3.1Linux内核的线程总结前言中断这个在很多单片机中都是比较常见的,像什么51单片机,stm32单片机都是可以通过自己的设置来实现中断的。在香橙派这......
  • 【愚公系列】2023年12月 通用职责分配原则(九)-受保护变量原则(Protected Variations
    ......
  • RTSP流媒体视频平台LiteNVR播放HLS流,出现中断且无法自动恢复的原因排查
    有用户反映,在使用安防视频LiteNVR平台时,取平台分发的hls地址在移动端播放一段时间就会停止,且无法自动恢复播放。今天我们来介绍下该问题的排查与解决方法。LiteNVR是基于RTSP/Onvif协议推出的安防视频监控管理平台,它可实现设备接入、实时直播、录像、检索与回放、存储、视频分发......
  • 最高法--票据权利时效均系可中断时间,对票据时效起诉后再撤诉也应当视为中断。
    1.(2022)最高法民申727号  陕西能源凉水井矿业有限责任公司、陕西华山创业有限公司等票据追索权纠纷民事申请再审审查民事裁定书申请人主张:凉水井公司、华山创业公司、陕西能源公司依据《中华人民共和国民事诉讼法》第二百零七条规定申请再审,请求:1.裁定中止本案原审判决执行;2.撤销......
  • 十六、组件-通用属性-位置设置
    位置设置设置组件对齐方式、布局方向和显示位置。align:设置元素内容在元素绘制区域内的对齐方式。direction:设置元素水平方向的布局。position:基于父容器的定位markAnchor:相对于自身的定位,x正数代表左移,负数代表右移;y正数代表上移,负数代表下移。offset:相对于自身的定......
  • 十五、组件-通用属性-按键事件
    按键事件指组件与键盘、遥控器等按键设备交互时触发的事件(仅适用于所有可获焦组件,例如:Button)//绑定该方法的组件获焦后,按键动作触发该回调onKeyEvent(event:(event?:keyEvent)=>void)案例代码:/***author:创客未来*copyright:com.ckFuture.hrb*按键事件*/@Entr......
  • 十四、组件-通用属性-触摸事件
    //手指触摸动作触发回调onTouch(event:(event?:TouchEvent)=>void) 案例代码:/***author:创客未来*copyright:com.ckFuture.hrb*触摸事件*/@Entry@ComponentstructTouch{@Statetext:string=''@StateeventType:string=''build(){......
  • 内核定时器
    1.节拍器  100hz10ms间隔,jiffies其实就是jiffies_64的低32位  记录系统节拍树,因为是32位所以记录最大值为4294967296(个节拍,也就是这么多个10ms) 4294967296/100/60/60/24= 49.7天 就会归零,也叫绕回  可以用相关的API函数处理,实现定时一秒的节拍数是HZ特点:......
  • jz2400向内核申请中断
    /iqr_testirq_traditional/#include<linux/module.h>#include<linux/init.h>#include<linux/kernel.h>#include<linux/irq.h>#include<linux/interrupt.h>#include<linux/gpio.h>#include<linux/delay.h>#inc......
  • 十三、组件-通用属性-点击事件
    组件是构建页面的核心,每个组件通过对数据和方法的简单封装,实现独立的可视、可交互功能单元。组件之间相互独立,随取随用,也可以在需求相同的地方重复使用。@Entry@ComponentstructClick{@Statetext:string=''build(){Column(){Row({space:20}){......