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

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.xdnf.cn/news/17788.html

相关文章:

  • MyBatis持久层实现
  • 全面解析MySQL(5)——“索引、事务、JDBC”三大核心
  • PostgreSQL——数据查询
  • 【K8s】部署安装K8s为什么要关闭swap分区?
  • Day50--图论--98. 所有可达路径(卡码网),797. 所有可能的路径
  • 元宇宙虚拟金融服务全景解析:技术创新、场景重构与未来趋势
  • 一体化步进伺服电机在无人机舱门应用中的应用案例
  • 使用Gradle手搓一个Kotlin/Native项目
  • CMU-15445(9)——PROJECT#3-Query Execution-Task#2Task#3
  • 机器学习-决策树(上)
  • TDengine 可观测性最佳实践
  • Nginx反向代理功能
  • 微前端架构:原理、场景与实践案例
  • 扫雷 (minesweeper)
  • 从0-1搭建webpack的前端工程化项目
  • 【前端基础】15、列表元素、表格元素、表单元素(注:极其粗略的记载。)
  • (3万字详解)Linux系统学习:深入了解Linux系统开发工具
  • js异步操作 Promise :fetch API 带来的网络请求变革—仙盟创梦IDE
  • Java Web项目后台管理系统之内容管理仿写:内容、搜索、页码加载
  • Zabbix携手Grafana打造炫酷监控大屏
  • 【Linux文件操作】文件操作系统调用
  • 19.Linux DHCP服务
  • 2025.8.6 图论(1)Solution
  • MySQL 基本语法
  • 对自己的 app 进行分析, 诊断,审视
  • 多路转接 select
  • 常见鱼饵制作方式
  • FPGA学习笔记——DS18B20(数字温度传感器)
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘lightgbm’问题
  • 【C++】封装哈希表模拟实现unordered_set和unordered_map