一些新的 STM32 芯片包含二进制 RTC 模式,例如,该模式用于示例中的 LoRaWAN 堆栈计时。 RTC 可以在混合模式下运行,其中二进制部分(32 位向下计数亚秒寄存器 SSR)和经典 BCD 日历模式都可以运行。
这工作得很好,直到我尝试使用 HAL_RTC_SetTime 设置 BCD 日历时间部分。
事实证明,一旦RTC->TR被写入,RTC->SSR就被重置为0xFFFFFFFF。 由于二进制模式支持的所有定时器都依赖于 SSR,因此它们会失败。
我尝试备份SSR并在RTC->TR写入后回写,但它似乎是只读的。
我错过了什么吗?如果引入了混合模式,我怀疑正常行为是无法在不影响二进制模式部分的情况下再设置 BCD 部分。
好吧,这似乎是设计使然。 RTC 初始化模式退出后,SSR 复位: