Serial communications on the STM32F0Discovery

This example demonstrates the use of the UART with the STM32F0Discovery board. The example outputs a startup messages and echos back any line of text you enter. The example uses interrupt driven serial input/output.
The layout for the circuit is shown below
layout
As you can see you need to use a USB to 3.3V serial converter which relays communications between a terminal application on your PC and the ‘Discovery board. These can be bought for as little as €3 online if you shop around. I use one from dx.com but you will find them on lots of other sites.
The main body of the code looks like this:

#include "stm32f05xxx.h"
#include <stdio.h>
void delay(int dly)
{
	while( dly--);
}
char UserInput[10];
int main()
{
	int i=0;
	initUART(9600);
	while(1) {
	  eputs("Hello World\n");  
	  egets(UserInput,10);
	  eputs("You entered : ");
	  eputs(UserInput);
	  eputs("\n");
	  delay(100000);
	}
	return 0;
}
 

The UART is initialized to run at 9600bps. Following this an endless while loop is entered which calls on two communications functions: eputs and egets. These functions behave just like puts and gets in a text based PC application. The function eputs outputs a given string to the UART while egets reads a string up to a maximum size from the terminal. Input is completed when the user presses Enter.

The serial communications functions are all implemented in a file called serial.c. This file contains the following functions:

    High level I/O functions

eputs -> Write a string to the serial port
egets -> Get a string from the serial port

    Intermediate level I/O functions

WriteCom -> Write bytes to the transmit circular buffer
ReadCom -> Read bytes from the receive circular buffer
PutBuf -> Put a byte into a circular buffer
GetBuf -> Get a byte from a circular buffer
GetBufCount -> Get the number of bytes in a circular buffer

    Low level UART functions

initUART -> Configure I/O pins and the USART hardware to run at the specified baud rate. Transmit and receive circular buffers are initialized.
isr_usart2 -> Interrupt service routine for USART2
usart_tx -> This function handles a transmit interrupt. If sends the next byte in the transmit circular buffer. If there are no bytes left to send it disables the transmitter.
usart_tx -> This function handles a receive interrupt. It places the received byte into the receive circular buffer. If the buffer is full it sets a global error flag.

Source code may be downloaded from here

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s