Simply UART communication for STM32F0 Discovery using mbed. Received char is sent back to the computer.

Dependencies:   mbed

Committer:
Foxnec
Date:
Tue May 12 09:11:43 2015 +0000
Revision:
4:61f0ff55c75d
Parent:
3:edbb83dae353
Changes to comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
krepemar 1:2cae2115481a 1 /**********************************************************************************
krepemar 1:2cae2115481a 2 * @file main.cpp
krepemar 1:2cae2115481a 3 * @author Marta Krepelkova
krepemar 1:2cae2115481a 4 * @version V0.1
krepemar 1:2cae2115481a 5 * @date 22-March-2015
krepemar 1:2cae2115481a 6 * @brief Simply UART communication for STM32F0 Discovery kit.
krepemar 1:2cae2115481a 7 * Received character is sent back to your computer.
krepemar 1:2cae2115481a 8 ***********************************************************************************/
krepemar 1:2cae2115481a 9
krepemar 1:2cae2115481a 10 /**********************************************************************************/
krepemar 1:2cae2115481a 11 /* Table of used pins on STM32F0 Discovery kit with STM32F051R8 MCU (LQFP64) */
krepemar 1:2cae2115481a 12 /**********************************************************************************/
krepemar 1:2cae2115481a 13 /* LQFP64 pin | Discovery pin | ST Nucleo F030R8 pin | peripheral */
krepemar 1:2cae2115481a 14 /* 42 | PA_9 | PA_9 | SERIAL_TX */
krepemar 1:2cae2115481a 15 /* 43 | PA_10 | PA_10 | SERIAL_RX */
krepemar 1:2cae2115481a 16 /* 39 | PC_8 | PA_5 | LED */
krepemar 1:2cae2115481a 17 /* 40 | PC_9 | | LED */
krepemar 1:2cae2115481a 18 /**********************************************************************************/
krepemar 1:2cae2115481a 19
krepemar 1:2cae2115481a 20 /* Includes ----------------------------------------------------------------------*/
krepemar 0:0fb9dd105439 21 #include "mbed.h"
krepemar 0:0fb9dd105439 22
krepemar 1:2cae2115481a 23 /* Defines -----------------------------------------------------------------------*/
krepemar 1:2cae2115481a 24
krepemar 1:2cae2115481a 25 /* Function prototypes -----------------------------------------------------------*/
krepemar 1:2cae2115481a 26
krepemar 1:2cae2115481a 27 /* Variables ---------------------------------------------------------------------*/
Foxnec 4:61f0ff55c75d 28 char buffer[255]; // for receiving more characters from the computer
Foxnec 4:61f0ff55c75d 29 int received=0; // how many characters were received from computer
Foxnec 4:61f0ff55c75d 30 int sent=0; // how many characters were sent to computer
krepemar 1:2cae2115481a 31
krepemar 1:2cae2115481a 32 // mbed - initialization of peripherals
Foxnec 4:61f0ff55c75d 33 Serial pc(PA_9, PA_10); // initialize SERIAL_TX=PA_9, SERIAL_RX=PA_10
Foxnec 4:61f0ff55c75d 34 DigitalOut blue(PC_8); // initialize blue LED on STM32F0 discovery
Foxnec 4:61f0ff55c75d 35 DigitalOut green(PC_9); // initialize green LED on STM32F0 discovery
krepemar 0:0fb9dd105439 36
krepemar 1:2cae2115481a 37 /* Functions----------------------------------------------------------------------*/
krepemar 0:0fb9dd105439 38
krepemar 1:2cae2115481a 39 /*******************************************************************************
krepemar 1:2cae2115481a 40 * Function Name : serialRx.
Foxnec 4:61f0ff55c75d 41 * Description : Saves all received characters to the buffer.
krepemar 1:2cae2115481a 42 * Input : None
krepemar 1:2cae2115481a 43 * Output : None.
krepemar 1:2cae2115481a 44 * Return : None
krepemar 2:3f9a1eb39b79 45 *******************************************************************************/
krepemar 0:0fb9dd105439 46
krepemar 0:0fb9dd105439 47 void serialRx()
krepemar 0:0fb9dd105439 48 {
Foxnec 4:61f0ff55c75d 49 while(pc.readable()) { // while there is a character to read from the serial port.
krepemar 1:2cae2115481a 50 char c=pc.getc(); // receive the charracter
Foxnec 4:61f0ff55c75d 51 buffer[received++]=c; // save the charracter to the next place in buffer, increments number of received charactbers
krepemar 0:0fb9dd105439 52 }
krepemar 0:0fb9dd105439 53 }
krepemar 0:0fb9dd105439 54
krepemar 1:2cae2115481a 55 /***********************************************************************************
krepemar 1:2cae2115481a 56 * Function Name : main.
krepemar 1:2cae2115481a 57 * Description : Main routine.
krepemar 1:2cae2115481a 58 * Input : None.
krepemar 1:2cae2115481a 59 * Output : None.
krepemar 1:2cae2115481a 60 * Return : None.
krepemar 1:2cae2115481a 61 ***********************************************************************************/
krepemar 0:0fb9dd105439 62 int main()
krepemar 3:edbb83dae353 63 {
krepemar 3:edbb83dae353 64 //--------------------------------------
krepemar 3:edbb83dae353 65 // Hyperterminal configuration is default
krepemar 3:edbb83dae353 66 // 9600 bauds, 8-bit data, no parity
krepemar 3:edbb83dae353 67 //--------------------------------------
krepemar 3:edbb83dae353 68 // Communication settings:
krepemar 3:edbb83dae353 69 // pc.format(bits,parity,stop_bits)
krepemar 3:edbb83dae353 70 // bits: 5-8
krepemar 3:edbb83dae353 71 // parity: SerialBase::None, SerialBase::Odd, SerialBase::Even, SerialBase::Forced1, SerialBase::Forced0
krepemar 3:edbb83dae353 72 // stop_bits: 1 or 2
krepemar 3:edbb83dae353 73 // pc.baudrate(baud)
krepemar 3:edbb83dae353 74 // baud: The desired baudrate (speed)
krepemar 3:edbb83dae353 75 //--------------------------------------
krepemar 3:edbb83dae353 76 // Example for default settings:
krepemar 3:edbb83dae353 77 // pc.format(8,SerialBase::None,1);
krepemar 3:edbb83dae353 78 // pc.baud(9600);
krepemar 3:edbb83dae353 79 //--------------------------------------
krepemar 3:edbb83dae353 80
Foxnec 4:61f0ff55c75d 81 int i = 1; // increments every second
krepemar 1:2cae2115481a 82 pc.printf("Program started !\r\n"); // text displayed on a computer
Foxnec 4:61f0ff55c75d 83 pc.attach(&serialRx,Serial::RxIrq); // Attach a function serialRx to be called whenever a serial interrupt is generated
krepemar 0:0fb9dd105439 84 while(1) {
krepemar 1:2cae2115481a 85 while(sent<received) { // while the number of received characters is greater than the number of sent characters
krepemar 1:2cae2115481a 86 pc.printf("Received char: %c (%d).\r\n", buffer[sent],(int)buffer[sent]); // send the character and the character number
krepemar 1:2cae2115481a 87 blue = !blue; // indicate this by LED - inverse value of blue LED
krepemar 1:2cae2115481a 88 sent++; // increment number of sent charracters
krepemar 1:2cae2115481a 89 if(sent>received) { // if it sent all characters
krepemar 1:2cae2115481a 90 received=0; // number of received charracters is 0
krepemar 1:2cae2115481a 91 sent=0; // number of sent charracters is 0
krepemar 1:2cae2115481a 92 }
krepemar 0:0fb9dd105439 93 }
krepemar 1:2cae2115481a 94 wait(1); // wait 1 second
krepemar 1:2cae2115481a 95 pc.printf("This program runs since %d seconds.\r\n", i++); // sends how long is the program running
krepemar 1:2cae2115481a 96 green = !green; // inverse value of green LED
krepemar 0:0fb9dd105439 97 }
krepemar 1:2cae2115481a 98 }