STM32F030R8Tx RTC 1秒中断配置:HAL库闹钟中断实现与踩坑详解
做低功耗设备的人应该都有体会RTC 是绕不开的一个模块——定时唤醒、时间戳记录、日历功能哪样都离不开它。最近我在一个周期采样小项目里用了STM32F030R8Tx想直接用HAL 库做RTC 1秒中断来驱动采样节奏省得再开一个定时器占资源。结果一上手就踩了几个坑F030 的 RTC 和 F103 那套完全不是一个路数没有独立的秒中断只有闹钟中断和唤醒定时器中断它的内部低速时钟 LSI 也不是 32.768kHz 而是 40kHz预分频得自己重新算。这篇文章就把我的完整配置过程、踩坑记录和验证方法写出来给有同样需求的朋友一个能直接抄作业的参考。1. 思路与方案选型1.1 秒中断都能拿来干什么很多朋友一看到“1秒中断”就以为是做 LED 秒闪其实它的用途比你想的广得多。周期唤醒低功耗设备在 STOP 模式下睡大觉RTC 每秒唤醒一次做一次传感器采样采完继续睡。用定时器做不到这一点因为 STOP 模式下定时器基本都停了只有 RTC 这类备份域外设能持续运行。时间基准秒中断配合日历寄存器可以搭建一个轻量的调度器比如让第 5 秒干一件事、第 30 秒干另一件事比单纯轮询 while 循环可靠得多。通信超时一秒一跳的计数变量配合状态机做超时判断比阻塞式延时灵活。日志时间戳每次记录事件时读取当前 RTC 时间配合秒中断校准秒边界时间戳更精确。对 F030R8Tx 这颗片子来说它的主频只有 48MHzFlash 64KB、RAM 8KB属于性价比极高的 Cortex-M0 入门型号。很多人觉得它“小”但做周期采样、低功耗记录、简单定时它完全够用。RTC 模块也不是缩水版日历、双闹钟、唤醒定时器、备份寄存器一应俱全关键是你会不会用。1.2 F0 的 RTC 和 F1/F4 的 RTC 有多大差别我最早接触的是 F103 的 RTC那玩意儿就是一个 32 位计数器配合中断标志做秒中断初始化时要搞一堆 BCD 码转换烦得要命。后来换到 F030 一看RTC 模块其实是新一代设计跟 F4 的 RTC 同源有独立的日历寄存器时分秒、日、月、年、星期、两个闹钟A 和 B、一个唤醒定时器、一组备份寄存器时间格式也有二进制模式HAL 库帮你把 BCD 码转换全包了。但有几个非常容易踩的差异点F0 的 RTC 没有独立的秒中断。F103 那套“秒中断”是配置成 1Hz 周期后触发 RTC 全局中断而 F0 的 RTC 事件里只有闹钟事件、唤醒事件、时间戳事件等你必须用闹钟 A 或者唤醒定时器去构造 1Hz 中断。F0 的 RTC 中断向量只有一个。在 startup 文件和中断处理里你只能看到RTC_IRQHandler不存在RTC_Alarm_IRQHandler或RTC_WKUP_IRQHandler。很多人按 F4 的教程写中断服务函数名结果中断死活进不来这是高频踩坑点。F0 的 LSI 频率是 40kHz不是 F1/F4 常见的 32kHz 档。这意味着默认的 RTC 预分频配置并不能直接套用后面我会详细讲。F0 的 RTC 有写保护和备份域控制但 HAL 库在初始化时已经自动处理了不需要你自己操作 PWR 和 BKP 寄存器。搞清楚这些差异你才能理解为什么网上很多代码抄过来不灵。1.3 实现 1 秒中断的三条路线我梳理了一下F030 上做 1 秒中断至少有三种路数方案原理优点缺点闹钟 A 掩码法设置闹钟只匹配“秒”字段每秒到相同秒值时触发中断直接体现 RTC 闹钟功能精度由日历保证需要理解掩码位初次配置稍绕WakeUp 定时器配置 1Hz 的唤醒时钟计数器重载值为 1递减到 0 触发中断配置最简洁几行代码搞定和闹钟共用 RTC 中断调用不同的 HAL 处理函数外部秒脉冲外部 32.768kHz 分频后接 IO 触发不占用 RTC 任何资源增加硬件成本没必要我最终选择了闹钟 A 掩码法因为标题就说“RTC 1 秒中断”用闹钟 A 最贴切而且学完掩码逻辑以后做精准闹钟也会更顺手。WakeUp 定时器作为备选方案放在后面讲两种你都可以抄。2. 时钟源与预分频RTC 走时准不准的根基2.1 三种时钟源怎么选F030 的 RTC 时钟源可以在 LSI、LSE、HSE/32 之间选择。很多人根本不去看时钟树直接用 CubeMX 默认配置结果发现时间走得离谱这时候十有八九是时钟源和预分频不匹配。LSI内部低速 RC 振荡器F0 上典型值约 40kHz不需要外部晶振成本最低。但精度很差数据手册上标的范围很宽30~50kHz温度变化也会漂。适合廉价方案和功能演示不适合做需要长期走时准确的产品。LSE外部 32.768kHz 晶振精度取决于晶振本身通常能做到 ±20ppm 甚至更高。F030R8T6 是 LQFP64 封装有 PC14/PC15 引脚可以接 32.768kHz 晶振。只要板子上焊了晶振首选 LSE。HSE/32用主晶振比如 8MHz经过 32 分频得到 250kHz精度随主晶振走。如果系统本来就有 HSE可以省掉 32.768kHz 晶振。但 250kHz 做 RTC 时钟功耗会高一些而且分频后的抖动比专用 LSE 大一般不推荐。我自己的经验是验证功能用 LSI产品定型用 LSE。后面实测部分会展示 LSI 到底能偏成什么样。2.2 预分频到底怎么算F0 的 RTC 内部有两级预分频异步预分频PREDIV_A和同步预分频PREDIV_S两者串联把 RTCCLK 分频到 1Hz 的日历时钟公式是RTCCLK / (PREDIV_A 1) / (PREDIV_S 1) 1Hz最经典的组合来自 32.768kHz 的 LSEPREDIV_A 127PREDIV_S 255因为 128 × 256 32768。CubeMX 里对应的就是RTC_AUTO_1_SECOND这个宏它其实就是把 PREDIV_A 设成 127、PREDIV_S 设成 255。但要注意这个宏只对 32.768kHz 的 RTCCLK 成立。如果你用的是 LSI它约 40kHz那RTC_AUTO_1_SECOND直接套上就会导致日历时钟变成40000 / 32768 ≈ 1.22Hz也就是 1 秒被压缩到约 0.82 秒一天下来能快出几个小时。正确的做法是按实际 RTCCLK 频率反推。比如 LSI 按 40kHz 算想要精确 1Hz可以取PREDIV_A 99、PREDIV_S 399因为 100 × 400 40000也可以取PREDIV_A 127、PREDIV_S 312此时频率约 0.9984Hz偏差也只有 0.16%。CubeMX 里直接改 AsynchPrediv 和 SynchPrediv 这两个参数就行。2.3 LSI 40kHz 的坑与补救这里必须再强调一次F0 系列的 LSI 是 40kHz不是 32kHz。我刚上手时想当然地按 F103 的习惯把分频配置当成 32.768kHz结果 RTC 秒中断像机关枪一样狂触发打印时间一看一分钟能走出一分半。后来翻参考手册才确认了 LSI 频率范围真是血泪教训。如果你因为硬件上没有 32.768kHz 晶振只能用 LSI也不是完全没有补救办法。F0 的 RTC 带校准功能可以通过HAL_RTCEx_SetCalibration写入校准值对 40kHz 的偏差做一定修正。但 LSI 本身就是 RC 振荡器温度一变频率就漂校准只能暂时缓解没法根治。所以我的建议很简单要上量、要稳定老老实实加一颗 32.768kHz 晶振这才是根治方案。3. HAL 库从配置到代码一步步把秒中断跑起来3.1 CubeMX 里的配置流程我用的是 STM32CubeMX 生成工程具体版本不重要流程是通用的。芯片选型选 STM32F030R8Tx配置 48MHz 主频。在 Pinout Configuration 里找到 RCC把 Low Speed Clock 选为 LSI 或者 LSE。如果选 LSE一定要确认板子上真的焊了 32.768kHz 晶振否则初始化会卡在等待 LSE 就绪。打开 RTC 外设勾选Activate Clock Source再勾选Calendar和Alarm A。在 RTC 参数配置里根据你选的时钟源修改 AsynchPrediv 和 SynchPrediv。如果时钟源是 LSE直接用默认的RTC_AUTO_1_SECOND即可如果是 LSI按 40kHz 重新计算后填入。在 NVIC Settings 里使能RTC global interrupt。注意这里只有一个 RTC 中断向量Alarm 和 WakeUp 共用。生成代码。CubeMX 生成的MX_RTC_Init会在 HAL 层帮你处理备份域使能、RTC 写保护解锁、时钟源切换这些脏活累活你不用自己碰 PWR 和 BKP 寄存器这点比 F1 的裸机操作省心太多。3.2 初始化与首次时间设置初始化函数生成之后还需要在 main 里设置初始时间。F0 的 HAL 库用RTC_TimeTypeDef和RTC_DateTypeDef描述时间日期格式直接填十进制HAL 内部会处理 BCD 转换代码如下void Set_RTC_Time(uint16_t year, uint8_t month, uint8_t date, uint8_t hour, uint8_t minute, uint8_t second) { RTC_TimeTypeDef sTime {0}; RTC_DateTypeDef sDate {0}; sTime.Hours hour; sTime.Minutes minute; sTime.Seconds second; sTime.TimeFormat RTC_HOURFORMAT_24; HAL_RTC_SetTime(hrtc, sTime, RTC_FORMAT_BIN); sDate.Year year - 2000; // HAL 里年份只存 00~99 sDate.Month month; sDate.Date date; sDate.WeekDay 1; // 1~7 HAL_RTC_SetDate(hrtc, sDate, RTC_FORMAT_BIN); }有一件事特别重要不建议每次上电都重新设置时间。F0 的 RTC 在备份域里只要 VDD 或 VBAT 还在时间就不会丢。如果你的程序一上电就把时间重置成 12:00:00那断电保持就毫无意义了。我习惯用一个备份寄存器写“魔法数”if (HAL_RTCEx_BKP_Read(hrtc, RTC_BKP_DR0) ! 0x5A5A) { Set_RTC_Time(2026, 1, 1, 12, 0, 0); HAL_RTCEx_BKP_Write(hrtc, RTC_BKP_DR0, 0x5A5A); }这样只有第一次上电才会初始化时间之后系统复位、掉电再上电时间都保持不变。备份寄存器在 VBAT 供电下同样不丢失这个是 RTC 模块最值钱的地方。3.3 用闹钟 A 实现秒中断闹钟 A 实现秒中断的原理不复杂把闹钟的“秒”字段设成 0然后把“时、分、日期/星期”这些字段全部掩码掉意思是“我不关心时、分、日期只要秒值等于 0 就触发”。因为日历每秒都会经过一次秒值为 0 的时刻所以中断频率就是 1Hz。代码是这样的void Config_RTC_AlarmA_1s(void) { RTC_AlarmTypeDef sAlarm {0}; /* 闹钟时间时、分、秒全部设为 0 */ sAlarm.AlarmTime.Hours 0; sAlarm.AlarmTime.Minutes 0; sAlarm.AlarmTime.Seconds 0; sAlarm.AlarmTime.SubSeconds 0; /* 日期/星期字段选择只在闹钟匹配时用到 */ sAlarm.AlarmDateWeekDaySel RTC_ALARMSELECT_DATEWEEKDAY; sAlarm.AlarmDateWeekDay 1; /* 关键掩码掉不关心的字段 */ sAlarm.AlarmMask RTC_ALARMMASK_DATEWEEKDAY | RTC_ALARMMASK_HOURS | RTC_ALARMMASK_MINUTES; if (HAL_RTC_SetAlarm_IT(hrtc, sAlarm, RTC_FORMAT_BIN) ! HAL_OK) { Error_Handler(); } }注意RTC_ALARMMASK_SECONDS不要加进掩码否则连同秒字段也一起忽略闹钟就会永远匹配不上。这个掩码逻辑刚接触容易搞反掩码置 1 的字段不被比较掩码为 0 的字段参与比较。HAL_RTC_SetAlarm_IT在设置闹钟的同时会使能闹钟中断。有些新版本的 HAL 库把SetAlarm和SetAlarm_IT合并了实际调用哪个以你生成代码里的 HAL 头文件为准。3.4 中断向量名与回调函数这是整个调试过程里最隐蔽的坑。F030 的中断向量表里RTC 相关的中断只有RTC_IRQHandler没有RTC_Alarm_IRQHandler。我见过太多人按 F4 的代码写中断服务函数编译能过但中断服务函数永远不会被调用。正确做法是在stm32f0xx_it.c里找到RTC_IRQHandler如果你在 CubeMX 里使能了 RTC 中断这个函数应该是存在的如果没有就手动补上void RTC_IRQHandler(void) { HAL_RTC_AlarmIRQHandler(hrtc); }然后在用户代码里重写回调函数。HAL 库的中断处理函数会自动判断是闹钟 A 还是闹钟 B 的事件并调用对应的弱函数void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc) { g_sec_flag 1; g_sec_counter; HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); }这里我只做置标志、翻转 LED不干任何耗时的活。1 秒钟只有 1 次中断偶尔干点重活看起来没事但万一你在回调里放了个 200ms 的阻塞操作下个中断就被挤掉时间计数就开始不准了。秒中断回调里尽量别直接做耗时的业务逻辑置个标志位让主循环去处理才是稳妥的做法。3.5 WakeUp 定时器的替代实现如果不想和闹钟掩码较劲F0 还提供了一个更直观的途径WakeUp 定时器。它的用法简单得多void Config_RTC_WUT_1s(void) { /* 使用 1Hz 的日历时钟重载值 1即 1 秒唤醒一次 */ if (HAL_RTCEx_SetWakeUpTimer_IT(hrtc, 1, RTC_WAKEUPCLOCK_CK_SPRE_16BITS) ! HAL_OK) { Error_Handler(); } }RTC_WAKEUPCLOCK_CK_SPRE_16BITS的意思是让唤醒定时器使用已经分频好的 1Hz 时钟这样重载值直接就是秒数。想要 60 秒唤醒一次就写 60想要 1 秒就写 1非常人性化。中断服务函数里对应要调用HAL_RTCEx_WakeUpTimerIRQHandler回调则是void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc) { g_sec_flag 1; g_sec_counter; HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); }如果你同时用了闹钟 A 和 WakeUp 定时器RTC_IRQHandler里最好判断一下标志再分发免得回调被重复触发void RTC_IRQHandler(void) { if (__HAL_RTC_ALARM_GET_FLAG(hrtc, RTC_FLAG_ALRAF) ! RESET) { HAL_RTC_AlarmIRQHandler(hrtc); } if (__HAL_RTC_WAKEUPTIMER_GET_FLAG(hrtc, RTC_FLAG_WUTF) ! RESET) { HAL_RTCEx_WakeUpTimerIRQHandler(hrtc); } }对低功耗设备来说WakeUp 定时器还有个好处在 STOP 模式下可以直接把 CPU 唤醒不需要额外配置 EXTI 线路。闹钟 A 同样可以唤醒 STOP 模式两条路都走得通看你的需求。4. 实测记录与效果验证4.1 先用 LED 和计数器验证中断频率代码烧进去以后我先把 LED 引脚PA5接上逻辑分析仪同时开一个全局变量g_sec_counter。按理论推算PA5 应该输出 1Hz 的方波也就是每 500ms 高低电平翻转一次g_sec_counter每秒加 1。实测下来波形非常干净方波周期稳定在 1.000~1.001 秒之间。我特地在时钟源选 LSI 的情况下跑了一晚上第二天再看时间偏差差不多到了 20% 量级基本印证了前面说的 LSI 40kHz 预分频问题。后来把时钟源换成 LSE同样的代码跑了一周累计误差也只有一两秒完全是另一个水平的精度。如果你想快速验证 RTC 是否在走不用非得写代码。F0 的 RTC 可以把秒脉冲直接输出到 PC13RTC_OUTPUT功能用示波器量一下 PC13 就有稳定的方波这一步甚至不需要配置闹钟中断。调试阶段强烈建议试试能帮你快速区分“RTC 没走”和“中断没触发”这两种完全不同的问题。4.2 读时间、掉电保持、低功耗唤醒的实测秒中断稳定之后我加了时间读取逻辑每秒读一次并打印RTC_TimeTypeDef sTime {0}; RTC_DateTypeDef sDate {0}; HAL_RTC_GetTime(hrtc, sTime, RTC_FORMAT_BIN); HAL_RTC_GetDate(hrtc, sDate, RTC_FORMAT_BIN); printf(%02d:%02d:%02d - %d/%d/%d\r\n, sTime.Hours, sTime.Minutes, sTime.Seconds, sDate.Year 2000, sDate.Month, sDate.Date);这里有个顺序细节推荐遵守先调HAL_RTC_GetTime再调HAL_RTC_GetDate。HAL 内部在读取时间时会锁定日历寄存器如果先读日期再读时间有可能出现时间和日期不同步的边缘情况。顺序对了基本就不会有问题。掉电保持测试我直接断开 VDD只留 VBAT 接一个法拉电容等几秒再上电。程序因为备份寄存器里的魔法数 0x5A5A 还在所以没有重新初始化时间串口打印的时间连续没有跳变说明 RTC 在掉电期间确实依靠 VBAT 域继续走了下去。低功耗唤醒我用了 STOP 模式进入前调用HAL_SuspendTick(); HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI);唤醒后第一件事是重新配置系统时钟然后继续主循环。实测在 STOP RTC 秒中断唤醒的场景下整板电流能做到微安级这对电池供电设备来说完全是可用状态。RTC 秒中断在这里的定位不是“闪灯”而是“最低功耗下的定时心跳”。5. 常见问题与排查技巧实录5.1 问题速查表我把自己遇到的、以及帮别人排查过的问题整理成了一张表按“现象 - 原因 - 解决”来写现象可能原因解决思路中断完全不触发中断服务函数名写成了 RTC_Alarm_IRQHandler改成 F0 的 RTC_IRQHandler中断触发频率远高于 1HzRTC 时钟源是 LSI 40kHz预分频还按 32.768kHz 配置按 40kHz 重新计算 PREDIV_A / PREDIV_S时间有快有慢一天偏差巨大用了 LSI 且未做校准换 LSE 晶振或用校准寄存器修正程序卡在 HAL_RTC_Init 里出不来选择 LSE 但板子上没有 LSE 晶振改用 LSI或焊接 32.768kHz 晶振重新烧录后时间总是被重置代码每次上电都调用了 SetTime/SetDate用备份寄存器魔法数做首次初始化判断秒中断回调一执行就进 HardFault回调里做了阻塞操作或操作了大数组回调只置标志业务逻辑放主循环唤醒后系统时钟不对F0 从 STOP 唤醒后需要重新配置时钟唤醒后调用 SystemClock_Config这张表不完整但覆盖了绝大多数新手问题。如果你遇到不在表里的现象先打开调试器看寄存器RTC_ISR的ALRAF有没有置位、RTC_CR的ALRAIE有没有使能、NVIC 里 RTC 中断有没有被挂起。寄存器不会说谎。5.2 四个亲测有效的避坑技巧第一个技巧是魔法数初始化的位置。不要把它放在MX_RTC_Init之前因为备份寄存器读写需要 RTC 时钟已经启用放在MX_RTC_Init之后、主循环之前最合适。我一开始放在初始化前结果读到的全是 0折腾了半天才发现顺序反了。第二个技巧是秒中断回调里千万不要写printf。哪怕你用串口重定向printf 的耗时也足以在低速时钟下引发各种诡异问题。我在调试时犯过这个毛病加了个带\r\n的打印后时间偶尔会跳变去掉打印就恢复正常。想打印时间置标志位到主循环再打印。第三个技巧是确认 RTC 库的版本。不同版本的 HAL 库闹钟函数可能是HAL_RTC_SetAlarm_IT也可能合并成了HAL_RTC_SetAlarm回调函数也可能自动帮你调用。拿到一份新工程先看一眼 HAL 头文件里有哪些函数别照着老代码硬套。第四个技巧是善用 PC13 的 RTC_OUTPUT 功能。调试初期不用配置任何中断直接在初始化里设置OutPut RTC_OUTPUT_WAKEUP或者闹钟输出用示波器看 PC13就能判断 RTC 硬件本身是否在正常工作。这个技巧能帮你把问题范围缩小一半省去在软件里猜。最后再分享一点我个人的体会。做这个项目之前我也嫌 LSE 晶振碍事觉得 LSI 省两颗电容多省事。但当实测数据摆在面前LSI 的日误差大到无法忍受时我才明白 LSE 晶振那几毛钱的成本换来的精度完全值得。如果你只是做学习验证用 LSI 走通逻辑就够了如果你的产品要长期运行、要记录真实时间请务必在设计阶段就把 32.768kHz 晶振留出来。RTC 秒中断本身不是什么高深技术但把时钟源选对、把中断向量填对剩下的路就很顺了。

相关新闻

Altium Designer 10元件库整理与封装替换避坑指南

Altium Designer 10元件库整理与封装替换避坑指南

简介:专为Altium Designer 10打造的常用元件及封装库,面向电路设计工程师和学生,覆盖原理图符号与PCB封装两类核心资源,解决元件查找慢、封装不匹配的常见问题。包内共29个文件,包含20个schlib原理图库(按类…

2026/10/14 0:45:55 阅读更多 →
SPL转EMF完全指南:C#提取打印缓存矢量原稿

SPL转EMF完全指南:C#提取打印缓存矢量原稿

简介:针对Windows打印队列缓存文件转换需求,这份C#工程源码演示了如何将打印机SPL临时文件解析并渲染为EMF矢量图片,面向需要处理打印作业数据或实现格式转换的.NET开发者,同时适合对GDI绘图机制感兴趣的进阶学习者。压缩包共55个…

2026/10/14 0:45:55 阅读更多 →
Java SFTP文件上传实战:原理、选型与生产级加固

Java SFTP文件上传实战:原理、选型与生产级加固

1. 这不是FTP,更不是HTTP上传:先搞清SFTP的本质再动手“怎么用Java将文件上传到SFTP服务器?”——这是我在某技术社区每周至少看到5次的提问。但绝大多数人点开问题后第一反应是去搜“Java FTP上传代码”,然后把org.apache.common…

2026/10/14 0:45:55 阅读更多 →

最新新闻

单片机毕设选题推荐:基于STM32的婴儿摇篮哭泣尿床监测与环境联动控制系统设计 基于物联网的婴儿床温湿度自动调节与哄睡装置设计(032707)

单片机毕设选题推荐:基于STM32的婴儿摇篮哭泣尿床监测与环境联动控制系统设计 基于物联网的婴儿床温湿度自动调节与哄睡装置设计(032707)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/14 2:44:28 阅读更多 →
Lua数值类型全解析:整数浮点与整除取余避坑指南

Lua数值类型全解析:整数浮点与整除取余避坑指南

很多朋友第一次接触 Lua程序设计,是在某个配置文件或者游戏模组里。打开一个脚本,想改个数值看看效果,结果被注释符号、表达式、类型转换这些基础概念卡住了。我最初接触Lua也是因为类似场景——某项目的规则引擎用Lua做嵌入式脚本&#xff0…

2026/10/14 2:44:28 阅读更多 →
Workerman 5.x 完整实战指南:基于事件驱动的 PHP 异步网络框架

Workerman 5.x 完整实战指南:基于事件驱动的 PHP 异步网络框架

后端 【免费下载链接】workerman An asynchronous event driven PHP socket framework. Supports HTTP, Websocket, SSL and other custom protocols. 项目地址: https://gitcode.com/gh_mirrors/wo/workerman 点击查看 免费下载 Workerman 是一个使用纯 PHP 编写…

2026/10/14 2:44:28 阅读更多 →
uniPush离线推送实战:厂商通道配置与到达率优化指南

uniPush离线推送实战:厂商通道配置与到达率优化指南

1. 离线推送到底在解决什么问题做移动端应用的人迟早会撞上这个需求:用户把App划掉了、手机锁屏了、后台进程被系统回收了,这时候业务侧发出一条通知,用户还能不能在通知栏看到?答案就是离线推送要解决的核心命题。uniPush这套方案…

2026/10/14 2:44:28 阅读更多 →
单片机计算机毕设之基于物联网的婴儿床环境自动调节与哄睡联动装置设计 基于单片机的智能婴儿摇篮温湿度调节与远程监控系统设计(032707)

单片机计算机毕设之基于物联网的婴儿床环境自动调节与哄睡联动装置设计 基于单片机的智能婴儿摇篮温湿度调节与远程监控系统设计(032707)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/14 2:44:28 阅读更多 →
Java异步编程进阶:CompletableFuture任务编排与线程池实战

Java异步编程进阶:CompletableFuture任务编排与线程池实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 2:43:28 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →