#include "stm32f4xx.h" /* 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 */ int i=0; void initDisplay(void){ GPIOD->BSRRH |= (1<<4); //RS=0; GPIOD->BSRRH |= (1<<5); //RW=0; GPIOD->BSRRH |= (1<<6); //E=0; //0x03 Be sure to be in 8 Bit Mode GPIOD->BSRRL |= (1<<0); //PA=1; GPIOD->BSRRL |= (1<<1); //PA=1; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRH |= (1<<3); //PA=0; 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 //0x03 Be sure to be in 8 Bit Mode GPIOD->BSRRL |= (1<<0); //PA=1; GPIOD->BSRRL |= (1<<1); //PA=1; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRH |= (1<<3); //PA=0; 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 //0x03 Be sure to be in 8 Bit Mode GPIOD->BSRRL |= (1<<0); //PA=1; GPIOD->BSRRL |= (1<<1); //PA=1; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRH |= (1<<3); //PA=0; 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 //0x02 Switch to 4 Bit GPIOD->BSRRH |= (1<<0); //PA=0; GPIOD->BSRRL |= (1<<1); //PA=1; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRH |= (1<<3); //PA=0; 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 //Wait(50) for (i=0;i<10000;i++){} //delay //0x28 4 Bit Mode GPIOD->BSRRH |= (1<<4); //RS=0; GPIOD->BSRRH |= (1<<5); //RW=0; GPIOD->BSRRH |= (1<<0); //PA=0; GPIOD->BSRRL |= (1<<1); //PA=1; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRH |= (1<<3); //PA=0; 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 GPIOD->BSRRH |= (1<<0); //PA=0; GPIOD->BSRRH |= (1<<1); //PA=0; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRL |= (1<<3); //PA=1; 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 //0x08 display off GPIOD->BSRRH |= (1<<4); //RS=0; GPIOD->BSRRH |= (1<<5); //RW=0; GPIOD->BSRRH |= (1<<0); //PA=0; GPIOD->BSRRH |= (1<<1); //PA=0; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRH |= (1<<3); //PA=0; 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 GPIOD->BSRRH |= (1<<0); //PA=0; GPIOD->BSRRH |= (1<<1); //PA=0; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRL |= (1<<3); //PA=1; 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 //0x06 entry mode set increment cursor by 1 not shifting display GPIOD->BSRRH |= (1<<4); //RS=0; GPIOD->BSRRH |= (1<<5); //RW=0; GPIOD->BSRRH |= (1<<0); //PA=0; GPIOD->BSRRH |= (1<<1); //PA=0; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRH |= (1<<3); //PA=0; 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 GPIOD->BSRRH |= (1<<0); //PA=0; GPIOD->BSRRL |= (1<<1); //PA=1; GPIOD->BSRRL |= (1<<2); //PA=1; GPIOD->BSRRH |= (1<<3); //PA=0; 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 //0x17 Character mode and internal power on GPIOD->BSRRH |= (1<<4); //RS=0; GPIOD->BSRRH |= (1<<5); //RW=0; GPIOD->BSRRL |= (1<<0); //PA=1; GPIOD->BSRRH |= (1<<1); //PA=0; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRH |= (1<<3); //PA=0; 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 GPIOD->BSRRL |= (1<<0); //PA=1; GPIOD->BSRRL |= (1<<1); //PA=1; GPIOD->BSRRL |= (1<<2); //PA=1; GPIOD->BSRRH |= (1<<3); //PA=0; 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 //0x01 clear display GPIOD->BSRRH |= (1<<4); //RS=0; GPIOD->BSRRH |= (1<<5); //RW=0; GPIOD->BSRRH |= (1<<0); //PA=0; GPIOD->BSRRH |= (1<<1); //PA=0; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRH |= (1<<3); //PA=0; 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 GPIOD->BSRRL |= (1<<0); //PA=1; GPIOD->BSRRH |= (1<<1); //PA=0; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRH |= (1<<3); //PA=0; 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 //0x02 return home GPIOD->BSRRH |= (1<<4); //RS=0; GPIOD->BSRRH |= (1<<5); //RW=0; GPIOD->BSRRH |= (1<<0); //PA=0; GPIOD->BSRRH |= (1<<1); //PA=0; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRH |= (1<<3); //PA=0; 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 GPIOD->BSRRH |= (1<<0); //PA=0; GPIOD->BSRRL |= (1<<1); //PA=1; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRH |= (1<<3); //PA=0; 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 //0x0C display on GPIOD->BSRRH |= (1<<4); //RS=0; GPIOD->BSRRH |= (1<<5); //RW=0; GPIOD->BSRRH |= (1<<0); //PA=0; GPIOD->BSRRH |= (1<<1); //PA=0; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRH |= (1<<3); //PA=0; 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 GPIOD->BSRRH |= (1<<0); //PA=0; GPIOD->BSRRH |= (1<<1); //PA=0; GPIOD->BSRRL |= (1<<2); //PA=1; GPIOD->BSRRL |= (1<<3); //PA=1; 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 } int main () { //Taktversorgung für Port D anschalten RCC->AHB1ENR |= (1<<3); //Konfiguration für Port D 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); initDisplay(); //- 0100 1011 GPIOD->BSRRL |= (1<<4); //RS=1; GPIOD->BSRRH |= (1<<5); //RW=0; GPIOD->BSRRH |= (1<<0); //PA=0; GPIOD->BSRRL |= (1<<1); //PA=1; GPIOD->BSRRH |= (1<<2); //PA=0; GPIOD->BSRRH |= (1<<3); //PA=0; 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 GPIOD->BSRRL |= (1<<0); //PA=1; GPIOD->BSRRH |= (1<<1); //PA=0; GPIOD->BSRRL |= (1<<2); //PA=1; GPIOD->BSRRL |= (1<<3); //PA=1; 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 do { } while (1); }