关于TIM更新中断一使能就进入中断的问题

HAL_TIMEx_HallSensor_Start() 和 HAL_TIMEx_HallSensor_Start_IT()的区别?TIM_IT_CC1 和 TIM_IT_UPDATE的区别? 上图是输出PWM的原理,假定定时器工作在向上计数 PWM模式,且当 CNT<CCRx 时,输出 0,当 CNT>=CCRx 时输出 1。改变 CCRx 的值,就可以改变 PWM 输出的占空比,改变 ARR 的值,就可以改变 PWM 输出的频率。我目前的理解是,TIM_IT_Update 是更新中断,详见后文;(因为在现在的使能霍尔传感器函数中,开启了触发中断和更新中断,但没有TIM_IT_CC1这种中断类型。定义处的说明,和前一个的区别,当然从函数名字也可以看出,强调一个“中断模式”。 阅读详情

问题

        在ST库中,在TIM_TimeBaseInit()函数中结尾软件置位了UG更新事件来重新加载预分频器和重复计数值,所以导致SR的UIF更新中断标志位置起,导致当一开启IT_UP中断时会立即进入中断

 

解决办法

        先做更新中断标志的清除操作,即清除TIMx->SR寄存器里的UIF标志,然后做定时器更新中断的使能操作。

至于开启相关定时器的指令摆放位置并不严格。

使用下述三种则不会出现一开启定时器就进入中断的问题。

①

TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除更新中断请求位

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

TIM_Cmd(TIM3, ENABLE);//启动定时器

②

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//清除更新中断请求位

TIM_Cmd(TIM3, ENABLE);

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

③

TIM_Cmd(TIM3, ENABLE);

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//清除更新中断请求位

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

 

使用一下三种则会出现开启定时器就会进行一次中断问题。

(1)

TIM_Cmd(TIM3, ENABLE);

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

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//清除更新中断请求位

 

(2)

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

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//清除更新中断请求位

TIM_Cmd(TIM3, ENABLE); 

 

(3)

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

TIM_Cmd(TIM3, ENABLE);

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);//清除更新中断请求位

 

若是寄存器操作

        自己用寄存器操作时也会出现这个问题,若不使用 TIMx->EGR |= (u16)1<<0; 计数值和重复计数值无法装载,也会出现立即复位

解决办法:

        在配置好ARR、PSC、RCR后,在使能更新中断TIM_IT_Update之前置位UG产生一个更新事件,然后清除SR的更新中断标志位,最后再使能TIM

输入捕获中断函数分析解读 阅读详情

相关推荐

stm32f103——基本定时器与定时器中断

我们前面已经学过了滴答定时器,那么定时器的原理与它一样,只不过滴答定时器是在内核中的定时器,而定时器是片上外设。 定时器分为:基本定时器和通用定时器。而基本定时器所拥有的功能,通用定时器都有。所以,通用定时器内集成了基本定时器。 定时器作用:产生一个精准的定时 ​​​​​​​​​​​​​​​​​​​​​ 16位预分频器:将输入进来的72Mhz进行预分频,但是它是16位的,所以它的分配系数范围为1~65535。 16位自动重装载累加

qq_39577221的博客 4850

stm32定时器中断类型分析

 一直在用的stm32定时器的中断都是TIM_IT_Update更新中断,也没问为什么,直到碰到有人使用TIM_IT_CC1中断,才想到这定时器的中断类型究竟有什么区别,都怪当时学习stm32的时候不够精啊,百度好久也没见有人解释清楚,下面开始我的探究之路。下面是所有的定时器中断类型。 #define TIM_IT_Update ((uint16_t)0...

We are all in the gutter, but some of us are looking at the stars. 1万+

HAL库的TIM中断和输入捕获

硬件:stm32f4xx 软件:keil5(HAL库) 1.TIM中断(TIM3) 首先先把TIM初始化,官方给的初始化函数是HAL_TIM_Base_Init(TIM_HandleTypeDef *htim),也就意味着我们要首先初始化好TIM_HandleTypeDef这个结构体。所以我们先写一个函数来构建句柄。 TIM_HandleTypeDef TIM3_Handler; void TIM3_Init(u16 per,u16 psc) { TIM3_Handler.Instanc

weixin_45430181的博客 2万+

32 的timers中断处理 两种方式

在固件库函数里面,用来读取中断状态寄存器的值判断中断类型的函数是: ITStatusTIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t) 该函数的作用是,判断定时器TIMx的中断类型TIM_IT是否发生中断。比如,我们要判断定时器3是否发生更新(溢出)中断,方法为: if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RE

gtkknd的专栏 1万+

STM32F4 TIM更新中断与PWM输出(HAL库)

文章目录概述`TIM`基本初始化`TIM`时钟初始化`TIM`参数初始化`TIM`初始化函数`TIM`句柄`TIM`初始化结构体`Msp`初始化回调函数`TIM`使能`TIM`计数器操作`TIM`更新中断`NVIC`配置`TIM`中断使能中断服务函数通用入口函数中断回调函数`TIM`更新中断示例`PWM`输出概述`PWM`输出初始化`PWM`输出时钟使能`GPIO`初始化`PWM`参数初始化`PWM`通道初始化`PWM`通道的开启/关闭`PWM`输出波形参数计算`PWM`基频`PWM`占空比`PWM`输出示

Lishaoyin 1万+

解决STM32开启定时器时立即进入一次中断程序问题

配置STM32定时器时,定时器中断使能、定时器使能、清除更新中断标志位,三者不同顺序程序执行时有不同效果,具体如下:TIM_ClearITPendingBit(TIM1, TIM_IT_Update); //清除更新中断请求位    TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); //使能定时器1更新中断TIM_Cmd(TIM1, ENABLE);      ...

YGT666的博客 1万+

STM32:TIM定时中断配置的最全库函数讲解笔记

TIM库函数、定时器定时中断

北邮22级信通一枚 4829

TIM定时中断(hal库)

TIM定时中断(hal库)

2301_82087113的博客 2812

STM32 TIM定时中断

总体介绍 TIM(Timer)定时器是STM32中功能最强大,结构最复杂的一个外设,以下对其做一下简介(以stm32为例): TIM可以对输入的时钟进行计数,并在数值达到设定值时触发中断。 在STM32中定时器的基准时钟一般都是主频72MHz,并且以16位计数器,预分频器,自动重装寄存器为时基单元,在72MHz计数时钟下可以实现最大59.65s的定时。同时STM32定时器支持级联模式,可实现更长时间的定时。(当两个定时器级联时就可产生8千年多的定时) TIM不仅具备基本的定时中断功能,而且还包括内外时钟源

Gracelsd的博客 1万+

STM32高级定时器TIM1中断的细节配置

STM32高级定时器TIM1中断的细节配置

qq_60845288的博客 7403

STM32--TIM定时中断&TIM输出比较

定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断。16位计数器(CNT),预分配器(PSC),自动重装寄存器(ARR)的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时。不仅具备基本的定时中断功能,而且还包含了内外时钟选择,输入捕获,输出比较,编码器接口,主从触发模式等多种功能。类型:高级定时器,通用定时器,基本定时器。OC(Output Compare)输出比较输出比较可以通过比较CNT与CCR。

2401_82748667的博客 3116

STM32——TIM定时器中断

TIM定时器中断和TIM外部中断模式的原理与代码编写

zzy_ysn的博客 2502

一使能定时器中断就立即进入中断程序?

我们在基于ST的标准库或基于CubeMx建立工程,当用到定时器并启用其更新中断时,可能会遇到一使能定时器中断且计算器还未开始计数就立即进入更新中断服务程序的情况。可能出现该现象的场合大概像下面样子,即先使能定时器更新中断,然后才去启动计数器。我们会发现,刚一使能更新中断还未启动计数器,结果就跑到更新中断服务程序里。看看下面截图,右边TIMER控制寄存器CEN还未置1,SR...

weixin_38106263的博客 1475

【HAL库】STM32 Timer定时器开机立即进入中断问题

学习过程中发现配置号Timer定时器功能之后,原本应该定时到指定的时间再进入中断,结果MCU开机就会进入一次中断,不符合逻辑,所以尝试解决这个问题。 拜读各大佬的博客后发现没有HAL库的解决办法,于是转身向Google走去,找到了解决办法,分享给大家。 解决办法 在TIM初始化函数 HAL_TIM_Base_Init() 与 HAL_TIM_Base_Start_IT(); 之间...

2hi9uo的博客 7633

Ubuntu 20.04 LTS下5分钟搞定ONLYOFFICE协作空间社区版(Docker版保姆级教程)

本文提供了一份在Ubuntu 20.04 LTS系统上,通过Docker快速部署ONLYOFFICE协作空间社区版的保姆级教程。内容涵盖从系统准备、Docker环境搭建,到执行自动化安装脚本、完成Web初始化的全流程,并详细说明了部署后的安全配置、数据备份及基本运维要点,帮助用户高效构建私有、安全、可控的团队文档协作平台。

weixin_28826961的博客 261

ArcGIS栅格数据像元值与坐标值提取及Excel导出全流程解析

本文详细解析了使用ArcGIS将栅格数据批量提取像元值与坐标值并导出至Excel的全流程。通过“栅格转点”、“添加XY坐标”和“表转Excel”三大核心步骤,无需编程即可自动化处理遥感、环境等领域的空间数据,有效提升数据分析效率。

zeta9的博客 365

【转载】STM32 Timer定时器开机立即进入中断问题(HAL库)

细心的朋友会发现TIM_SR_UIF其实是SR(定时器状态寄存器)的最低位,初始化时若TIM_SR_UIF为1则SR也为1,若TIM_SR_UIF为0则SR也为0,因此存在另一种解决办法:将__HAL_TIM_CLEAR_FLAG(&htim7, TIM_SR_UIF);原因就是HAL库中定时器初始化后没有更新中断标志位,__HAL_TIM_CLEAR_FLAG(&htim7, TIM_SR_UIF)后清除了更新中断标志位,此时TIM_SR_UIF为0,中断产生后TIM_SR_UIF为1。

宁静致远的博客 3798

牛顿法vs高斯牛顿法vs LM算法:三行代码说清核心区别(附性能对比表格)

本文通过对比牛顿法、高斯牛顿法和LM算法的核心迭代代码,揭示了三者在非线性最小二乘优化中的本质区别。LM算法通过引入阻尼因子,在高斯牛顿法的快速收敛与梯度下降的稳定性之间取得平衡,成为工程实践中鲁棒性最强的首选。文章还提供了清晰的性能对比表格,帮助开发者根据初始估计和问题性质快速选择合适算法。

weixin_29062255的博客 419

stm32之TIM定时中断详解

万文带你认识stm32f103的TIM定时器,涵盖通用、普通、高级定时器各部分介绍(触发控制单位、输入捕获单元、输出比较单元、CNT计数器、ARR、PSC灯),并讲解基本使用:包括结构体介绍和基本常用函数介绍。

caiji0169的博客 5256

Cadence IC618/Spectre231安装避坑指南:详解环境变量配置与License管理那些事儿

本文深入解析Cadence IC618/Spectre231安装过程中的环境变量配置与License管理难题,提供从变量冲突解决到高效License管理的实用方案。针对常见的64位标识冲突、路径污染及License服务器连接问题,给出具体诊断步骤和优化建议,帮助用户构建稳定可靠的EDA环境。

weixin_33737134的博客 616

RT_Thread Studio使用——USB虚拟串口(VCP)

RT_Thread Studio使用——USB虚拟串口(VCP)

weixin_44735205的博客 3374

TIM中断

舵机是一种根据输入PWM信号占空比来控制输出角度的装置输入PWM信号要求:周期为20ms,高电平宽度为0.5ms~2.5ms。

weixin_52554142的博客 2345

JMeter脚本录制-快速上手篇

有的项目应用场景下,压测时,需要考虑带宽因素,压测不只是压测接口,静态资源也要一起压测。一般来说,静态资源比较多,如果一个个手工去写请求,是比较繁琐的,此时,可以使用Jmeter的脚本录制功能。 步骤1,创建脚本录制模版。 JMeter菜单:文件>模版,下拉选择到Recording,点击“Create”按钮; 填写录制参数: hostToRecord:填写要录制的主机域名,例如,我们这里填入:www.baidu.com schemeToRecord:填写要录制的模式,例如,htt...

软件测试大叔 5734

STM32高级定时器TIM1TIM8中断设置提醒

STM32F103的高级定时器更新中断与捕获中断配置

m0_46659414的博客 7942

F5 Shape盾JSVMP核心检测点与无限并发Header生成实战(TikTok/航司)

本文深入剖析了F5 Shape盾结合JSVMP技术的核心风控机制,详细解读了其针对浏览器指纹、行为时序等多维度的检测逻辑。通过实战案例,分享了如何通过逆向分析、精准Hook关键检测点,并构建稳定、高并发的请求Header生成方案,以应对TikTok、航司等平台的高级反爬挑战。

weixin_29325007的博客 1013

从地方政府网站抓取政务公开数据:Python爬虫技术详解

在本文中,我们通过具体实例介绍了如何使用Python编写爬虫,从地方政府门户网站抓取政务公开数据。我们使用了requestsSelenium等最新技术,结合SQLite数据库存储抓取的数据,最后使用matplotlib进行数据可视化分析。通过本项目,您可以掌握如何抓取政府网站的公开数据,并将其进行清洗、存储和分析。这些技术对于进行政府政策分析、公共服务分析等方面具有重要的实际意义。希望通过本文的介绍,您能够更好地理解政务数据抓取的流程和方法,并能在实际工作中运用这些技术进行数据采集和分析。

2201_76125261的博客 1703
下一篇: STM32的NVIC详解
J.Robot
博客等级 码龄7年 2粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值