Search
Podklady pro cvičení Bodový displej - Skalický
1602 Keyboard Shield
HD44780U datasheet
Datasheet STM32F401
Referenční manuál STM32F401
Datasheet Nucleo F401RE
Zdrojový kódy pro LCD display
MAX7219
Šablona main.c (Krška)
Displej je zapojený k paralelní 4-bitové sběrnicí k MCU a pro řízení je potřeba ještě dalších dvou řídících vodičů RS a EN.
Zapojení displeje k MCU:
Připojení tlačítek k MCU je uděláno pomocí odporového děliče, kde jednotlivé rozhodovací úrovně je potřeba zjistit nejprve.
Pro zapojení maticového displeje, které je možné ovládat přes SPI rozhraní, je potřeba vybrat piny, které lze využít pro tento typ komunikace. Jelikož nám stačí jednosměrná komunikace, není potřeba využít signálu MISO. STM32F401 disponuje 4 SPI rozhraními, vybereme jedno, např. na pinech PB3 (SCK) a PB5 (MOSI) a k tomu pin pro chip select (CS), např. PA15. Vše podle Datasheetu STM32F401 .
Základní nastaveni SPI rozhraní na pinech PB3 a PB5 s tím, že pin PA15 bude fungovat jako softwarový CS. Výběr alternativní funkce určíte pomocí Datasheetu STM32F401
Propojení s Nucleo - postupujte podle Datasheet Nucleo F401RE na str. 32.
void SPI1_init(void){ // povoleni hodin pro GPIOA a GPIOB RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOBEN; // nastaveni modu pinu PB3, PB5 a PA15 GPIOB->MODER &= ~GPIO_MODER_MODE3_Msk; // nastaveni obou bitu MODER3 do 0 GPIOB->MODER &= ~GPIO_MODER_MODE5_Msk; // nastaveni obou bitu MODER5 do 0 GPIOB->MODER |= ??; // alternate mode pro PB3 GPIOB->MODER |= ??; // alternate mode pro PB5 GPIOA->MODER &= ~GPIO_MODER_MODE15_Msk; // nastaveni obou bitu MODER15 do 0 GPIOA->MODER |= ??; // output pro PA15 // nastaveni AF pro piny PB3 a PB5 GPIOB->AFR[0] |= ??; // nastaveni AF5 pro PB3 GPIOB->AFR[0] |= ??; // nastaveni AF5 pro PB5 // nastaveni SPI rozhrani RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; // povoleni hodin pro SPI1 SPI1->CR1 |= SPI_CR1_DFF; // nastaveni 16-bit komunikace SPI1->CR1 |= SPI_CR1_MSTR; // nastaveni jako master SPI1->CR1 |= SPI_CR1_SSM; // NSS bude ovladany SW SPI1->CR2 |= SPI_CR2_SSOE; // NSS bude jako vystup SPI1->CR1 |= SPI_CR1_SPE; // povoleni SPI rozhrani } void SPI1_sendWord(uint16_t data){ GPIOA->ODR &= ~GPIO_ODR_OD15; // nastaveni DISP_CS=0 SPI1->DR = data; //while(SPI1->SR & SPI_SR_BSY); // zpozdeni pro odeslani dat for(int i=0; i<50; i++); // zpozdeni pro odeslani dat GPIOA->ODR |= GPIO_ODR_OD15; // nastaveni load=1 }
Sekvence zápisu do displeje je poté následující (16-bit komunikace) podle datasheetu MAX7219
0x0F01 - Test displeje ON 0x0F00 - Test displeje OFF - Normal Operation 0x0C01 - Shutdown mode OFF - Normal Operation 0x0B07 - Scan limit to 7 digits 0x0900 - No Decode function
0x0F01
0x0F00
0x0C01
0x0B07
0x0900
0x01XX - 0x08XX - výběr digitu a zápisu segmentů XX
0x01XX
0x08XX