STM3FF407 a RTC

Jiří Nesvačil nesvacil na posys.eu
Středa Červen 17 10:09:54 CEST 2015


Pokud prohledate bity a bude vse ok, vyplati se pripojit scope a podivat se, zda krystal bezi.
Specielne STM32 maji low power stabilizator na oscilatoru RTC hodin. Pokud se pouziji spatne krystaly nebo je vetsi odber, tak RTC nejede.
To co normalne chodi najednou nejde. Je to docela citlive i na vyrobni kusy.

Jirka


Dne 17. 6. 2015 v 9:59 Jan Waclawek napsal(a):
> RCC_BDCR    0b 0000 0000 0000 0000 1000 0001 0000 0000
>
> To znamena, ze mate vybraty LSE ako zdroj hodin RTC, nie? Ak ten LSE nejde,
> potom RTC nema hodiny, a ten init v RTC neprebehne, na to sa upozornuje v
> datasheete.
>
> Tipujem, ze ste si niekedy predtym skusili nastavit ten bit 8, a zmenit to
> nie je trivialne, precitajte si co sa pise v RM okolo RCC_BDCR.RTCSEL
> (vyzaduje si to reset backup domain, toggle RCC_BDCR.BDRST).
>
>
> Dalsich par poznamok:
>
> Tie definicie bitfieldov mate odkial/ako? Mate ich volatile (ako celok
> alebo polozka po polozke)? Neprehadze prekladac pristup k nim? Volatile
> nema presnu definiciu, a nie kazdy prekladac je v takychto marginalnych
> zalezitostiach dostatocne konzervativny.
>
> Mimochodom, uvedomujete si, ze pristup k polozkam v bitfieldoch (ako aj
> pristup cez bit-bandovu oblast) vedie k RMW, co moze mat u niektorych
> hardwarovych registrov vedlajsie efekty (netvrdim ze je to v tomto
> pripade, len je dobre to mat na pamati). Aj ked pouzivate bitfieldy,
> niekedy (casto) je lepsie priame priradenie; v pripade bitfieldov je to
> mozne realizovat pomocou compound literals (C99 6.5.2.5, vyzera to ako
> preypovany inicializator).
>
> Skusali ste toto vsetko robit v debuggeri rucne? Nie vzdy sa tak da odhalit
> problem, ale niekedy ano, najma ak mate vizualny debugger ktory spatne
> zobrazi vycitanu hodnotu (u holeho gdb to musite robit "rucne"); to vie
> odhalit rozne chyby typu "ak zabudnem povolit toto tak sa mi nepodari
> nastavit hento". Neodhali to vsak problemy suvisiace s casovanim v SoC
> ktorym tieto armoidy su.
>
> Inak za PWR_CR.DBP = 1 doporucujem dat spatne citanie stavu PWR_CR (staci
> precitat cely register, netreba skumat jednotlive bity), pretoze PWR je na
> APB1 zbernici ktora u 'F4xx typicky bezi na AHBCLK/4 takze je za
> buffrom/synchronizatorom v AHB/APB bridge, kdezto RCC je priamo na AHB1,
> takze sa mi stavalo, ze ked kompilator dal tie dva pristupy hned za seba,
> tak sa do RCC_BDCR registra nezapisalo (*). Ale to by nemal byt Vas
> problem, lebo Vy po nastaveni PWR_CR.DBP mate zapis do RCC_CSR co nie je v
> backup domene, takze by malo byt dost casu po ten zapis do BDCR (naviac
> ten zapis podla vsetkeho aj prebehol).
>
> wek
>
>
> (*)
> https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FEnabling%20LSE&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&currentviews=401
>
>
>
>
>
> ----- Original Message ---------------
>
> Subject: Re: STM3FF407 a RTC
>     From: Roman Vostřel <vostrel na lit.cz>
>     Date: Tue, 16 Jun 2015 19:24:33 +0200
>       To: HW-news <hw-list na list.hw.cz>
>
>> Nastavil jsem breakpoint  na smyčku s podmínkou INITF a v RTC_ISR je 0b
>> 0000 0000 0000 0000 0000 0000 0000 0111, RCC_BDCR    0b 0000 0000 0000
>> 0000 1000 0001 0000 0000 ,RCC_CSR    0b 0001 1110 0000 0000 0000 0000
>> 0000 0011
>>
>> Nevím proč tam není nastaven bit7 RTC_ISR.INIT na 1?.
>>
>>
>> Dne 16.6.2015 v 18:28 Jan Waclawek napsal(a):
>>> A ten LSI bezi? Nebolo by treba pockat najprv kym sa rozbehne, t.j. po
>>> nastaveni RCC_CSR.LSION pockat kym sa nastavi RCC_CSR.LSIRDY?
>>>
>>> wek
>>>
>>>
>>> ----- Original Message ---------------
>>>
>>>> Nedaří se mi zprovoznit RTC u STM32F407 z LSI hodin. Nedočkám se 1 v
>>>> RTC_ISR.INITF.  Můµete mi poradit na co jsem při inicializaci hodin
>>>> zapomněl?
>>>>
>>>>
>>>> void RTCInit(){
>>>> // Init power and clock for RTC
>>>>
>>>> RCC_APB1ENR.PWREN = 1;         // Power interface clock enable
>>>> PWR_CR.DBP = 1;
>>>>
>>>> RCC_CSR. LSION=1;                //povolit interní osclilátor
>>>>
>>>> RCC_BDCR.RTCSEL0 = 0;        //nastavit na interní oscilátor
>>>> RCC_BDCR.RTCSEL1 = 1;
>>>>
>>>> RCC_BDCR.RTCEN = 1;
>>>>
>>>>
>>>> RTC_WPR = 0xCA;   //unlock write protection
>>>> RTC_WPR = 0x53;   //unlock write protection
>>>>
>>>> RTC_ISR.INIT = 1;
>>>>
>>>> while(RTC_ISR.INITF == 0)
>>>> { }
>>>>
>>>> RTC_PRER = 0x7f00ff;  //  set   SynchPrediv to FF and AsynchPrediv to 7F
>>>> RTC_PRER = 0x7f00ff;  //  set   SynchPrediv to FF and AsynchPrediv to 7F
>>>>
>>>> RTC_TR = 0x103500; //setting time to 12.35.00
>>>> RTC_DR = 0x150718;  // set date to  2012-07-18
>>>>
>>>> RTC_ISR.INIT = 0;
>>>>
>>>> RTC_WPR = 0xFF;
>>>> }
>>> _______________________________________________
>>> HW-list mailing list  -  sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list