ZL31ARM: sterowanie kulki i obroty bryły w 3D za pomocą czujnika MEMS LIS35
Konfiguracja projektu
Programy opisane w artykule powstały na bazie bibliotek opisanych w książce „Mikrokontrolery STM32 w praktyce”, dlatego przed rozpoczęciem ich testowania należy pobrać pliki źródłowe przykładów z tej książki (dostępne m.in. na stronie Wydawnictwa BTC). W pliku archiwum znajduje się katalog Libraries, który należy skopiować do katalogu z zainstalowanym środowiskiem µVision (np. C:\Keil\ARM\). Z biblioteki należy wybrać potrzebne pliki i dodać je do własnego projektu. Pliki stm32f10x_conf.h oraz stm32f10x_it.c(h) można skopiować z dowolnego katalogu i w razie potrzeby wprowadzić wymagane zmiany lub też można je znaleźć w załączniku do książki „STM32 Aplikacje i ćwiczenia w języku C” dostępne w katalogu wzorzec. Dalej klikamy na Options for Target… i w zakładce C/C++ w polu Define dodajemy następujące parametry: STM32F10X_MD, USE_STDPERIPH_DRIVER. Oprócz tego należy dodać ścieżki dostępu do plików źródłowych w Include Paths (rysunek 4). W zakładce Debug wybieramy Use ST-Link (Deprecated Version) i to samo robimy w zakładce Utilities, gdzie występuje pole Use Target Driver for Flash Programming.
Rys. 4. Okno z wykazem domyślnych ścieżek dostępu dla środowiska µVision
Do wyświetlania elementów grafiki zostanie wykorzystany kod opisany w artykule „ZL31ARM: implementacja funkcji graficznych 2D” oraz „ZL31ARM: funkcje graficzne 3D”. Opisano tam również skąd można pobrać potrzebne pliki: w załączniku „Przykładowy program dla STM32” dla modułu KAmodTFT2 można znaleźć lcdlib.c, lcdlib.h, lis35.c, lis35.h (opis modułu KAmodMEMS2 wraz z opisem funkcji dla interfejsu SPI można znaleźć na stronie www.STM32.eu) oraz SystemInit.c i board.h oprócz graphics.c, który został zmodyfikowany w powyższych projektach i który jest dostępny w załączniku do tych artykułów (podczas kompilacji może wystąpić błąd nie znalezienia pliku stm32f10x_lib.h – wtedy należy zmienić nazwę na stm32f10x.h); dodatkowo w celu wyświetlenia symboli tekstowych należy pobrać załącznik do artykułu na stronie [1] oraz skopiować plik fonts.c do katalogu projektu, a z pliku main.c skopiować fragment dotyczący funkcji LCDPutChar() i zapisać do lcdlib.c. Struktura całego projektu jest przedstawiona na rysunku 5. W pliku stm32f10x_conf.h należy odkomentować instrukcje załączające potrzebne pliki, jak poniżej:
#include "stm32f10x_exti.h" #include "stm32f10x_flash.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_spi.h" #include "misc.h"
Rys. 5. Struktura projektu
Docelowa zawartość pliku board.h powinna wyglądać w następujący sposób:
// MEMS CS line #define GPIO_CS GPIOA #define GPIO_Pin_CS GPIO_Pin_4 #define GPIO_INT GPIOA #define GPIO_Pin_INT1 GPIO_Pin_0 #define GPIO_Pin_INT2 GPIO_Pin_1 // LCD connection #define PORT_ctrl GPIOC #define RCC_APB2Periph_ctrl RCC_APB2Periph_GPIOC #define DATA GPIO_Pin_4 #define CLK GPIO_Pin_5 #define CS GPIO_Pin_6 #define RES GPIO_Pin_7 // Joystick #define JOY_PORT_OK GPIOB #define JOY_OK GPIO_Pin_5 #define RCC_APB2Periph_JOYOK RCC_APB2Periph_GPIOB #define JOY_PORT GPIOC #define JOY_UP GPIO_Pin_0 #define JOY_DOWN GPIO_Pin_1 #define JOY_LEFT GPIO_Pin_2 #define JOY_RIGHT GPIO_Pin_3 #define RCC_APB2Periph_JOY RCC_APB2Periph_GPIOC // 2 LEDs #define LED_PORT GPIOB #define LED_1 GPIO_Pin_1 #define LED_2 GPIO_Pin_2 #define RCC_APB2Periph_LEDs RCC_APB2Periph_GPIOB