/* Name: Schieder Fabian Datum: 21.01.2026 Datei: ProtConfig.c Hardware: MDDS Funktionsbeschreibung: Die Ports PA0 bis PA7 sollen als Ausgänge konfiguriert werden. Der Port PC0 soll als Eingang pull up konfiguriert werden. */ #include "stm32f10x.h" int var_C = 0; int var_B = 0; int var_output = 0; void PortConfig(void); int main(void) { PortConfig(); while(1) { var_C = GPIOC->IDR; // IDR von Port C0 - C15 in var_C kopiert var_B = GPIOB->IDR; // IDR von Port B0 - B15 in var_B kopiert var_output = GPIOC->IDR &= 0b00001111; // PC0 - PC3 vom IDR Port C in var_output kopiert var_C = (var_C >> 8); // 8 mal Schiebebefehl nach rechts, so wird das Bit 13 nach 5, und 12 nach 4 geschoben var_C &= 0b00110000; // nur PC4 und PC5 werden berücksichtigt var_output |= var_C; // PC4 und PC5 werden in var_output geändert var_B &= 0b11000000; // nur PB6 und PB7 werden berücksichtigt var_output |= var_B; // PB6 und PB7 werden in der var_output geändert GPIOA->ODR = var_output; // GPIOA->ODR = GPIOC->IDR &= 0x00000001; } } //Funktion PortConfig void PortConfig(void) { //RCC->APB2ENR |= 0x00000004; // alternative, Bit2 auf 1 RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // Takt für Port A verbunden RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // Takt für Port B verbunden RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // Takt für Port C verbunden GPIOA->CRL &= 0x00000000; // Register löschen GPIOA->CRL |= 0x22222222; // Port A0 bis A7 Output 2MHz push pull GPIOC->CRL &= 0xFFFF0000; // 4 Bits für PC0 - PC3 löschen, der Rest bleibt erhalten GPIOC->CRL |= 0x00008888; // PC0 - PC3 als input konfiguriert GPIOC->CRH &= 0xFF00FFFF; // PC12 und PC13 auf 0 setzten GPIOC->CRH |= 0x00880000; // PC12 und 13 als input konfiguriert GPIOB->CRL &= 0x00FFFFFF; // PB6 und PC7 auf 0 gesetzt. GPIOB->CRL |= 0x88000000; // PB6 und PB7 als input GPIOC->ODR = 0x300F; // Pull up für PC0 - PC3 und PC12 und PC13 einschalten GPIOB->ODR = 0x00C0; // Pull up für PB6 und PB7 einschalten }