This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

STM32 UART not working

HiGuys, I have been trying for days trying to get the UART on the STM32F030R8 to work, I have following the datasheet and the reference manual step by step but it just doesn't work. Using the STM32 CubeMX I got it to work but I dont see where I am wrong. Could anyone point out my mistake. I am pasting the functions I am using to step the MCU below.

Thanks for the help.

#include <__cross_studio_io.h>
#include <stm32f30x.h>

#ifndef _HW_Init_H
#define _HW_Init_H
#endif

void Port_Init(void)
{ RCC->AHBENR |= (RCC_AHBENR_GPIOAEN ); RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN | RCC_APB2ENR_SPI1EN ; RCC->APB1ENR |= RCC_APB1ENR_USART2EN ; GPIOA -> MODER |= GPIO_MODER_MODER7_1 | GPIO_MODER_MODER5_1 | GPIO_MODER_MODER2_1 | GPIO_MODER_MODER6_1 | GPIO_MODER_MODER3_1; /* | GPIO_MODER_MODER13_1 | GPIO_MODER_MODER14_1;*/ GPIOA -> OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9 | GPIO_OSPEEDER_OSPEEDR10 | GPIO_OSPEEDER_OSPEEDR7 | GPIO_OSPEEDER_OSPEEDR3 ; GPIOA -> PUPDR |= GPIO_PUPDR_PUPDR9_0 | GPIO_PUPDR_PUPDR7_0 | GPIO_PUPDR_PUPDR10_0 ;

/*GPIOA -> MODER = GPIO_MODER_MODER7_0 ; /* so far this statement causes the CPU to freeze */

return;
}

void UART_Init(void)
{ USART2 -> BRR = 0x341; USART2 -> CR1 |= USART_CR1_UE ; USART2 -> CR1 |= USART_CR1_TE ; return;
}

void UART_SendChar(char a)
{ int TC ;

while ((USART2-> ISR & USART_ISR_TXE) == 0); USART2-> TDR = a ; return ;
}

void UART_SendString( char* data, int length )
{ int send=0 ; if ((USART2->ISR & USART_ISR_TC) == USART_ISR_TC) { USART2->TDR = data[send++]; }
}

void SPI_Init(void)
{ SPI1->CR1 = SPI_CR1_MSTR | SPI_CR1_BR_2; /* (1) */ SPI1->CR2 = SPI_CR2_SSOE | SPI_CR2_RXNEIE | SPI_CR2_FRXTH| SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0; /* (2) */ SPI1->CR1 |= SPI_CR1_SPE; /* (3) */ GPIOA -> MODER |= GPIO_MODER_MODER10_0 ;
}

void SPI_Send_Byte(char data)
{ if ((SPI1->SR & SPI_SR_TXE) == SPI_SR_TXE) /* Test Tx empty */ { /* Will inititiate 8-bit transmission if TXE */ *(uint8_t *)&(SPI1->DR) = data; while ((SPI1->SR & SPI_SR_BSY) == SPI_SR_BSY) {

} return ; }
}

char SPI_send_Stream(char stream[] , int length)
{ int stream_index = 0 ; char byte;

CLEAR_BIT(GPIOA->ODR , GPIO_ODR_10) ; while (stream_index < length ) { byte = stream[stream_index]; SPI_Send_Byte(byte); stream_index ++ ; } SET_BIT(GPIOA->ODR , GPIO_ODR_10) ;
}

void Clock_setup(void)
{ /*int check= 0 ; RCC -> CFGR |= RCC_CFGR_PLLMULL6 | RCC_CFGR_SWS_1 ;*/
}