Ostatnio zaprezentowałem w jaki sposób obsłużyć wyświetlacz ze sterownikiem HD44780 dla STM32F4. Tym razem chciałem przedstawić przerobiony program, który pozwoli bez najmniejszych problemów obsłużyć taki wyświetlacz na płytce z rdzeniem M3.
Główne funkcje programu oraz dostępy do rejestrów nie uległy zmianie. Główne zmiany znajdują się w obrębie funkcji opóźniających oraz deklaracji pinów.
Wyświetlacz należy podłączyć w następujący sposób:
- VSS - GND
- VDD - 5V
- V0 - Kontrast do potencjometru
- RS - GPIOA_5
- RW - GND
- E - GPIOA_6
- D0-D3 - linie danych nie podłączone
- D4 - linia danych - GPIOB12
- D5 - linia danych - GPIOB13
- D6 - linia danych - GPIOB14
- D7 - linia danych - GPIOB15
- A - na drugi potencjometr
- K - GND podświetlenia
Deklaracja pinów:
Deklaracja wymaganych pinów dla wyświetlacza wygląda następująco:
void HD44780_InitPins(void) { GPIO_InitTypeDef GPIOINIT; //Wlaczenie zegarów dla poszczególnych pinów RCC_APB2PeriphClockCmd(HD44780_RS_RCC | HD44780_E_RCC, ENABLE); RCC_APB2PeriphClockCmd(HD44780_D4_RCC | HD44780_D5_RCC, ENABLE); RCC_APB2PeriphClockCmd(HD44780_D6_RCC | HD44780_D7_RCC, ENABLE); //RS GPIOINIT.GPIO_Pin = HD44780_RS_PIN; //Pin jako wyjście GPIOINIT.GPIO_Mode = GPIO_Mode_Out_PP; GPIOINIT.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(HD44780_RS_PORT, &GPIOINIT); //Po inicjalizacji stan niski na wszystkie linie w celu zresetowania układu GPIO_WriteBit(HD44780_RS_PORT, HD44780_RS_PIN, 0x00); //E GPIOINIT.GPIO_Pin = HD44780_E_PIN; GPIOINIT.GPIO_Mode = GPIO_Mode_Out_PP; GPIOINIT.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(HD44780_E_PORT, &GPIOINIT); GPIO_WriteBit(HD44780_E_PORT, HD44780_E_PIN, 0x00); //D4 GPIOINIT.GPIO_Pin = HD44780_D4_PIN; GPIOINIT.GPIO_Mode = GPIO_Mode_Out_PP; GPIOINIT.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(HD44780_D4_PORT, &GPIOINIT); GPIO_WriteBit(HD44780_D4_PORT, HD44780_D4_PIN, 0x00); //D5 GPIOINIT.GPIO_Pin = HD44780_D5_PIN; GPIOINIT.GPIO_Mode = GPIO_Mode_Out_PP; GPIOINIT.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(HD44780_D5_PORT, &GPIOINIT); GPIO_WriteBit(HD44780_D5_PORT, HD44780_D5_PIN, 0x00); //D6 GPIOINIT.GPIO_Pin = HD44780_D6_PIN; GPIOINIT.GPIO_Mode = GPIO_Mode_Out_PP; GPIOINIT.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(HD44780_D6_PORT, &GPIOINIT); GPIO_WriteBit(HD44780_D6_PORT, HD44780_D6_PIN, 0x00); //D7 GPIOINIT.GPIO_Pin = HD44780_D7_PIN; GPIOINIT.GPIO_Mode = GPIO_Mode_Out_PP; GPIOINIT.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(HD44780_D7_PORT, &GPIOINIT); GPIO_WriteBit(HD44780_D7_PORT, HD44780_D7_PIN, 0x00); }
Całość projektu można pobrać z linku umieszczonego w zakładce STM32. Pozwoli on na ściągnięcie wszystkich plików z dysku onet.
Poniżej przedstawiam zdjęcie podłączonego układu. Wykorzystałem dwa potencjometry 10k. Jeden z nich reguluje kontrast, drugi natomiast jasność podświetlenia. Jasnością można sterować poprzez wyjście mikrokontrolera z sygnałem PWM.
Rys. 1. Podłączony układ