ZL31ARM: implementacja funkcji graficznych 2D
Kolejną rzeczą jest pobranie załącznika „Przykładowy program dla STM32” dla modułu KAmodTFT2, który zostanie zmodyfikowany dla potrzeb prezentowanego projektu. Następujące pliki należy skopiować do katalogu projektu i dodać jej w IDE µVision do grupy User: board.h, graphics.c, lcdlib.c, lcdlib.h, main.c, SystemInit.c. W pliku main.c należy usunąć linijki związane z obsługą czujnika przypieszenia MEMS LIS35, aby program został prawidłowo skompilowany. Na rysunku 5 pokazano strukturę projektu.
Rys. 5. Drzewo projektu
Aby mieć możliwość sterowania programem należy zmodyfikować w pliku board.h jedynie linie związane z joystickiem w następujący sposób:
// 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
Następnie zmieniamy wiersz na początku powyższych plików z #include „stm32f10x_lib.h” na #include „stm32f10x.h”. Konfiguracja portów wykorzystywanych przez joystick oraz wyświetlacz w pliku SystemInit.c przebiega następująco:
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// LCD lines configuration
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ctrl, ENABLE);
GPIO_InitStructure.GPIO_Pin = DATA | CLK | CS | RES ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(PORT_ctrl, &GPIO_InitStructure);
// Joystick direction lines configuration
RCC_APB2PeriphClockCmd(RCC_APB2Periph_JOY, ENABLE);
GPIO_InitStructure.GPIO_Pin = JOY_UP | JOY_DOWN | JOY_LEFT | JOY_RIGHT;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(JOY_PORT, &GPIO_InitStructure);
// Joystick OK line configuration
RCC_APB2PeriphClockCmd(RCC_APB2Periph_JOYOK, ENABLE);
GPIO_InitStructure.GPIO_Pin = JOY_OK;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(JOY_PORT_OK, &GPIO_InitStructure);
}
Konfiguracja interfejsu SPI:
void SPI_Configuration(void){
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
// Enable SPI1 and GPIO clocks
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOA, ENABLE);
// Configure SPI1 pins: SCK, MISO and MOSI
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// Configure I/O for Flash Chip select
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_CS;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIO_CS, &GPIO_InitStructure);
// SPI1 configuration - Master, 8-bit
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
// Enable SPI1
SPI_Cmd(SPI1, ENABLE);
}
Rysowanie punktu
W pliku lcdlib.c znajdują się gotowe definicje kolejnych funkcji, które zostaną wykorzystane przy obsłudze wyświetlacza:
void InitLcdNokia(void); --inicjalizacja wyświetlacza LCD void LCDClearScreen(unsigned int color); --czyszczenie ekranu LCD void LCDSetPixel(int x, int y, unsigned int color); --rysowanie punktu(x,y) void SetContrast(char con); --ustawienie kontrastu
Inicjalizację wyświetlacza wykonuje się raz na początku działania programu. Gotowa funkcja LCDSetPixel() posłuży jako podstawa do przenoszenia kolejnych punktów na wyświetlacz. Przyjmuje ona 3 parametry: dwie wartości współrzędnych (x,y) z zakresu od 1 do 130 włącznie, oraz 12-bitową wartość koloru (paleta typu BRG, 4 bity/kolor = 16 odmian podstawowego koloru). Tak więc, aby wyświetlić punkt o współrzędnych (x=50,y=100) i kolorze G=4, R=8, B=12 (wartości te są odniesione do maksymalnej, czyli 15) należy wykonać następującą instrukcję:
LCDSetPixel(50,100,0xC84);

Technologie End of Life i bezpieczeństwo sieci – wyzwania Europy związane z tzw. długiem technologicznym
Najczęstsze błędy firm przy wyborze dostawcy energii i jak ich uniknąć
Fotorezystor, czyli czujnik światła dwojakiego działania. Przykład innowacji w automatyce i elektronice możliwej dzięki technologii fotooporników 



