Witam,
Mam problem z uruchomieniem modułu I2C2 w procesorze STM32F030CCT6. Korzystam z narzędzia CubeMx i bibliotek HAL. Problem polega na tym, iż moduł I2C2 (I2C2, a nie I2C1, to ważne) po inicjalizacji nie rusza - linia SDA zostaje podciągnięta pod VCC (i pozostaje w takim stanie), a linia SCL zostaje ściągnięta na stałe do masy. Problem nie zależy od częstotliwości I2C (obojętne, czy 100/400kHz). Kod inicjalizacyjny to standardowy kod generowany przez CubeMx:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W programie próbuję wpisać cokolwiek do PCF8563 w trybie pooling (wycinek kodu):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Analizując datasheet natknąłem się na informację, iż I2C2 nie ma niezależnego zegara(jak I2C1), a taktowany jest bezpośrednio z PCLK.
U mnie PCLK wynosi 48MHz. W dalszej części dokumentacji są podane również kryteria, co do okresu :
Jednak korzystajac z podanych Tlow i Thigh (kolejno 4uS i 0,6uS), wychodzi, iż wszytskie podane warunki zostały spełnione. Częstotliwość taktowania w moim przypadku to 48MHz, więc okres to ok.20ns.
Jeżeli chodzi o same piny SDA i SCL, to są one sprawne - w trybie normalnego wyjścia cyfrowego działają poprawnie. Na magistrali nie ma żadnego zwarcia, układy peryferyjne (w moim przypadku pamięć EEPROM M24C64 i PCF8563) są zlutowane poprawnie. Podciągnięcie do VCC przez rezystory 10k.
Musi tu być problem z inicjalizacją, bo wcześniej testowałem ten sam scenariusz, ale z innym procesorem (również z rodziny F0) i I2C1 i wszytsko banglało. Bardzo proszę o pomoc