#ifndef USART_H_ #define USART_H_ #include struct usart { volatile uint32_t SR; // Status register volatile uint32_t DR; // Data register volatile uint32_t BRR; // Baud rate register volatile uint32_t CR1; // Control register 1 volatile uint32_t CR2; // Control register 2 volatile uint32_t CR3; // Control register 3 volatile uint32_t GTPR; // Guard time and prescaler registe }; #define USART2_BASE_ADDR (0x40004400U) #define USART2 ((struct usart *) USART2_BASE_ADDR) // SR Register // Transmission data register empty #define USART_SR_TXE_BIT 7 #define USART_SR_TXE_TRANSMITTED (1 << USART_SR_TXE_BIT) // Read data register not empty #define USART_SR_RXNE_BIT 5 #define USART_SR_RXNE_READY (1 <