Portconfig/PortConfig.c
2026-02-25 15:48:08 +01:00

71 lines
2.3 KiB
C

/*
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
}