当前位置: 首页 > news >正文

STM32_bug总结(TIM定时中断进不去和只进1次)

一、定时中断进不去

  /* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC_Init();
MX_TIM3_Init();
MX_TIM16_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
Remote_Init();

void Remote_Init(void) {// 启动TIM3的10us定时中断(需确保TIM3已配置为10us周期)
//	__HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE);HAL_TIM_Base_Start_IT(&htim3);}

当时的情况就是Remote_Init();在MX_TIM3_Init();前面了,导致就是先开启中断,然后再配置定时器,那肯定是不对的。

二、定时中断只进1次

自动重装一定要开,然后先前的配置是PSC:80-1  ,Period:1-1

我的定时是10us,系统总频率是8KHZ,相对精度要低一点。像上图那样配置,就是PSC不能太小。可以将period(也就是ARR)变大一点。

  • Period=0 时,计数器从 0 开始计数,下一个时钟周期就会溢出(因为 0+1 超过 Period=0),导致 UIF 标志被瞬间置位。
  • 此时计数频率是 100kHz(10us 一次溢出),但实际中断处理需要时间(即使是空函数,也需要执行清除标志位的指令)。如果 UIF 标志被置位的速度超过了 ISR 清除标志位的速度,就会出现:
    • 第一个中断触发后,ISR 还没来得及清除 UIF 标志,下一次溢出又置位了 UIF,但此时 UIF 已经是 1,不会重复触发中断(STM32 定时器的 UIF 标志是 “电平触发”,需先清 0 才能再次触发)。
    • 最终表现为 “只进一次中断”(第一次中断后,UIF 未被及时清除,后续溢出无法触发新中断)。

http://www.dtcms.com/a/327714.html

相关文章:

  • 【Python 爬虫】Playwright 多浏览器支持(Chromium/Firefox/WebKit)
  • AI入门学习--AI模型评测
  • kali linux 2025.2安装WPS并设置无报错的详细步骤
  • 云计算概述
  • 卫生间装修防水怎么做合适?
  • 外卖:重构餐饮的线上服务密码
  • 串口通信“第二次总超时”的复盘
  • XC7A15T-1FTG256C Xilinx AMD Artix-7 FPGA
  • 后端找数据库
  • nvm install 14.21.3 时npm 无法下载和识别
  • 项目实例-页面
  • 股票智能体系统的设计与开发
  • VisualSVN Server 4.2.1 安装教程 - 64位下载与配置步骤详解
  • 【Docker项目实战】使用Docker部署Vikunja任务管理工具
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day2
  • 嵌入式 - Linux软件编程:文件IO
  • 零售业CRM实战:如何打通线上线下客户数据?
  • Ansible 基本使用
  • UE官方文档学习 C++ TAarry 查询(三)Contain,Find函数的使用
  • Redis--day4--实战-黑马点评--搭建环境
  • WPS JS宏 通用方法整理汇总 实时更新
  • 【Vue 3 响应式系统深度解析:reactive vs ref 全面对比】
  • MySQL(下)
  • C语言入门完结篇_结构体、枚举、时间函数的、变量类型(C语言划分内存各个区块的方法)、文件操作
  • MyBatis 缓存与 Spring 事务相关笔记
  • Spring-Cache 缓存数据
  • damn the jvm again(2)
  • 编程模型设计空间的决策思路
  • 什么是跨域访问问题,如何解决?
  • Windows怎样配置动态磁盘