Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 3 sty 2025, o 14:40


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 
Autor Wiadomość
PostNapisane: 14 lut 2015, o 15:22 
Offline
Użytkownik

Dołączył(a): 25 sie 2013
Posty: 37
Lokalizacja: Grudziądz
Zbananowany użytkownik

Pomógł: 0

Witam wszystkich serdecznie,

Chciałbym prosić o pomoc w analizie błędów inicjalizacji i komunikacji z zegarem RTC, który wszyscy znają. Chciałbym przedstawić kod, który nie działa - opisać objawy i spytać o parę rzeczy, które mnie nurtują. A więc do rzeczy. Najpierw Kod:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Adres urządzenia zgodnie z datasheetem - 0b101000 A0 RW. U mnie pin A0 zwarty jest do masy, więc adres wygląda następująco: 0b1010000 - 0x50. STM32 z tego co rozumiem wymaga adresów 7 bitowych a najmłodszy bit R/W ustawia sam np. przy wywołaniu funkcji:
- I2C_TransferHandling

Dobrze rozumiem ?

Po drugie, czy adresowanie 0x50 jest wystarczające, czy mam używać jakiś operacji bitowych ? Nie mogę znaleźć o tym informacji.

Po trzecie, czy jest jakaś różnica, jeśli tak to jaka w inicjalizacji GPIO oraz I2C ? Że najpierw np. zegar RCC peryferiów, potem struktura GPIO, potem funkcje alternatywne, dalej jakiś DeInit, itd.

Po czwarte, o co chodzi w polu struktury I2C_InitStructure.I2C_Timing = 0x40B22536; ? Tzn. rozumiem, że chodzi o częstotliwość zegara I2C, ale jak oblicza się tę wartość ? Zaraz ktoś odeśle mnie do skomplikowanego manuala Cortexa - tak, czytam, analizuje, mam ciągle otwarty, ale nie dla wszystkich jest on łatwy i czytelny.

Teraz do rzeczy: problem jest taki, że gdy wywołuję w main.c funkcję odczytu rejestru z RTC, czyli:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


gdzie zmienna sec to uint8_t, program zawiesza się i zostaje w pierwszej pętli while tejże funkcji -> while(!(I2C1->ISR & I2C_ISR_TXIS)); z której już nigdy nie wychodzi. Jak mam rozumieć ten błąd ? Czy w tym wypadku w ogóle generowane jest cokolwiek ? Czy ten kod w ogóle jest dobry ? Napisałem go na bazie exampli od ST. Rezystory podciągające 10kΩ, długość lini to ~ 15cm więc nie ma to znaczenia. Układ RTC sprawny, wielokrotnie używany.

Będę wdzięczny za jakiekolwiek wskazówki z I2C do STMów, bo totalnie tego nie ogarniam. Dzięki z góry !



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO