PY32 定时器中断回调不执行的解决办法
一发现问题我在调试 PY32 的定时器中断时按 HAL 库的流程配好了定时器也写了回调函数但全速运行后回调就是不执行。voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){if(htim-InstanceTIM14){// 这里的代码从来不执行}}打断点发现 HAL 层的回调根本没被调用。二排查过程我先是检查了定时器分频、重装值、中断优先级都没问题。然后去查了一下发现根因在 startup 启动文件里PY32 的 startup 文件虽然标了TIM14_IRQHandler这个标签但它是一个weak 弱别名默认指向一个空函数。中断发生后 CPU 跳到了空函数里根本没进到 HAL 库。三解决方法手动实现TIM14_IRQHandler把中断重定向到HAL_TIM_IRQHandler。下面是一个完整的可运行例程#includepy32f0xx_hal.hTIM_HandleTypeDef htim14;volatileuint32_ttimer_irq_count0;staticvoidAPP_SystemClockConfig(void){RCC_OscInitTypeDef RCC_OscInitStruct{0};RCC_ClkInitTypeDef RCC_ClkInitStruct{0};RCC_OscInitStruct.OscillatorTypeRCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIStateRCC_HSI_ON;RCC_OscInitStruct.HSIDivRCC_HSI_DIV1;RCC_OscInitStruct.HSICalibrationValueRCC_HSICALIBRATION_24MHz;HAL_RCC_OscConfig(RCC_OscInitStruct);RCC_ClkInitStruct.ClockTypeRCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;RCC_ClkInitStruct.SYSCLKSourceRCC_SYSCLKSOURCE_HSI;RCC_ClkInitStruct.AHBCLKDividerRCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDividerRCC_HCLK_DIV1;HAL_RCC_ClockConfig(RCC_ClkInitStruct,FLASH_LATENCY_0);}staticvoidAPP_TimerInit(void){__HAL_RCC_TIM14_CLK_ENABLE();htim14.InstanceTIM14;htim14.Init.Prescaler23999;// 24MHz/(239991) 1KHzhtim14.Init.CounterModeTIM_COUNTERMODE_UP;htim14.Init.Period999;// 1KHz/1000 1Hz 中断htim14.Init.ClockDivisionTIM_CLOCKDIVISION_DIV1;htim14.Init.AutoReloadPreloadTIM_AUTORELOAD_PRELOAD_DISABLE;HAL_TIM_Base_Init(htim14);HAL_NVIC_SetPriority(TIM14_IRQn,1,0);HAL_NVIC_EnableIRQ(TIM14_IRQn);HAL_TIM_Base_Start_IT(htim14);}/* 关键手动实现 IRQHandler调用 HAL 库的处理函数 */voidTIM14_IRQHandler(void){HAL_TIM_IRQHandler(htim14);}/* 定时器中断回调 */voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){if(htim-InstanceTIM14){timer_irq_count;}}intmain(void){HAL_Init();APP_SystemClockConfig();APP_TimerInit();while(1){// 主循环timer_irq_count 每秒自增一次}}把上面这段代码复制到一个新工程添加 HAL 库后编译下载定时器中断就能正常工作了。四补充说明为什么 HAL 要用回调中断发生后CPU 直接跳到向量表里的函数。但 HAL 库不知道用户想在这个中断里做什么事所以它设计了两层 weak 定义TIM14_IRQHandler (weak) ← startup 给的默认空函数 ↓ 你实现了就覆盖 你写的 TIM14_IRQHandler → HAL_TIM_IRQHandler() ← HAL 帮你清标志 → HAL_TIM_PeriodElapsedCallback (weak) ← 你实现的回调HAL 负责通用操作判断哪个中断源、清标志用户只需实现回调。互不干扰。也可以不用回调直接在中断函数里处理所有事结果一样voidTIM14_IRQHandler(void){// 在这里判断标志、清标志、做事不经过 HAL}两种写法选一种即可没有强制。五总结PY32 的 startup 文件只给了中断入口标签默认是弱定义。想让 HAL 库的中断回调生效必须自己实现 IRQHandler 并调用对应的 HAL 处理函数。同理串口中断、外部中断 etc. 都需要手动重定向例如voidUSART2_IRQHandler(void){HAL_UART_IRQHandler(huart2);}voidEXTI0_1_IRQHandler(void){HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1);}这个步骤容易忽略希望能帮到遇到同样问题的人。如果有纰漏之处欢迎指正。

相关新闻

【线性代数实战】向量组等价与 B=AK 矩阵乘法的深度解析(附 Python 代码实现)

【线性代数实战】向量组等价与 B=AK 矩阵乘法的深度解析(附 Python 代码实现)

前言 在机器学习和数据科学的面试或实战中,我们常常听到“向量空间”、“降维”、“基向量”等词汇。很多初学者在死记硬背线性代数的定理时,往往忽略了一个关键事实:线性代数是计算机处理高维数据的底层语言。 今天,我们就深入剖析线性代数中 “向量组等价” 与核心矩阵…

2026/7/22 22:20:10 阅读更多 →
【DEIM 创新改进】TCSVT 2026顶刊 | 独家首发创新、Conv卷积改进篇 | 引入FRConv模糊残差卷积,自适应增强与目标相关的邻域信息,助力遥感目标检测、小目标检测任务,有效涨点

【DEIM 创新改进】TCSVT 2026顶刊 | 独家首发创新、Conv卷积改进篇 | 引入FRConv模糊残差卷积,自适应增强与目标相关的邻域信息,助力遥感目标检测、小目标检测任务,有效涨点

一、本文介绍 🔥本文给大家介绍使用 FRConv模糊残差卷积 改进 DEIM 网络模型,FRConv通过逐点卷积和深度卷积提取目标边缘、纹理与局部结构,并利用基于空间距离和特征相似度的模糊加权机制,自适应增强与目标相关的邻域信息、抑制复杂背景、噪声及异常特征,再借助残差连接…

2026/7/22 22:20:10 阅读更多 →
AnimationController核心概念:Flutter在鸿蒙平台控制动画生命周期

AnimationController核心概念:Flutter在鸿蒙平台控制动画生命周期

作者:付文龙(红目香薰) 仓库地址:https://gitcode.com/feng8403000/FlutterfromBeginnertoAdvancedForHarmonyOS.git 联系邮箱:372699828qq.com 概述 在Flutter中,AnimationController是动画系统的核心组…

2026/7/22 22:19:10 阅读更多 →

最新新闻

Mac用户必备:Royal TSX替代Xshell的SSH/FTP解决方案

Mac用户必备:Royal TSX替代Xshell的SSH/FTP解决方案

1. 为什么Mac用户需要Xshell替代品作为一名长期在Mac和Windows双平台切换的开发者,我深刻理解Mac用户在寻找SSH/FTP工具时的痛苦。Windows平台有Xshell这样集SSH、FTP、SFTP于一体的专业工具,而Mac原生终端虽然强大但缺乏图形化文件传输功能。Xshell的商…

2026/7/22 23:45:17 阅读更多 →
AI开发工具生态:CLI、插件与扩展的技术实践

AI开发工具生态:CLI、插件与扩展的技术实践

1. 项目概述:AI CLI/Plugins/Extension的生态全景第一次接触AI命令行工具时,我正被重复性的代码生成任务折磨得焦头烂额。直到发现用自然语言描述需求就能自动生成完整脚本的CLI工具,调试时间直接缩短了70%。这种效率跃迁正是AI赋能开发工具的…

2026/7/22 23:45:17 阅读更多 →
Beyond Compare 4合法授权与高效使用指南

Beyond Compare 4合法授权与高效使用指南

1. Beyond Compare 4合法授权方案解析作为一款广受开发者欢迎的文件对比工具,Beyond Compare 4的专业版功能确实能大幅提升工作效率。但需要明确的是,任何商业软件的长期稳定使用都应通过官方渠道获取合法授权。以下是经过验证的正规授权途径和注意事项&…

2026/7/22 23:45:17 阅读更多 →
有了它,让deepseek更方便!

有了它,让deepseek更方便!

聊一聊最近国产AI人工智能大模型非常红火,都上央视了。看来,AI离我们是越来越近了,越来越深入我们的生活、工作和各个方面,让我们不得不学习研究它。但软件发布至今都Windows及苹果电脑版本。软件没有在电脑桌面上,总是…

2026/7/22 23:45:17 阅读更多 →
鸿蒙报错速查:arkts-strict-typing-strict-array 严格数组类型,元素类型不一致就炸,根因 + 真解法

鸿蒙报错速查:arkts-strict-typing-strict-array 严格数组类型,元素类型不一致就炸,根因 + 真解法

鸿蒙报错速查:arkts-strict-typing-strict-array 严格数组类型,元素类型不一致就炸,根因 真解法 报错原文 五个高频报错扎堆: ERROR: 10505001 ArkTS Compiler Error Error Message: Use explicit types instead of "any&qu…

2026/7/22 23:45:17 阅读更多 →
第04章 初始化程序(3):不会忘记时间的黑色方块 —— 探秘CMOS 0x80掩码与重启之谜

第04章 初始化程序(3):不会忘记时间的黑色方块 —— 探秘CMOS 0x80掩码与重启之谜

引言:机器中的“时间之眼” 在个人计算机的日常使用中,一个常被忽视的事实是:当我们完全切断电源,主机内部的一切半导体存储(比如我们熟知的内存条 DRAM)都会因为失去电力供应而被彻底清零。然而&#xff0…

2026/7/22 23:44:17 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统,尤其是像TI C6000系列这样的高性能DSP开发中,我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动,但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案? 在数字化协作环境中,消息通知系统的重要性不言而喻明。但现实情况是,企业级通知方案往往需要复杂的API对接(如企业微信、钉钉、飞书),个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点",乙方听到的是"少做几页"。甲方说"不要太复杂",乙方理解成"别放图表了"。结果交过去,甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里,是…

2026/7/22 0:00:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻