ich habe folgende zur biliothek "Universal KS0108 driver library STM32 MCU low-level driver" von (c) Rados³aw Kwiecieñ, radek@dxp.pl. in dieser bibliothek wird der port GPIOE als gesamtes verwendet(d.h. alle display pins liegen auf diesem port) bei meinem eval board sind aber leider nicht alle pins ausgeführt somit habe pins von verschiedenen ports(von A bis F) in verwendung. das ist auch kein problem bei RS, RW, EN, CS1/2, RST nur bei den datenports D0-D7 fehlt es mir am wissen um den quelltext richtig zu lesen/umzuschreiben. in der KS0108-STM32.c steht #define KS0108_D0 0 und für den KS0108_Port wird GPIOE angegeben. in den c files tauchen immer wieder (shift)ausdrücke wie z.B. GPIO_InitStructure.GPIO_Pin = 0xFF << KS0108_D0; oder GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = (0xFF << KS0108_D0); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(KS0108_PORT, &GPIO_InitStructure); auf meine frage was bewirkt ein GPIO_InitStructure.GPIO_Pin = 0b11111110 bzw. wie könnte ich z.B.: GPIO_Init(KS0108_PORT, &GPIO_InitStructure); geschickt umschreiben ? im anhang findet ihr die besagte bibliothek Danke
Hallo, du kannst mit der folgenden Struktur die Portpins Konfigurieren: z.B. GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // Ausgang PushPull GPIO_InitStructure.GPIO_Pin = 0xFF << 7; //PE7..14 PIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOE, &GPIO_InitStructure); Du kannst auch GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | ... schreiben, damit Kannst Du die Portpins einzeln verodern. Ist übersichtlicher. Zum Einlesen der Pins musst Du auf "GPIO_Mode_IN_FLOATING" schalten. Gruß Florian
hallo, danke für deine antwort deine erklärung leuchtet mir ja ein, aber wieso wird bei der von mir genannten GPIO_InitStructure.GPIO_Pin = (0xFF << KS0108_D0); ein 0er hinein geschoben wozu ist das gut, da initialisiere ich ja gar keinen pin oder ? danke !
Hallo, so wie ich das verstehe steht in dem #define "KS0108_D0" eine Bitkombination, die die Pins auf dem ges. Port initialisiert. Wenn Du "GPIO_InitStructure.GPIO_Pin = 0" angibst wird keine Portpin initialisiert. Ich gehe mal davon aus, das Du das #define selber festlegen musst, je nachdem an welchen zusammenhängenden Portpins dein LCD hängt. z.B. LCD an PORTx 7..14 GPIO_InitStructure.GPIO_Pin = 0xFF << 7; //P7..P14 Gruß Florian
hallo, "Ich gehe mal davon aus, das Du das #define selber festlegen musst, je nachdem an welchen zusammenhängenden Portpins dein LCD hängt." ....weißt du was ich daran komisch finde, dass in keiner funktion ein anderer pin auftaucht als der 0er(#define KS0108_D0 0) also auch wenn ich die restl. pins per #define setzen würde greift keine der funktionen darauf zu. heißt das, das programm "arbeitet" nur mit dem pin D0 des displays ???? ...kann ich mir nicht vorstellen. deswegen meinte ich ja dass es mir an verständnis fehlt danke
Hallo, das Display arbeitet mit den 8 Datenleitungen D0 bis D7. So wie ich das sehe hängen die Datenleitungen des Displays am PORTE von Bit 0 bis Bit 7. Die Portpins 0..7 werden gleichzeitig auf lesen geschaltet und dann parallel eingelesen. Beim schreiben werden sie parallel beschrieben. Der Funktion "void GLCD_WriteData(unsigned char dataToWrite) " werden 8 Bits als char übergeben und dann mit "GPIO_SetBits(KS0108_PORT, (dataToWrite << KS0108_D0)); " auf PORTE ausgegeben. Sie werden dazu um 0 Stellen geshiftet. Wenn Du die Datenleitungen an einem anderen Port hast musst Du ev. shiften. Das sieht hier nur komisch aus, weil Du die 8 Bits um 0 shiftest. Soll eben allgemein gültig sein. Gruß Florian
servus florian, .......so wies aussieht ist gegen dummheit kein kraut gewachsen diesmal tut mein code ausnahmsweise das was er soll(hab ich mit breakpoints und Vmeter überprüft) das problem ist folgendes: mein eval board von iar wird zwar über ein 5V netzteil versorgt. nur die GPIOS geben halt nur knappe 3.3V aus und im "0815" datenblatt dieser KS0108 displays steht drinnen: Supply voltage for Logic 4.5V - 5.5V; (min)Input voltage 'H' level 0.7*VDD ......in meinem fall ist VDD knappe 6V(unstab. netzteil) 0.7*6V = 4.2V und das liegt halt doch fast 1V über den 3.3V der GPIO's ............aber wer denkt schon an solche kleinigkeiten ;+) zumind. weis ich jetzt was es mit den shifts auf sich hat !! Danke nochmal für deine tips mfg
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.