Interfejs I2C
Interfejs I2C – praca z modułem IMU – MPU6050 (dokumentacja techniczna, mapa rejestrów)
1. Przygotowanie projektu
- utworzenie projektu: STM32 Project
- wybranie płytki: Nucelo STM32L432
- w zakładce Project Manager/Code Generator i aktywujemy opcję „Generate peripheral initialization….”
- konfigurowanie wyprowadzeń:
- SYS/Debug -> Serial Wire (SWD)
- PB3 – jako wyjście o nazwie „LED”
- konfigurowanie modułu komunikacji I2C:
- Connectivity/I2C1 i wybrać z listy I2C
- upewnić się, że I2C1_SDA jest na pin PA10, w celu przeniesienia przyciskamy “ctrl” klikamy myszką na pin i przenosimy
- upewnić się, że I2C1_SCL jest na pin PA9
- konfigurowanie modułu UART – terminal PC
- Connectivity/ USART2 wybrać mode: Asynchronous, ustawić prędkość komunikacji na 9600 (Baud Rate)
- generujemy projekt
2. Podłączenie modułu MPU-6050
- podłączyć przewodami zgodnie z tabelką:
Opis | Płytka NUCLEO | Moduł MPU-6050 |
Zasilanie +5V | 5V | VCC |
Zasilanie GND | GND | GND |
komunikacja I2C - SDA | D0 - PA10 | SDA |
komunikacja I2C - SCL | D1 - PA9 | SCL |
3.Obsługa I2C – odczyt rejestru
- do obsługi modułu podłączone po interfejsie I2C potrzebujemy znać jego adres (dokumentacja techniczna – 9.2). Moduł posiada AD0 podpięte do GND.
- uruchomić funkcję readAndShow() – co robi ta funkcja, jaka wartość powinna być w rejestrze “Who Am I” mapy rejestrów?
- “<<—-” – komentarze tak oznaczone należy uzupełnić odpowiednimi wartościami
4.Obsługa I2C zapisanie do rejestru – odczyt temperatury
- uruchomić funkcję readTemp() – co robi ta funkcja?
- domyślnie funkcja sprint nie potrafi wyświetlać liczb typu float, należy skonfigurować kompilator według instrukcji na stronie “Zestaw STM32”
5. Poziomnica
- Dołączyć bibliotekę “math.h” (#include “math.h”)
- uruchomić funkcję poziomnica() – co robi ta funkcja?
6.Pytania dodatkowe:
- uint8_t adresMPU6050=0x68<<1; //Adres modulu MPU6050 – dlaczego jest przesunięcie bitowe (0x68<<1)
- dlaczego odczyty poziomu jak płytka leży na nożkach są na poziomie 180 stopni?