STM32定时器中断:TIM_GetFlagStatus与TIM_GetITStatus核心区别与实战指南
1. 项目概述从两个看似相同的函数说起在STM32的固件库编程中尤其是处理定时器TIM中断时TIM_GetFlagStatus和TIM_GetITStatus这两个函数是开发者几乎每天都会打交道的“老朋友”。很多新手甚至一些有经验的工程师在初次接触时都会感到困惑它们看起来都像是用来检查某个事件是否发生的为什么要有两个直接用一个不就好了吗这种困惑非常普遍因为从函数名和参数上看它们确实太像了。我刚开始用STM32做电机控制在编写PWM捕获代码时就曾在这两个函数上栽过跟头导致中断响应逻辑混乱电机时不时就“抽风”一下。简单来说这两个函数的核心区别在于它们服务的对象和流程不同。TIM_GetFlagStatus是面向“状态标志位”的它只负责告诉你某个事件比如更新事件、捕获事件在硬件上是否已经发生。而TIM_GetITStatus是面向“中断”的它不仅要检查事件是否发生还要检查对应的“中断使能位”是否被打开。你可以把前者想象成一个单纯的“事件传感器”它只报告“有东西触发了”而后者更像一个“带权限审核的警报器”它只在“事件发生”且“警报系统已开启”时才会告诉你“有情况需要处理”。理解这个区别是写出稳定、高效中断服务程序ISR的基石。这篇笔记我就结合自己踩过的坑和项目经验把这两个函数里里外外掰开揉碎了讲清楚让你以后用起来心里透亮。2. 核心概念拆解标志位、中断与使能要彻底搞懂这两个函数我们必须先回到STM32定时器的硬件逻辑层面。定时器内部有一系列的事件源比如计数器溢出更新事件、输入捕获成功、比较匹配等。每当这些事件发生时硬件会自动将对应的“状态标志位”置1。这个标志位是纯硬件行为就像房间里有个灯泡亮了它只表示“事件发生了”这个事实。与此同时STM32还有一个中断控制系统。为了让CPU知道这个事件并跳转到中断服务程序去处理我们需要两个条件同时满足第一事件发生标志位置1第二该事件对应的“中断使能位”被软件设置为1。这个使能位就像一个开关决定了这个事件是否被允许触发中断。这里就引出了最关键的逻辑关系一个事件可以只发生而不产生中断但一个中断的产生必然以事件发生为前提。换句话说标志位是中断的“必要条件”但不是“充分条件”。TIM_GetFlagStatus只查询“必要条件”标志位而TIM_GetITStatus查询的是“充分条件”标志位 AND 中断使能位。2.1 状态标志位详解状态标志位位于定时器的状态寄存器如TIMx_SR中。它们是只读的由硬件置1由软件清0反映了定时器内部最原始的状态。常见的标志位包括UIF (Update Interrupt Flag): 更新中断标志计数器溢出/下溢时置位。CC1IF (Capture/Compare 1 Interrupt Flag): 通道1的捕获/比较标志捕获到有效边沿或比较匹配时置位。TIF (Trigger Interrupt Flag): 触发中断标志由外部触发或从模式控制器触发时置位。在固件库中这些标志位被定义成宏例如TIM_FLAG_UpdateTIM_FLAG_CC1等。TIM_GetFlagStatus函数就是直接去读TIMx_SR寄存器并与传入的标志位宏进行“与”操作返回一个FlagStatus枚举值SET或RESET。注意硬件置位标志位的速度非常快几乎与事件同步。但标志位不会自动清除必须在软件中手动清除否则它会一直保持为1导致你误判事件连续发生。清除方法通常是对标志位写0有些寄存器需要特定的操作序列。2.2 中断使能位与中断标志位中断使能位位于定时器的中断使能寄存器TIMx_DIER中。它完全由软件控制用于“授权”哪些事件可以产生中断请求。例如CC1IE位控制通道1的捕获/比较事件是否允许中断。而“中断标志位”这个概念需要小心区分。在数据手册和编程中我们常说的“中断标志”有时指的是状态标志位TIMx_SR中的位因为它既是状态也是中断产生的源头之一。TIM_GetITStatus函数内部做的事情其实就是先检查TIMx_DIER中对应的中断使能位是否打开然后再去检查TIMx_SR中对应的状态标志位是否置位。只有两者都为真它才返回SET。所以TIM_GetITStatus(TIMx, TIM_IT_CC1)的检查逻辑是(TIMx-DIER TIM_IT_CC1) ! 0且(TIMx-SR TIM_FLAG_CC1) ! 0。它返回的是“中断是否处于有效待处理状态”这个综合结果。3. 函数源码深度剖析与使用场景对比光讲理论不够直观我们直接翻开标准外设库Standard Peripheral Library的源码看看它们到底是怎么实现的。这能让你理解得更加透彻。3.1 TIM_GetFlagStatus 源码与解析FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG) { FlagStatus bitstatus RESET; /* Check the parameters */ assert_param(IS_TIM_ALL_PERIPH(TIMx)); assert_param(IS_TIM_GET_FLAG(TIM_FLAG)); /* Check the status of the specified TIM flag */ if ((TIMx-SR TIM_FLAG) ! (uint16_t)RESET) { /* TIM_FLAG is set */ bitstatus SET; } else { /* TIM_FLAG is reset */ bitstatus RESET; } /* Return the TIM_FLAG status */ return bitstatus; }源码解读进行参数合法性检查。直接读取状态寄存器TIMx-SR并与传入的TIM_FLAG如TIM_FLAG_Update做按位与操作。如果结果非零说明该标志位被硬件置1了函数返回SET否则返回RESET。核心特点简单、直接、粗暴。它不关心中断是否使能只报告硬件事实。典型使用场景查询式非中断编程在主循环中轮询某个事件是否发生。例如用定时器做精确延时在主循环里不断检查UIF标志而根本不开定时器更新中断。// 启动定时器 TIM_Cmd(TIM2, ENABLE); // 等待更新事件发生查询方式 while(TIM_GetFlagStatus(TIM2, TIM_FLAG_Update) RESET); // 清除标志 TIM_ClearFlag(TIM2, TIM_FLAG_Update); // 做点别的事情...在中断服务程序ISR中进行辅助判断或故障诊断。例如在多个事件共享一个中断向量时如TIMx_IRQHandler处理多个通道可以用它快速检查是哪个具体的事件标志触发了。调试和监控在任何地方检查定时器的实时状态而不受中断配置影响。3.2 TIM_GetITStatus 源码与解析ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT) { ITStatus bitstatus RESET; uint16_t itstatus 0x0, itenable 0x0; /* Check the parameters */ assert_param(IS_TIM_ALL_PERIPH(TIMx)); assert_param(IS_TIM_GET_IT(TIM_IT)); /* Get the IT enable bit status */ itenable TIMx-DIER TIM_IT; /* Get the IT status flag */ itstatus TIMx-SR TIM_IT; if ((itstatus ! (uint16_t)RESET) (itenable ! (uint16_t)RESET)) { /* TIM_IT is set */ bitstatus SET; } else { /* TIM_IT is reset */ bitstatus RESET; } /* Return the TIM_IT status */ return bitstatus; }源码解读参数检查。分别读取中断使能寄存器TIMx-DIER和状态寄存器TIMx-SR并与传入的TIM_IT如TIM_IT_CC1进行按位与。注意TIM_IT_CC1和TIM_FLAG_CC1的值通常是相同的但它们在语义上代表不同的检查意图。进行关键的逻辑与判断只有当状态标志位和中断使能位都置1时函数才返回SET。核心特点带有“权限检查”。它回答的问题是“这个被允许中断的事件现在真的发生了吗”典型使用场景在中断服务程序ISR开头判断具体的中断源。这是它最主要、最正确的用途。由于一个中断向量可能对应多个中断事件比如TIM2的全局中断服务程序需要处理更新中断、通道1、2、3、4中断我们需要在ISR里逐一检查是哪个“使能了中断的事件”触发了本次中断调用。void TIM2_IRQHandler(void) { // 检查是否是使能了的“更新中断”触发的 if (TIM_GetITStatus(TIM2, TIM_IT_Update) ! RESET) { // ... 处理更新事件 ... TIM_ClearITPendingBit(TIM2, TIM_IT_Update); // 清除中断标志 } // 检查是否是使能了的“通道1比较中断”触发的 if (TIM_GetITStatus(TIM2, TIM_IT_CC1) ! RESET) { // ... 处理比较匹配事件 ... TIM_ClearITPendingBit(TIM2, TIM_IT_CC1); } // ... 检查其他中断源 ... }确保中断处理的严谨性。使用它可以避免一种罕见但可能发生的错误场景假设在进入ISR后、执行判断前软件恰好关闭了某个中断使能比如在更高优先级中断里修改了DIER那么TIM_GetITStatus会因为这个使能位被关闭而返回RESET从而不会执行对应的处理分支。这增加了代码的健壮性。3.3 对比表格与决策指南为了更清晰地对比我把核心差异总结成下表特性对比TIM_GetFlagStatusTIM_GetITStatus检查对象纯粹的状态标志位 (TIMx_SR)状态标志位 (TIMx_SR)与中断使能位 (TIMx_DIER)返回意义事件是否发生使能了中断的事件是否发生并请求中断使用场景1. 主循环查询2. ISR内辅助判断/诊断3. 状态监控与调试中断服务程序(ISR)内判断中断源配套清除函数TIM_ClearFlag(...)TIM_ClearITPendingBit(...)性能影响稍快只访问一个寄存器稍慢需访问两个寄存器并进行逻辑与安全/严谨性较低只反映硬件瞬时状态较高结合了软件配置意图如何选择一个简单的决策流程你在写中断服务程序ISR吗是- 优先使用TIM_GetITStatus。这是最规范、最安全的做法能准确反映“因中断而进入”的这个上下文。否- 进入下一步。你是在主循环、后台任务或者初始化函数中想单纯地检查某个事件是否发生而不关心中断是否配置吗是- 使用TIM_GetFlagStatus。例如初始化后检查定时器是否启动成功或者用查询方式做短延时。否- 你可能需要重新审视你的代码逻辑。实操心得在实际项目中我养成了一个习惯在ISR里统一使用TIM_GetITStatus和TIM_ClearITPendingBit这一对“IT”函数。这样代码意图清晰也与ST官方示例代码风格保持一致。而在非中断的任何地方如果需要检查状态就用TIM_GetFlagStatus。这种泾渭分明的用法能让团队协作时代码更易读也减少了潜在的错误。4. 常见问题排查与实战技巧理解了原理和区别但在实际调试中还是会遇到一些让人头疼的问题。下面是我总结的几个典型场景和解决方法。4.1 问题一中断服务程序进去了但TIM_GetITStatus检查不通过现象明明开启了中断事件也触发了程序确实跳转到了中断服务函数但用TIM_GetITStatus检查某个具体中断源时却返回RESET导致分支代码不执行。排查思路检查中断使能配置这是最常见的原因。确认你在初始化时不仅用TIM_ITConfig()使能了具体的中断如TIM_IT_Update还通过NVIC_Init()正确配置和使能了对应的NVIC中断通道。TIM_GetITStatus检查的是TIMx_DIER寄存器中的使能位如果这里没开即使标志位置1函数也返回RESET。检查中断标志清除时机如果中断函数开头有其他代码比如先判断了其他中断源先清除了总的状态标志可能会导致后续的TIM_GetITStatus检查失败。虽然TIM_ClearITPendingBit通常只清除SR寄存器中的标志位但确保检查逻辑在清除操作之前。使用调试器查看寄存器在中断入口处设置断点直接查看TIMx-DIER和TIMx-SR寄存器的值。计算(DIER IT)和(SR IT)看是否都为真。这是最直接的证据。临时替换为TIM_GetFlagStatus测试在ISR里暂时用TIM_GetFlagStatus替换TIM_GetITStatus进行判断。如果这样能进入分支那百分百是中断使能位DIER配置有问题如果还是不能那可能是事件根本没发生或者标志位被意外清除了。4.2 问题二标志位清除失败导致中断不断重复进入现象中断处理函数执行后立刻又进入中断陷入死循环。原因与解决没有清除中断标志这是最根本的原因。必须在处理完中断事件后清除对应的中断标志位告诉硬件“这个中断我已经处理完了”。否则硬件会认为中断一直未处理一旦中断使能就会持续请求。清除函数用错错误地使用了TIM_ClearFlag去清除一个本应由TIM_ClearITPendingBit清除的标志。虽然这两个函数在标准库中最终操作的都是TIMx-SR寄存器但使用配套的函数能让代码逻辑更清晰。在ISR中建议坚持使用TIM_ClearITPendingBit。清除位置不对标志位清除得太早或太晚。一般建议在处理完所有与该中断相关的关键操作后立即清除标志。避免在清除标志后又执行了可能再次触发该标志的代码。硬件特性对于一些特殊模式如单脉冲模式、编码器模式清除标志的操作可能有特定要求需要仔细查阅参考手册。4.3 问题三查询模式下TIM_GetFlagStatus返回异常现象在主循环中用TIM_GetFlagStatus轮询标志位但标志位似乎永远不会被置位或者置位后无法检测到。排查思路确认定时器已启动TIM_Cmd(TIMx, ENABLE)是否执行确认事件确实会发生你的定时器配置预分频、重装载值、触发源等是否能让你期望的事件发生例如如果你在查询更新标志但计数器从未溢出标志自然不会置位。检查标志位是否被意外清除是否有其他地方可能是别的函数甚至是中断清除了这个标志在查询语句前设置断点观察SR寄存器的值。注意“读-清除”的原子性在极少数高并发场景比如主循环和中断都可能操作同一个定时器读取和清除标志位之间可能被中断打断导致状态判断出错。这种情况需要更精细的同步设计但初学者一般遇不到。4.4 进阶技巧与最佳实践在复杂ISR中先读后判对于非常复杂、耗时长的中断服务程序可以在入口处一次性将相关的状态寄存器值读到一个局部变量中然后用这个变量来判断各个中断源。这可以防止因为中断处理期间状态发生变化而导致的判断不一致。void TIMx_IRQHandler(void) { uint16_t it_status; it_status TIMx-SR; // 一次性读取所有状态标志 if ((it_status TIM_FLAG_Update) (TIMx-DIER TIM_IT_Update)) { // 处理更新中断 TIMx-SR (uint16_t)~TIM_FLAG_Update; // 直接操作寄存器清除 } // ... 其他判断 }利用TIM_GetFlagStatus进行超时判断在驱动层代码中经常需要等待某个硬件操作完成。可以用一个定时器配合TIM_GetFlagStatus实现简单的硬件超时机制避免软件死等。// 等待某个硬件事件最多等待10ms TIM_SetCounter(TIM3, 0); TIM_Cmd(TIM3, ENABLE); while(!HardwareEventOccurred()) // 你的硬件检查函数 { if(TIM_GetFlagStatus(TIM3, TIM_FLAG_Update) SET) { // 超时处理 TIM_ClearFlag(TIM3, TIM_FLAG_Update); return ERROR_TIMEOUT; } } TIM_Cmd(TIM3, DISABLE); return SUCCESS;HAL库中的对应概念如果你在使用更现代的HAL库概念是相通的。TIM_GetFlagStatus对应类似__HAL_TIM_GET_FLAG的宏或直接检查htim-Instance-SR。TIM_GetITStatus则对应__HAL_TIM_GET_IT_SOURCE宏它同样会检查使能位。HAL库的中断回调函数如HAL_TIM_PeriodElapsedCallback内部已经做好了源判断你无需再手动检查这是库抽象带来的便利。5. 从标准库到HAL/LL库的演进与思考虽然标准外设库SPL目前已被ST官方逐步转向维护状态取而代之的是HAL库和LL库但TIM_GetFlagStatus和TIM_GetITStatus背后蕴含的“状态”与“中断使能状态”分离的思想是硬件中断系统的通用设计模式在任何底层驱动中都会遇到。在HAL库中这种检查通常被封装在中断处理函数内部。例如当你使能了更新中断并发生中断时HAL会先判断中断源然后调用你重写的弱定义回调函数HAL_TIM_PeriodElapsedCallback()。你不需要在回调函数里再去检查是哪个定时器、哪个中断因为HAL已经帮你做好了。这简化了应用层代码但也隐藏了底层细节。而LL库Low-Layer则更接近寄存器操作它提供了类似LL_TIM_IsActiveFlag_UPDATE()和LL_TIM_IsEnabledIT_UPDATE()这样的函数。你会发现它把“检查标志”和“检查中断使能”彻底分开了需要你自己组合使用这给了开发者最大的灵活性也对理解底层提出了更高要求。我的个人体会是无论库如何封装理解TIM_GetFlagStatus和TIM_GetITStatus的区别就是理解硬件中断机制的一把钥匙。在标准库上把这个概念打扎实了无论是去读更晦涩的参考手册还是去适应新的HAL/LL库都会觉得游刃有余。它教会你的是这样一种思维在嵌入式世界里硬件发生了什么Flag和你希望硬件通过什么方式通知你IT是两件需要分别配置、又相互关联的事情。理清这条线很多复杂的驱动问题就迎刃而解了。

相关新闻

精细化工企业老板对配方管理的困扰是什么?如何构建配方管理系统?

精细化工企业老板对配方管理的困扰是什么?如何构建配方管理系统?

你还在苦苦为一个配方在烦恼............ 对于花费大量时间作一个配方,到最后发现同事已经作过对于原料价格频繁波动,如何时时准确的计算配方成本?对于成千上万个excel表格存储的配方,如何快速得到想要的那一个?对于一个配方一个密码&…

2026/8/1 16:44:24 阅读更多 →
别再手动清洗开放式题项了!AI实时语义聚类+异常回答拦截系统(已通过ISO 20273问卷分析标准验证)

别再手动清洗开放式题项了!AI实时语义聚类+异常回答拦截系统(已通过ISO 20273问卷分析标准验证)

更多请点击: https://kaifayun.com 第一章:别再手动清洗开放式题项了!AI实时语义聚类异常回答拦截系统(已通过ISO 20273问卷分析标准验证) 传统问卷分析中,开放式题项常因语义多样性、拼写错误、无意义字符…

2026/8/1 16:44:24 阅读更多 →
ESP32与WS2812B打造智能RGB LED帽子:从硬件选型到无线控制全解析

ESP32与WS2812B打造智能RGB LED帽子:从硬件选型到无线控制全解析

1. 项目概述:从“会亮”到“会表达”的帽子 几年前,我第一次在某个创客展上看到有人戴着一顶能随着音乐节奏变换色彩的帽子,当时就觉得这玩意儿太酷了。它不仅仅是“会亮”,更像是一种动态的、可编程的自我表达。后来,…

2026/8/1 16:44:24 阅读更多 →

最新新闻

USB转Console线全解析:从芯片原理到多品牌设备连接排错

USB转Console线全解析:从芯片原理到多品牌设备连接排错

1. 项目概述:从一根线缆到网络工程师的“瑞士军刀”如果你是一名网络工程师、系统管理员,或者是一名喜欢折腾路由器、交换机、防火墙等网络设备的爱好者,那么你肯定对“Console线”不陌生。这根看似普通的线缆,是进入绝大多数网络…

2026/8/1 17:24:50 阅读更多 →
关键拍卖反转策略:基于市场微观结构的高概率交易信号识别

关键拍卖反转策略:基于市场微观结构的高概率交易信号识别

在金融市场交易中,识别关键的反转信号是每个交易者追求的核心技能。本文将围绕 UNIT 12 中介绍的 Strategy 7——关键拍卖反转策略展开,详细拆解其理论基础、识别方法、实战应用及风险管理。无论你是刚接触拍卖理论的新手,还是有一定经验但希…

2026/8/1 17:24:50 阅读更多 →
电子墨水屏驱动全攻略:从树莓派到ESP32的低功耗显示实践

电子墨水屏驱动全攻略:从树莓派到ESP32的低功耗显示实践

1. 项目概述:一块能“留住画面”的屏幕如果你玩过树莓派或者各种单片机,肯定对LCD、OLED这些需要持续供电才能显示内容的屏幕不陌生。一旦断电,屏幕就黑了,信息也随之消失。今天要聊的这块3.97英寸电子墨水屏(e-Paper&…

2026/8/1 17:24:50 阅读更多 →
如何高效管理Windows服务器SSL证书:win-acme终极自动化解决方案

如何高效管理Windows服务器SSL证书:win-acme终极自动化解决方案

如何高效管理Windows服务器SSL证书:win-acme终极自动化解决方案 【免费下载链接】win-acme Automate SSL/TLS certificates on Windows with ease 项目地址: https://gitcode.com/gh_mirrors/wi/win-acme 在当今网络安全标准日益严格的时代,SSL/T…

2026/8/1 17:24:50 阅读更多 →
告别命令行!N_m3u8DL-CLI-SimpleG图形化M3U8下载器终极指南

告别命令行!N_m3u8DL-CLI-SimpleG图形化M3U8下载器终极指南

告别命令行!N_m3u8DL-CLI-SimpleG图形化M3U8下载器终极指南 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 还在为复杂的M3U8视频下载命令行而烦恼吗?想要…

2026/8/1 17:24:50 阅读更多 →
电机参数测量实战:相电阻、电感与极对数的精确测量方法

电机参数测量实战:相电阻、电感与极对数的精确测量方法

1. 项目缘起:为什么我们需要亲手测量电机参数?在电机驱动和控制领域,无论是设计一个全新的驱动器,还是对一台来历不明的旧电机进行“驯服”,我们都会遇到一个最基础、也最核心的问题:这台电机的关键参数到底…

2026/8/1 17:23:50 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/8/1 13:02:46 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/8/1 10:33:33 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →