Simply UART communication for STM32F0 Discovery using mbed. Received char is sent back to the computer.
Dependencies: mbed
main.cpp@4:61f0ff55c75d, 2015-05-12 (annotated)
- 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?
User | Revision | Line number | New 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 | } |