Добрый день!
Решил спросить в этой теме. Имеется контроллер stm32f103vg. В проекте используется RTC от внешнего кварца. Также подключен TFT через FSMC.
Проблема в следующем:
Часики работали и экран тоже. Через день (плата лежала выключенная, с батарейкой для часов только) часы перестали работать. При инициализации часов :
PHP код:
|
if ((RCC-›BDCR & RCC_BDCR_RTCEN) != RCC_BDCR_RTCEN) { // 2014-09-17 16:00.00 calendar.year = 14; calendar.month = 9; calendar.day = 17; calendar.hour = 16; calendar.minutes = 00; calendar.seconds = 0; rtc_value = calendar_coder(&calendar); RCC-›BDCR |= RCC_BDCR_BDRST; RCC-›BDCR &= ~RCC_BDCR_BDRST; RCC-›BDCR |= RCC_BDCR_RTCEN | RCC_BDCR_RTCSEL_LSE;
RTC-›CRL |= RTC_CRL_CNF; RTC-›PRLL = 0x7FFF; RTC-›CNTH = rtc_value ›› 16; RTC-›CNTL = rtc_value; RTC-›CRL &= ~RTC_CRL_CNF;
RCC-›BDCR |= RCC_BDCR_LSEON; while ((RCC-›BDCR & RCC_BDCR_LSEON) != RCC_BDCR_LSEON) {
}
RTC-›CRL &= (uint16_t)~RTC_CRL_RSF; while((RTC-›CRL & RTC_CRL_RSF) != RTC_CRL_RSF) {
} }
|
виснит на while((RTC-›CRL & RTC_CRL_RSF) != RTC_CRL_RSF), также во время отладки заметил что в регистры не записываются:
PHP код:
|
RTC-›PRLL = 0x7FFF; RTC-›CNTH = rtc_value ›› 16; RTC-›CNTL = rtc_value;
|
сам флаг RTC_CRL_CNF устанавливается.
Из- за чего такое могло произойти.
Со временем перестал инициализироваться и эран (если выключить часы работал экран нормально). Сам контроллер выполняет программу записанную в него. (понял так как используются звуковые сигналы).
P.S. Такое уже случалось раньше на такой же плате. Все решилось перепаивание проца. 2 случай из использованных 4 штук.
P.P.S Перепаять не проблема но хотелось бы выяснить в чем причина.