AnsweredAssumed Answered

STM32F0308 USART set up

Question asked by Tom Power on Aug 23, 2017
Latest reply on Aug 24, 2017 by Clive One

Hi, 

 

I am having trouble getting some basic USART up and running on the STM32F0308-DISCO board. I have tried both sending and receiving and don't seem to see anything coming through on either end. My code is as follows:

 

Thanks in advance.

 

#include "stm32f0xx.h"
#include "string.h"


#define BSRR_VAL 0x0300


void usart_init( void );

/*-----------------------------------------------------------------------------*/
void usart_init( void )
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOB, ENABLE );
RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1, ENABLE );

 

/* Configure USART2 pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init( GPIOB, &GPIO_InitStructure );

GPIO_PinAFConfig( GPIOB, GPIO_PinSource8, GPIO_AF_1 );
GPIO_PinAFConfig( GPIOB, GPIO_PinSource9, GPIO_AF_1 );

 

/* Config USART */
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init( USART1, &USART_InitStructure );

USART_Cmd( USART1, ENABLE );
}

 

/*-----------------------------------------------------------------------------*/

 

void output_init( void )
{
RCC_AHBPeriphClockCmd( RCC_AHBPeriph_GPIOC, ENABLE );

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_StructInit( &GPIO_InitStructure );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init( GPIOC, &GPIO_InitStructure );
}


/*-----------------------------------------------------------------------------*/

int main(void)
{

 

 

output_init();
usart_init();
while (1)
{
//usart_send_str( "moving to 180" );
//while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
//USART_SendData( USART1, (uint8_t)'X' );

while ( USART_GetFlagStatus( USART1, USART_FLAG_RXNE) == RESET );

char ch = (char)USART_ReceiveData( USART1 );
if ( ch == 'o' )
GPIOC->BSRR = BSRR_VAL;
else if ( ch == 'f' )
GPIOC->BRR = BSRR_VAL;
}
}

Outcomes