STM32Butterfly: współpraca z 3-osiowym czujnikiem przyspieszenia MEMS (LIS35D)
W artykule przedstawiamy efektowną aplikację pozwalającą zapoznać się z akcelerometrem LIS35DE firmy STMicroelectronics, który mierzy przyspieszenie wzdłuż trzech osi. Aplikacja jest przygotowana dla zestawu uruchomieniowego STM32Butterfly2 (z mikrokontrolerem STM32F107), modułu KAmodTFT2 oraz modułu KAmodMEMS2, który jest wyposażony w układ LIS35DE. Sposób dołączenia modułów do zestawu uruchomieniowego opisano w pliku main.c.
Obsługa wyświetlacza
Wyświetlacz modułu KAmodTFT2 jest wyposażony w kontroler PCF8833. Komunikacja z kontrolerem odbywa się przez interfejs szeregowy SPI. Niestety ramka danych ma 9 bitów, co uniemożliwia wykorzystanie sprzętowego interfejsu SPI wbudowanego w mikrokontroler STM32 (tu do wyboru jest wyłacznie 8 lub 16 bitów). Wpływa to negatywnie na wydajność, ale do naszej aplikacji w zupełności wystarczy.
Obsługa akcelerometru
Układ LIS35DE jest wyposażony w interfejsy I2C i SPI, linie tych interfejsów w module KAmodMEMS2 zostały wyprowadzone na wygodne w użyciu złącza. W aplikacji wykorzystałem interfejs SPI. Odczyt rejestrów układu polega na wysłaniu w pierwszym bajcie:
- bitu 0 o wartości 1 (odczyt),
- bitu 1 o wartości 0 lub 1 (dla wartości 1 adres rejestru będzie automatycznie inkrementowany)
- bitów 2..7 zawierających adres rejestru
Następnie należy odczytać zawartości rejestrów. Zapis przebiega analogicznie z tą różnicą, że bajt 0 ma mieć wartość 0. Poniżej przedstawiam funkcje realizujące zapis i odczyt rejestrów.
#define LIS35_WRITE 0
#define LIS35_READ 0x80
#define LIS35_ADDR_NO_INC 0
#define LIS35_ADDR_INC 0x40
...
void LIS35_ReadRegister(char addr,char * v)
{
SPI_CS_Enable();
SPI_Transmit(LIS35_READ|LIS35_ADDR_NO_INC|addr);
*v=SPI_Receive();
SPI_CS_Disable();
}
void LIS35_WriteRegister(char addr,char v)
{
SPI_CS_Enable();
SPI_Transmit(LIS35_WRITE|LIS35_ADDR_NO_INC|addr);
SPI_Transmit(v);
SPI_CS_Disable();
}
Po dołączeniu zasilania akcelerometr jest w stanie power-down, funkcja inicjalizująca przełącza układ w tryb active przez ustawienie bitu PD w rejestrze CTRL_REG1 oraz odblokowuje wszystkie trzy osie akcelerometru przez ustawienie bitów ZEN, YEN i XEN w tym samym rejestrze.
char InitializeLIS35(void)
{
char RegVal, LIS35Settings;
//Reset LIS35 configuration
LIS35_RebootMemory();
LIS35_ReadRegister(LIS35_REG_CR1, &RegVal);
//Power up
LIS35Settings = LIS35_REG_CR1_XEN | LIS35_REG_CR1_YEN | LIS35_REG_CR1_ZEN | LIS35_REG_CR1_ACTIVE;
LIS35_WriteRegister(LIS35_REG_CR1, LIS35Settings);
LIS35_ReadRegister(LIS35_REG_CR1, &RegVal);
//Check whether power up is set
if (RegVal == LIS35Settings) return LIS35_OK;
return LIS35_ERROR;
}


Od wzmacniacza nieodwracającego do integratora i wzmacniacza ładunkowego, czyli historia z zaskakującą pointą jak w dobrym kryminale
Green czy smart? Jak decyzje ESG zaczynają optymalizować procesy produkcyjne
Firma Semicon ma w ofercie narzędzia do obróbki przewodów 

![https://www.youtube.com/watch?v=BgxJVTwYJ-s Zapraszamy do obejrzenia filmu i wysłuchania krótkich wypowiedzi prelegentów Hardware Forum 2026 i organizatorów majowej konferencji dla inżynierów z branży elektronicznej: Konrad Bruliński z Lemontech, prof. Krzysztof Kulpa z Politechniki Warszawskiej, Zbigniew Huber z FLC, Ewa Załupska z firmy KROK, Jerzy Kozieł z MPTECH, Grzegorz Potyralski z VIGO Photonics, dr Krzysztof Czuba z Politechniki Warszawskiej, Anna Beata Kalisz Hedegaard z Quantum Security Defence, Adrian Cichosz z Elhurt Dystrybucja Anna Kamińska z Creotech Quantum, oraz Łukasz Jaeszke i Adam Jaeszke z TEK.day [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/05/tytulowe-film-1.png)



