Hjälp med att konfigurera RTC på STM32F407

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
jimmieh
Inlägg: 28
Blev medlem: 3 oktober 2009, 14:07:07

Hjälp med att konfigurera RTC på STM32F407

Inlägg av jimmieh »

Hej jag har precis börjat med stm32 processorer och har nu insett att de är lite mer komplicerade än PICarna jag suttit med innan.
Skulle behöva få igång den inbyggda RTC modulen. Men har nu suttit en hel dag och kollat datablad och har helt kört fast.

Problemet är att jag inte lyckas skriva till RTC registerna.
Såhär ser mi kod ut:

Kod: Markera allt

void Set_RTC()
{

/* Enable the PWR clock */
RCC_APB1ENR.PWREN = 1;

/* Allow access to RTC */
PWR_CR.DBP = 1;

/* LSE used as RTC source clock */
RCC_BDCR.LSEON = 1;    //External low-speed oscillator enable

 /* Wait till LSE is ready */
while(RCC_BDCR.LSERDY != 1)
{
}

/* Select the RTC Clock Source to LSE */
RCC_BDCR.F8 = 1;
RCC_BDCR.F9 = 0;

/* Wait for RTC APB registers synchronisation */
while(RTC_ISR.RSF != 1)
{
}

RCC_BDCR.RTCEN = 1;   //Enable RTC clock  <<<

RTC_WPR = 0xCA;   //unlock write protection
RTC_WPR = 0x53;   //unlock write protection


/* Configure the RTC prescaler */
RTC_PRER = 0x7f00ff;  //  set   SynchPrediv to FF and AsynchPrediv to 7F

//RCC_BDCR.RTCEN = 1;   //Enable RTC clock  <<<




RTC_ISR.INIT = 1;     //enter initialization mode <<<<<<< lyckas ej sätta detta register

while(RTC_ISR.INITF != 1)   //poll INITF
{

}
/* Configure the RTC PRER */
 RTC_PRER = 0x7F;
 RTC_PRER |= 0xFF << 16;

 RTC_TR = 0x123500; //setting time to 12.35.00
 RTC_DR = 0x126718;  // set date to  2012-07-18
 RTC_CR.F6 = 0; // set FMT 24H format

 RTC_ISR.INIT = 0;     //exit initialization mode

  /* Enable the write protection for RTC registers */
  RTC_WPR = 0xFF;
}
Någon som vet vad jag missat? eller någon som vet något bra exempel?
Användarvisningsbild
Korken
Inlägg: 2230
Blev medlem: 3 februari 2006, 19:19:36
Ort: Luleå, Porsön

Re: Hjälp med att konfigurera RTC på STM32F407

Inlägg av Korken »

Kör du med STs egna bibliotek? För du ser inte ut att prata mot registrena korrekt.
Oftast brukar det vara PHERIPHIAL->REGISTER = VALUE;
Men om du kör med standard biblioteken så finns det färdiga funktioner för det.
jimmieh
Inlägg: 28
Blev medlem: 3 oktober 2009, 14:07:07

Re: Hjälp med att konfigurera RTC på STM32F407

Inlägg av jimmieh »

Nix, försökte få det att fungera genom att sätta registerna själv.

Kanske ska ge mig på att försöka få STs biblotek att fungera.
Använder MikroC for ARM kompilator så får se om det är svårt att få STs biblotek att fungera i den miljön.
daer
Inlägg: 368
Blev medlem: 13 juni 2008, 22:15:27
Ort: Höör och Helsingborg, Skåne

Re: Hjälp med att konfigurera RTC på STM32F407

Inlägg av daer »

Har använt mig av STM32F103, ST Perhipial library driver och CodeSourcery GCC kompilator.

Kommer ihåg att jag hade problem med backup registret, den tappade värdet hela tiden. Felet jag gjorde då var att analogdelen på cpu'n strömmatades från en annan regulator så det spänningssattes på fel sätt vilket gjorde att den tappade minnet.

Men som sagt denna kod använder sig av ST's bibliotek och är för en F103.

Här är min init funktion:

Kod: Markera allt

int rtc_init(void)
{
	volatile uint16_t i;
	int ret = 0;

	/* Enable PWR and BKP clocks */
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

	/* LSI clock stabilization time */
	for(i=0;i<5000;i++) { ; }

	if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5) {
		/* Backup data register value is not correct or not yet programmed (when
		   the first time the program is executed) */
		debugPrint(LEVEL_INFO, "RTC Clock not initilized, setting to default time");

		/* Allow access to BKP Domain */
		PWR_BackupAccessCmd(ENABLE);

		/* Reset Backup Domain */
		BKP_DeInit();

		/* Enable LSE */
		RCC_LSEConfig(RCC_LSE_ON);

		/* Wait till LSE is ready */
		while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) { ; }

		/* Select LSE as RTC Clock Source */
		RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);

		/* Enable RTC Clock */
		RCC_RTCCLKCmd(ENABLE);

		/* Wait for RTC registers synchronization */
		RTC_WaitForSynchro();

		/* Wait until last write operation on RTC registers has finished */
		RTC_WaitForLastTask();

		/* Set RTC prescaler: set RTC period to 1sec */
		RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */

		/* Wait until last write operation on RTC registers has finished */
		RTC_WaitForLastTask();

		/* Set initial value */
		{
#if 1
			RTC_SetCounter( (uint32_t)((0*60+0)*60) ); // here: 1st January 2000 00:00:00
#else
			RTC_t ts =
			{
				.year = 2010,	/* 1..4095 */
				.month = 1,	/* 1..12 */
				.mday = 1,	/* 1.. 31 */
				.hour = 0,	/* 0..23 */
				.min = 0,	/* 0..59 */
				.sec = 0,	/* 0..59 */
			};
			RTC_SetCounter(struct_to_counter(&ts));
#endif
		}

		/* Wait until last write operation on RTC registers has finished */
		RTC_WaitForLastTask();

		BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);

		/* Lock access to BKP Domain */
		PWR_BackupAccessCmd(DISABLE);

		ret = 1;
	} else {

		/* Wait for RTC registers synchronization */
		RTC_WaitForSynchro();

	}

	return ret;
}
jimmieh
Inlägg: 28
Blev medlem: 3 oktober 2009, 14:07:07

Re: Hjälp med att konfigurera RTC på STM32F407

Inlägg av jimmieh »

TACK!
Försökte lägga in ST Perhipial library i mikro C ARM men det saknas massa include filer såsom stdint.h och stdio.h. Var är det meningen att man ska få dessa filer ifrån?
Hade nog underlättat enormt mycket om man fick STs library att fungera.

Tycker att det är väldigt svårt att få en bra bild över hur de olika delarna i processorn fungerar genom att bara läsa STs datablad och referens manual. Jag saknar bilder(träd) på vilka register som behöver vara satta för att få igång de olika modulerna. Finns det någon annan bra dokumentation än just datablad och referensmanual?
daer
Inlägg: 368
Blev medlem: 13 juni 2008, 22:15:27
Ort: Höör och Helsingborg, Skåne

Re: Hjälp med att konfigurera RTC på STM32F407

Inlägg av daer »

Angående stdint.h och stdio.h. I detta projekt så använder jag mig av det standard library som var med CodeSourcery installationen. I detta fall så är det newlib.
Finns det inte med något till MikroC?
Stalker
Inlägg: 9
Blev medlem: 19 april 2011, 18:16:53

Re: Hjälp med att konfigurera RTC på STM32F407

Inlägg av Stalker »

Det ser inte ut som att du faktiskt väljer vilken klocka som ska användas för RTC. Se figur 9 i referensmanualen (revision 1, första bilden under reset- och klockavsnittet) och RTCSEL i RCC_BDCR.
jimmieh
Inlägg: 28
Blev medlem: 3 oktober 2009, 14:07:07

Re: Hjälp med att konfigurera RTC på STM32F407

Inlägg av jimmieh »

Det ser inte ut som att du faktiskt väljer vilken klocka som ska användas för RTC. Se figur 9 i referensmanualen (revision 1, första bilden under reset- och klockavsnittet) och RTCSEL i RCC_BDCR.
Jo gör det med raderna:
/* Select the RTC Clock Source to LSE */
RCC_BDCR.B8 = 1;
RCC_BDCR.B9 = 0;
daer skrev:Angående stdint.h och stdio.h. I detta projekt så använder jag mig av det standard library som var med CodeSourcery installationen. I detta fall så är det newlib.
Finns det inte med något till MikroC?
Lyckas inte hitta några sådana filer I programmappen. Kan vara att de är gömda eller inbakade någonstans eftersom mikroC har massa egna librarys som man inte får se kälkoden till.
Ska försöka ladda ner newlib och slänga in.

Finns det någon gratis/billig och bra utvecklingsmiljö till STM32 som fungerar i windows 7?
daer
Inlägg: 368
Blev medlem: 13 juni 2008, 22:15:27
Ort: Höör och Helsingborg, Skåne

Re: Hjälp med att konfigurera RTC på STM32F407

Inlägg av daer »

Jag kör som sagt med CodeSourcery Lite. Denna verkar numera heta "Mentor Graphics Sourcery Tools", http://www.mentor.com/embedded-software/codesourcery/
Lite versionen verkar fortfarande fri, men man har inget IDE.
Jag bygger med make som var med i CodeSourcery, cs-make, och gör makefilen manuellt.
Skriv svar