/* Pinout 1 VSS GND 2 VDD VDD 3 nc nc 4 RS PD4 5 R/W PD5 6 E PD6 7 nc nc 8 nc nc 9 nc nc 10 nc nc 11 D4 PD0 12 D5 PD1 13 D6 PD2 14 D7 PD3 15 nc nc 16 nc nc */ #include "stm32f4xx.h" uint32_t i; void WriteNibble(char data){ GPIOD->BSRRL |= data; GPIOD->BSRRH |= ~data; GPIOD->BSRRL |= (1<<6); //E=1; for (i=0;i<10000;i++){} //delay GPIOD->BSRRH |= (1<<6); //E=0; for (i=0;i<10000;i++){} //delay } void WriteIns (char ins){ GPIOD->BSRRH |= (1<<4); //RS=0; GPIOD->BSRRH |= (1<<5); //RW=0; WriteNibble((ins&0xF0)>>4); //High nibble WriteNibble(ins&0x0F); //Low nibble } void WriteData(char data){ GPIOD->BSRRL |= (1<<4); //RS=1; GPIOD->BSRRH |= (1<<5); //RW=0; WriteNibble((data&0xF0)>>4); //High nibble WriteNibble(data&0x0F); //Low nibble } void initDispl(void){ GPIOD->BSRRH |= (1<<4); //RS=0; GPIOD->BSRRH |= (1<<5); //RW=0; GPIOD->BSRRH |= (1<<6); //E=0; WriteNibble(0x03); //Be sure to be in 8-Bit-Mode WriteNibble(0x03); WriteNibble(0x03); WriteNibble(0x02); //Switch to 4 Bit for (i=0;i<10000;i++){} //delay WriteIns(0x28); //4-Bit-Mode WriteIns(0x08); //display off WriteIns(0x06); //entry mode set increment cursor by 1 not shifting display WriteIns(0x17); //Character mode and internel power on WriteIns(0x01); //clear display WriteIns(0x02); //return home WriteIns(0x0C); //display on } int main () { //Taktversorgung Port D RCC->AHB1ENR |= (1<<3); //Konfiguration Port D - Ausgaenge festlegen GPIOD->MODER |= (1<<0); GPIOD->MODER |= (1<<2); GPIOD->MODER |= (1<<4); GPIOD->MODER |= (1<<6); GPIOD->MODER |= (1<<8); GPIOD->MODER |= (1<<10); GPIOD->MODER |= (1<<12); GPIOD->MODER |= (1<<14); GPIOD->MODER |= (1<<16); //Initialisierung Display initDispl(); //Anzeige "-" auf Display WriteData(0x2D); do { } while (1); }