Hallo, mit dem folgenden Code möchte ich den PA0 auslesen, der an User Push-Button verbunden.Wenn der BUTTON gedruckt sollen LED3 und LED 4 mit Delay Funktion ein-ausgeschaltet werden. Komischerweise werden die LEDs ein- ausgeschaltet, wenn das RESET-Button gedruckt, und nicht wenn Das User-Button betätigt. Ich bin Anfänger, und ehrlichgesagt weiß nicht ob die Bitmaske richtig ist oder nicht. Davon bin ich ausgegangen, dass der Register von PA 0x0 ist. Erst wenn irgenwelcher Pin an Port A Signal bekommt, dann ändert sich dementsprechnd der Register PA. Da nur ein Pin betätigt wird, und zawr der nidrigste P0, dann könnte der Registr entweder 0x0 oder 0x1. Ich habe versucht den Memorymap zu verwenden, aber leider nichts verstande. Diesbezüglich hätte ich gerne eine Frage und zwar: Im Datesheet und neben dem PORT A steht 0x4001 0800. was heisst das genau? Heist dass, das dieser PA einen Speicherplatz von 0x4001 bis 0800? Kann jemand mir bitte helfen. Vielen Dank #include <stddef.h> #include "stm32f10x.h" void delayLoop() { volatile uint32_t delayCount = 1000000; while (delayCount > 0) { delayCount--; } } void GPIO_Setup () { GPIO_InitTypeDef GPIO_Inity; // PortC als Ausgang configurieren GPIO_Inity.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_Inity.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Inity.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_Inity); // PortA als Eingang configurieren GPIO_Inity.GPIO_Pin = GPIO_Pin_0; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_Inity.GPIO_Mode = GPIO_Mode_IPD; GPIO_Inity.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_Inity); } int main (void) { SystemInit(); GPIO_Setup(); uint8_t reg reg; reg = ((GPIO_ReadInputData(GPIOA))&(GPIO_Pin_0)); reg |= 0x5; if (reg == 0x5 ) { GPIOC->BSRR = GPIO_Pin_8; // LED On delayLoop(); GPIOC->BRR = GPIO_Pin_8; // LED Off delayLoop(); GPIOC->BSRR = GPIO_Pin_9; // LED On delayLoop(); GPIOC->BRR = GPIO_Pin_9; // LED Off delayLoop(); } }
salamon schrieb: > Ich bin Anfänger, und ehrlichgesagt weiß nicht ob die Bitmaske richtig > ist oder nicht. Dann solltest du Papier und Bleistift nehmen, dir eine 8 Bit Zahl binär aufschreiben, darunter deine Maske und dann selber mal bitweise die Zahl mit der Maske verodern um mal zu sehen wie das eigentlich funktioniert. Dann mal ein paar andere Zahlen binär aufschreiben und wieder händisch durch die Maske jagen. Auch mal mit einer UND-Operation probieren. So lernt es sich am schnellsten und am nachhaltigsten, wie die Sache auf Bitebene funktioniert und welche Operation man wofür nimmt. Bitmanipulation
Sehr geehrter Moderator, Ich verspreche Ihnen, Ihren Tipp zu befolgen. Aber darf ich von Ihrem Tipp ausgehen, dass der Fehler wirklich an der Bitmaske Liegt? und nicht um anders? LG.
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.