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 Zitat von White_Fox Beitrag anzeigen
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...