Skocz do zawartości

[C] Nucleo F303K8 i niedziałający wakeup z RTC.


szymam

Pomocna odpowiedź

Hej Panowie!

Posiadam od niedawna płytkę Nucleo F303K8 z mikrokontrolerem STM32F303K8T6. Zabrałem się ostatnio za naukę wbudowanego RTC, ale nie mogę sprawić, żeby przerwanie od wybudzenia zaczęło działać.

Wydaje mi się, że wszystko jest skonfigurowane(zewnętrzne przerwania EXTI, NVIC oraz sam RTC), jednak do wywołania funkcji obsługo przerwania nie dochodzi(dioda się nie zapala). Co ciekawe, przykład jest przepisany na mur beton z std periph, jednak niestety nie bangla. Załączam pliki źródłowe projektu do posta.

Czy moglibyście mi pomóc i rzucić na to okiem?

Pozdrawiam,
szymam

src_rtc.tar.gz

Link do komentarza
Share on other sites

Protip: jak chcesz pomocy to nie utrudniaj życia potencjalnym chętnym do pomocy

Jasne, słuszna uwaga. Zarzucam konfigurację poszczególnych elementów:

void rtc_config(RTC_InitTypeDef RTCINIT_STRUCT){
//zegar pwr
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

//dostep do backup rejestrow rtc
PWR_BackupAccessCmd(ENABLE);

//wlaczenie wewnetrznego oscylatora
RCC_LSICmd(ENABLE); //czekaj, az bedzie gotow
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET){};

//ustawienie zrodla dla zegara RTC
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

//start i synchronizacja zegara RTC
RCC_RTCCLKCmd(ENABLE);
RTC_WaitForSynchro();

RTCINIT_STRUCT.RTC_AsynchPrediv = 88;
RTCINIT_STRUCT.RTC_SynchPrediv = 470; /* (42KHz / 89) - 1 = 470 */
RTCINIT_STRUCT.RTC_HourFormat = RTC_HourFormat_24;
RTC_Init(&RTCINIT_STRUCT);
}

void interrupt_config(NVIC_InitTypeDef NVIC_STRUCT, EXTI_InitTypeDef EXTI_STRUCT){
EXTI_ClearITPendingBit(EXTI_Line20);
EXTI_STRUCT.EXTI_Line = EXTI_Line20;
EXTI_STRUCT.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_STRUCT.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_STRUCT.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_STRUCT);

NVIC_STRUCT.NVIC_IRQChannel = RTC_WKUP_IRQn;
NVIC_STRUCT.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_STRUCT.NVIC_IRQChannelSubPriority = 0;
NVIC_STRUCT.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_STRUCT);

/* Configure the RTC WakeUp Clock source: CK_SPRE (1Hz) */
RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);
RTC_SetWakeUpCounter(0x0);

/* Enable the RTC Wakeup Interrupt */
RTC_ITConfig(RTC_IT_WUT, ENABLE);

/* Enable Wakeup Counter */
RTC_WakeUpCmd(ENABLE);
}

void gpio_config(GPIO_InitTypeDef GPIO_STRUCT){
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

GPIO_StructInit(&GPIO_STRUCT);  // domyślna konfiguracja
GPIO_STRUCT.GPIO_Pin = GPIO_Pin_5;  // konfigurujemy pin 5
GPIO_STRUCT.GPIO_Mode = GPIO_Mode_OUT;
GPIO_STRUCT.GPIO_OType = GPIO_OType_PP;// jako wyjście
GPIO_Init(GPIOA, &GPIO_STRUCT);  // inicjalizacja modułu GPIOA
}

void RTC_WKUP_IRQHandler(void){
if(RTC_GetITStatus(RTC_IT_WUT) != RESET){
	/* Toggle on LED1 */
	GPIO_SetBits(GPIOA, GPIO_Pin_5);
	RTC_ClearITPendingBit(RTC_IT_WUT);
	EXTI_ClearITPendingBit(EXTI_Line20);
}
}

Wywołuję to w kolejności jak są zdefiniowane. Oczywiście oprócz funkcji obsługi przerwania.

Link do komentarza
Share on other sites

Ja sam RTC nie używałem, ale uwaga do

przepisany na mur beton z std periph

Przepisane czy skopiowane? Różnie z tym przepisywaniem bywa 😉

Przykład jak rozumiem był konkretnie pod ten mikrokontroler?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Ja sam RTC nie używałem, ale uwaga do
przepisany na mur beton z std periph

Przepisane czy skopiowane? Różnie z tym przepisywaniem bywa 😉

Przykład jak rozumiem był konkretnie pod ten mikrokontroler?

Przekopiowane. Tak, stałe i inne przepisywałem z kodu std periph.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.