Data transmission and reception using UART
Hi,
I am attempting bare-metal programming for UART data transmission and reception on the STM32L476RG microcontroller. After transmitting data, observed that the debug terminal is only receiving NULL characters. Please help.
Here is the code:
void SystemInit(void);
void USART2_Init(void);
void USART2_TransmitChar(char data);
uint32_t SystemCoreClock = 80000000;
void USART2_Init(void) {
RCC->APB1ENR1 |= RCC_APB1ENR1_USART2EN;
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN;
GPIOA->MODER &= ~(GPIO_MODER_MODE2 | GPIO_MODER_MODE3);
GPIOA->MODER |= GPIO_MODER_MODE2_1 | GPIO_MODER_MODE3_1;
GPIOA->AFR[0] |= (7U << (4 * 2)) | (7U << (4 * 3));
USART2->BRR = (uint16_t)(SystemCoreClock / 115200);
USART2->CR1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_UE;
NVIC_EnableIRQ(USART2_IRQn);
}
void USART2_Transmitdata(char data) {
while (!(USART2->ISR & USART_ISR_TXE_Msk));
USART2->TDR = data;
}
void USART2_IRQHandler(void){
if(USART2 -> CR1 & USART_ISR_TXE){
char temp = USART2 -> TDR;
USART2 -> TDR = temp;
while(!(USART2 -> ISR & USART_ISR_TC));
}
}
int main(void) {
USART2_Init();
char user_data[5] = "HELLO";
for (int i = 0; user_data[i] != '\0'; ++i) {
USART2_Transmitdata(user_data[i]);
}
while (1) {
USART2_Transmitdata('H');
USART2_Transmitdata('E');
USART2_Transmitdata('L');
USART2_Transmitdata('L');
USART2_Transmitdata('O');
}
}
