--- tags: [entity] type: entity topic: stm32-lower note: 19 created: 2026-07-16 updated: 2026-07-16 --- # Note 19: BKP/RTC (lower/stm32/21~26) ## Projects | # | Directory | Topic | Library | |---|---|---|---| | 21 | `21_bkp_test_register` | BKP backup registers | Register | | 22 | `22_bkp_test_hal` | BKP backup registers | HAL | | 23 | `23_rtc_alarm_standby_register` | RTC alarm + standby wake | Register | | 24 | `24_rtc_alarm_standby_hal` | RTC alarm + standby wake | HAL | | 25 | `25_rtc_calendar_register` | RTC calendar | Register | | 26 | `26_rtc_calendar_hal` | RTC calendar | HAL | ## Code Accuracy Audit ### Path Audit | Claimed Path | Actual Path | Status | |---|---|---| | `stm32/21_bkp_test_register/Hardware/BKP/bkp.c` | `21_bkp_test_register/Hardware/BKP/bkp.c` | ✅ Correct | | `stm32/25_rtc_calendar_register/Hardware/RTC/rtc.c` | `25_rtc_calendar_register/Hardware/RTC/rtc.c` | ✅ Correct | | `stm32/25_rtc_calendar_register/Hardware/RTC/rtc.h` | `25_rtc_calendar_register/Hardware/RTC/rtc.h` | ✅ Correct | | `stm32/25_rtc_calendar_register/User/main.c` | `25_rtc_calendar_register/User/main.c` | ✅ Correct | | `stm32/23_rtc_alarm_standby_register/User/main.c` | `23_rtc_alarm_standby_register/User/main.c` | ✅ Correct | ### BKP Code (bkp.c) | Claimed by Note | Actual Code | Match? | |---|---|---| | `RCC->APB1ENR |= RCC_APB1ENR_PWREN` | Present | ✅ Match | | `PWR->CR |= PWR_CR_DBP` | Present | ✅ Match | | `RCC->APB1ENR |= RCC_APB1ENR_BKPEN` | Present | ✅ Match | | `bkp.h` has `#include "stm32f10x.h"`, `BKP_Init(void)` | Present | ✅ Match | ### RTC Init (25_rtc_calendar_register/Hardware/RTC/rtc.c) | Claimed by Note | Actual Code (lines) | Match? | |---|---|---| | `RCC->APB1ENR |= RCC_APB1ENR_PWREN` | Line 15 | ✅ Match | | `PWR->CR |= PWR_CR_DBP` | Line 18 | ✅ Match | | `RCC->BDCR |= RCC_BDCR_RTCEN` | Line 28 | ✅ Match | | `RCC->BDCR |= RCC_BDCR_LSEON` | Line 31 | ✅ Match | | `while (!(RCC->BDCR & RCC_BDCR_LSERDY))` | Lines 32-34 | ✅ Match | | `RCC->BDCR &= ~RCC_BDCR_RTCSEL; RCC->BDCR |= RCC_BDCR_RTCSEL_0` | Lines 37-38 | ✅ Match | | Wait `RTC_CRL_RTOFF` | Lines 42-44 | ✅ Match | | `RTC->CRL |= RTC_CRL_CNF` | Line 47 | ✅ Match | | `RTC->PRLH = 0; RTC->PRLL = 0x7fff` | Lines 50-51 | ✅ Match | | `RTC->CRL &= ~RTC_CRL_CNF` | Line 54 | ✅ Match | ### RTC_SetAlarm | Claimed by Note | Actual Code | Match? | |---|---|---| | `RTC->CRL &= ~RTC_CRL_ALRF` | Line 66 | ✅ Match | | Wait RTOFF | Line 69 | ✅ Match | | `RTC->CRL |= RTC_CRL_CNF` | Line 74 | ✅ Match | | `RTC->CNTH = 0; RTC->CNTL = 0` | Lines 78-79 | ✅ Match | | `s -= 1; RTC->ALRH = (s >> 16) & 0xffff; RTC->ALRL = (s >> 0) & 0xffff` | Lines 82-84 | ✅ Match | | `RTC->CRL &= ~RTC_CRL_CNF` | Line 87 | ✅ Match | ### RTC_SetTimestamp | Claimed by Note | Actual Code | Match? | |---|---|---| | Wait RTOFF, CNF=1, set CNTH/CNTL, CNF=0, wait RTOFF | Lines 99-116 | ✅ Match | ### RTC_GetDateTime | Claimed by Note | Actual Code | Match? | |---|---|---| | `while (!(RTC->CRL & RTC_CRL_RSF))` | Line 123 | ✅ Match | | `uint32_t second = RTC->CNTH << 16 | RTC->CNTL` | Line 127 | ✅ Match | | `struct tm* ptm = localtime(&second)` | Line 130 | ✅ Match | | `dateTime->year = ptm->tm_year + 1900` etc. | Lines 133-138 | ✅ Match | ### DateTime struct (rtc.h) | Claimed by Note | Actual Code | Match? | |---|---|---| | `typedef struct { uint16_t year; uint8_t month; ... } DateTime;` | Present | ✅ Match | | Function prototypes: `RTC_Init`, `RTC_SetAlarm`, `RTC_SetTimestamp`, `RTC_GetDateTime` | Present | ✅ Match | ### RTC Alarm + Standby (23_rtc_alarm_standby_register) Note claims loop: `RTC_SetAlarm(5); enter_standby_mode();` with PA0 wakeup → matches actual code. ### HAL RTC Calendar Note's HAL code (`RTC_TimeTypeDef`, `RTC_DateTypeDef`, `HAL_RTC_SetTime`, `HAL_RTC_GetTime`) matches project 26. ### BKP Store Date (HAL) Note's `read_stored_date` / `write_stored_date` functions using `HAL_RTCEx_BKUPRead/Write` — these exist in project 22's code. ## Summary **Overall Accuracy**: Excellent (99%+) **Issues Found**: None significant. RTC register operations, HAL API usage, BKP operations all match actual source files exactly. This is the most technically accurate section.