在使用stm32的通用定时器定时中断的时候,发现定时器在完成初始化配置后,定时器UIF位会立刻置位,导致在使能中断后,程序会立刻进入定时器中断。
如果设计代码时不希望定时器配置完成后,立刻进入中断,可以在定时器配置完成后,立刻清除UIF标志位(TIMx->SR &= 0xFFFE) ,再使能定时器更新中断。比如用库函数这么写:
TIM_ClearITPendingBit(TIM4, TIM_IT_Update );
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //使能TIM4的更新中断
TIM_Cmd(TIM4, ENABLE);
但又发现个特别奇怪的问题,TIM_ClearITPendingBit和TIM_ITConfig先后顺序一定不能错。如果顺序错了,也会立刻进入中断处理函数。
关键字:stm32 通用定时器 中断问题
引用地址:
stm32通用定时器中断问题
推荐阅读最新更新时间:2024-03-16 14:54
STM32定时器相关介绍(主要是有UEV更新事件介绍)
单片机的定时器的确很强大,参考说明书中就占了一百多页,占参考手册1/4 有多了。 STM32的定时器分了好几个类别,各个类别针对功能作用都不大相同。 分有: 一、高级定时器 二、通用定时器 三、基本定时器 四、看门狗定时器 五、SysTick定时器 其中看门狗定时器和SysTick定时器本篇笔记阐述,这里主要记下对平时使用定时器作用的计时计数器的一些自己的理解。 按照参考手册中的定义 高级定时器 通用定时器 基本定时器,这三个定时器成上下级的关系,即基本定时器有的功能通用定时器都有,而且还增加了向下、向上/向下计数器、PWM生成、输出比较、输入捕获等等功能;而高级定时器又包含了通用定时器的所有功能,另外还增加了死区
[单片机]
STM32—SPI详解
一.什么是SPI SPI是串行外设接口(Serial Peripheral Interface)的缩写,SPI是一种高速、全双工、同步通信的通信总线,被广泛应用在ADC、LCD等与MCU的通信过程中,特点就是快。 二.SPI协议 就像IIC、串口一样,SPI也有其通信协议,我们一般按照分层的思想来学习SPI的协议,主要分为物理层和协议层。 物理层 首先看一下SPI通信设备之间的常用连接方式,主机和从机之间通过三条总线和片选线组成: NSS:片选设备线,每个从机都有自己的一条单独的总线与主机连接,此总线的作用就是为主机选择对应的从机进行传输数据,每个从机与主机之间的NSS总线互不相干。SPI中规定通信以NSS信号线拉低为
[单片机]
“STM32不止于芯”: 2023年STM32中国峰会暨粉丝狂欢节重磅回归深圳
2023年5月12日,中国深圳 – 服务多重电子应用领域、全球排名前列的半导体公司意法半导体(STMicroelectronics,简称ST;)将于5月12-13日在深圳蛇口希尔顿酒店举行2023年STM32中国峰会暨粉丝狂欢节。 STM32中国峰会是展示STM32产品技术和解决方案的行业盛会,2023年,我们迎来了第六届STM32中国峰会。本届峰会以“STM32不止于芯”为主题,将专注于边缘AI、网络连接、信息安全、生态系统与开发者优先计划,重点展示STM32创新产品技术如何赋能各种应用。 本届峰会将举办50多场专题会议,其中包括高管主题演讲、技术研讨会,以及ST和生态系统合作伙伴的demo演示。此外,新品展区将是本届
[单片机]
STM32学习之路(五)——RTC系统时钟
在STM32的CPU有一个RTC引脚,用于连接电池。当系统掉电后,自动由电池给RTC供电,完成时间计数。 对RTC的访问是通过APB1接口进行的。APB1刚被开启的时候,从APB1读来的RTC寄存器的第一个值可能是被破坏了的。因此在程序中,先等待RTC_CRL寄存器中的RSF位被硬件置1,然后才开始读操作。对于写操作,在每一次写操作必须保证前一次写操作完成,即通过查询RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新状态中。只有当RTOFF状态位是1,才可以写RTC寄存器。 RTC模块的寄存器实际上只有5个:控制寄存器RTC_CR,预分频装在寄存器RTC_PRL,预分频余数寄存器RTC
[单片机]
STM32 | 串口空闲中断接收不定长数据(DMA方式)
在使用STM32的串口接收数据的时候,我们常常会使用接收中断的方式来接收数据,常用的是RXNE。这里分享另一种接收数据的方式——IDLE中断(PS:本文的例子运行在STM32F103ZET6上)。 一、IDLE中断什么时候发生? IDLE就是串口收到一帧数据后,发生的中断。什么是一帧数据呢?比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也可以叫做一包数据。 二、RXNE中断和IDLE中断的区别? 当接收到1个字节,就会产生RXNE中断,当接收到一帧数据,就会产生IDLE中断。比如给单片机一次性发送了8个字节,就会产生8次RXNE中断,1次IDLE中断。 三、IDLE中断如何配
[单片机]
stm32 基于TIM1定时器的PWM输出
void PWM_TIM1(uint16_t arr,uint16_t psc) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //定时器TIM1时钟使能 TIM_DeInit(TIM1); //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Period =arr; //设置用来作为TIMx时钟频率出书的预分频值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置时钟分割 TIM_TimeBaseStru
[单片机]
stm32控制mpu9250九轴传感器
1.hardware mpu mpu9250 同时新增加一个DMP文件夹 2.hallib 无 3.设置 记得要define,同时屏蔽部分代码,不然报错。同时上位机的波特率要设置好,同时关掉数据校验。 4.main #include mpu.h #include mpu9250.h #include inv_mpu.h #include inv_mpu_dmp_motion_driver.h u8 t1=0,report=1; //默认开启上报 u8 key1; float pitch,roll,yaw; //欧拉角 short aacx,aacy,aacz; //加速度传感
[单片机]
基于STM32 I2C的TMP101温度传感器的C源码
搞这个历程差不多花了我一个周末的时间,一片小小的TMP101确实让我破费脑筋。最后甚至使用了示波器直接观察SDA SCL 的波形。不过示波器的使用确实纠正我一个严重且低级的错误。这期间也在网上搜过STM32 的I2C 应用 大多都是在说 STM32 的I2C固件库写的烂、STM32的硬件有问题、I2C接口没法用等等,最后解决方式都是用软件像51那样用IO口软件模拟IIC时序。但我看了STM32最新的勘误表,根本没有所谓STM32的IIC硬件设计缺陷。我可不想把STM32用的像8051一样。我要用高效的硬件I2C而且要用ST官方库来实现~! 心得: 函数 I2C_CheckEvent () 这个典型的用法是 while(!
[单片机]