11. Přístrojové sběrnice SPI, paralelní, ...

Cíle cvičení

  1. Seznámit se konfigurací přístrojových sběrnic MCU
  2. Procvičit ovládání shieldu klávenice s displejem 1602 LCD Shield
  3. Procvičit práci s ADC klávesnicí

Podklady pro cvičení

Kódy pro cvičení

Schéma a zapojení displeje

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:

Pin MCU Display
PB5 D4
PB4 D5
PB10 D6
PA8 D7
PA9 RS
PC7 EN

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.

Kódy pro cvičení

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

0x01XX - 0x08XX - výběr digitu a zápisu segmentů XX

courses/b2m37mam/labs/11.txt · Last modified: 2025/12/15 17:51 by skalicky