Gast
#2260950
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(); } }