UART basic TX with nucleo L053R8
Hello there,
I've been stuck for hours on setting up a simple UART transmission of the character 'A' on my
Nucleo L053R8 Board.
Thing is, my oscilloscope does not show anything on my PA2 pin. It should be HIGH in idle state though.
Am I missing something, because this is a low power board and it needs special configuration?
My other fear is that I'm missing some linking options, since I'm not using HAL libaries and have configured
it myself. I've checked the registers like 100 times. Both pins PA2 and P3 are configured for AF4, just
as the datasheet says.
So here is my reduced code:
#include <stdint.h>
#include <ctype.h>
#include <stm32l053xx.h>
void UART2_Transmit(char data) {
while ((USART2->ISR & (1<<7)) == 0) {
}
USART2->TDR = data; // Write the character to the TDR register for transmission
}
int main(void){
/*Initialisierung GPIO + Takt*/
RCC->IOPENR |= RCC_IOPENR_GPIOAEN; // Anders auf diesem STM32 sonst AHBENR
RCC->IOPENR |= RCC_IOPENR_GPIOBEN; // Takt B Enable
RCC->IOPENR |= RCC_IOPENR_GPIOCEN; // Takt C Enable
GPIOA->MODER = 0xE8000000; //alles auf 0 bis auf PA13 und PA14, damit debugger tut
GPIOA->MODER |= (1 << 5); // PA3 als AF setzbar machen RX
GPIOA->MODER |= (1 << 7); // Setzt PA2 Alternate Function mode,
GPIOA->AFR[0] |= (1 << 14); // und PA3 AF setzen
GPIOA->AFR[0] |= (1 << 10); // PA2 als AF setzen
RCC->APB1ENR |= RCC_APB1ENR_USART2EN; // Takt USART enable
#define UART1_BAUD_RATE 9600
#define SYSTEM_TAKT 8000000
USART2->BRR = 833; // Baudrate setzen
USART2->CR1 = USART_CR1_UE | USART_CR1_RE | USART_CR1_TE;
for(;;){
UART2_Transmit('A');
UART2_Transmit('B');
UART2_Transmit('C');
}
}
My debugger does show that TDR is getting the correct values though, so
USART2 is definitely up and running.
Any help is highly appreciated.
