Hallo ihr Lieben,
ich versuche einen STM32F303RE über eine Touch-Platine anzusteuern.
Als Ausgabe habe ich zur Kontrolle erst mal ein paar LEDs verwendet.
Das funktioniert auch manchmal. Manchmal allerdings nicht.
Nun habe ich das ganze Gedöns mal an ein Oszilloskop gehangen und siehe
da:
Wenn kein Touch gedrückt (oder berührt) wird, dann zeigt der Ausgang
ganz brav 0V an.
Wenn ich jetzt aber den Eingang durch Berührung aktiviere, dann soll der
Ausgang eigentlich auf eine positive Spannung springen und diese halten.
Leider schwankt der Ausgang aber (in ca. 1 min) zwischen -0,25V (ca.
40s) und 2,5V (ca. 20s mit relativ flachem An- bzw. Abstieg).
Hat jemand ne Idee woran das liegen könnte?
Hier mein Code:
RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOCEN |
RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIODEN; //Takt fuer Port A und Port C
GPIOA->MODER |= 0x01414040; //Ausgang
GPIOB->MODER |= 0x50150010; //Ausgang
GPIOC->MODER |= 0x00455100; //Ausgang
GPIOD->MODER |= 0x00000010; //Ausgang
//Touch Aktivierung:
GPIOA->MODER |= 0x08282A2A; //alternate funktion mode
GPIOA->OTYPER |= 0x2677; //open drain
TSC->CR |= 0b1; //Touch sensing Controller Enable
TSC->IOSCR |= 0x007777777; //sampling capacitor
TSC->IOCCR |=0x00777777; //used channel
TSC->IOHCR |= 0b1 << 4; //Schmitt Trigger
//TESTEN MIT LEDs
for(;;){
if((GPIOA->IDR & (1 << 13)) ==0)
GPIOA->ODR |= (1 << 7);
else GPIOA->ODR &= ~(1 << 7);
if((GPIOA->IDR & (1 << 5)) ==0)
GPIOC->ODR |= (1 << 6);
else GPIOC->ODR &= ~(1 << 6);
if((GPIOA->IDR & (1 << 0)) ==0)
GPIOC->ODR |= (1 << 4);
else GPIOC->ODR &= ~(1 << 4);
if((GPIOA->IDR & (1 << 1)) ==0)
GPIOB->ODR |= (1 << 9);
else GPIOB->ODR &= ~(1 << 9);
if((GPIOA->IDR & (1 << 6)) ==0)
GPIOA->ODR |= (1 << 12);
else GPIOA->ODR &= ~(1 << 12);
if((GPIOA->IDR & (1 << 9)) ==0)
GPIOB->ODR |= (1 << 8);
else GPIOB->ODR &= ~(1 << 8);
if((GPIOA->IDR & (1 << 10)) ==0)
GPIOC->ODR |= (1 << 9);
else GPIOC->ODR &= ~(1 << 9);
if((GPIOA->IDR & (1 << 2)) ==0)
GPIOB->ODR |= (1 << 2);
else GPIOB->ODR &= ~(1 << 2);
}
}