1. Hast Du den Port A mit Takt versorgt?
Code:
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
2. Wieso konfigurierst Du den Port nicht auf Push-Pull?
3. Ich empfehle Dir, das Du Dir angewöhnst, Port Pins mit Bitset (oder Bitreset) zu setzen. Deine Operation auf dem ODR ist nicht atomar, damit kannst Du also unerwünschte Nebeneffekte erzeugen, wenn andere Portpins von Port A genutzt werden. Nimm ODR nur, wenn Du den ganzen Port setzen willst.
Code:
GPIOA->BSRR |= GPIO_BSRR_BS_5;
oder
Code:
GPIOA->BSRR |= GPIO_BSRR_BR_5;

Zitat von
White_Fox
Ich kam heute mal dazu meinen code zu testen.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <stm32f446xx.h>
/*********************************************************************
*
* main()
*
* Function description
* Application entry point.
*/
void main(void) {
GPIOA->MODER |= (GPIO_MODER_MODER5_0); //A5 => Ausgang
GPIOA->OTYPER |= (GPIO_OTYPER_OT_5); //A5 0> OpenDrain
GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR5); //A5 ohne Pullup-Pulldown
printf("Einstellung fertig\n");
GPIOA->ODR |= (GPIO_ODR_ODR_5); //Ausgang A5 setzen
printf("LED gesetzt\n");
while(1){
}
}
Jetzt müßte die LED an A5 leuchten. Tut sie aber nicht. Hab ich noch was vergessen oder einen Fehler gemacht?
Wenn ich den Debugger starte, kommen die printf-Meldungen. Der J-Link ist auch verbunden. Sagt Embedded Studio. Nurdie LED tut nix, wie gesagt...
Lesezeichen