Test program for SoftSerial. TimerEvent function has bug for STM32 series Mbed. FRDM-64K works well without bug. This is a temporary solution avoid bug but not perfect.

Dependencies:   BufferedSoftSerial

Committer:
kenjiArai
Date:
Tue May 12 05:44:33 2020 +0000
Revision:
1:7fe8da827212
expand for several CPU's

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 1:7fe8da827212 1 /*
kenjiArai 1:7fe8da827212 2 * Mbed Application program
kenjiArai 1:7fe8da827212 3 * SoftSerial(also BufferedSoftSerial) function test programs
kenjiArai 1:7fe8da827212 4 * UART 2 channels
kenjiArai 1:7fe8da827212 5 * (1) Mbed Serial communication line as "pc"
kenjiArai 1:7fe8da827212 6 * (2) Software Serial channel as "dev"
kenjiArai 1:7fe8da827212 7 *
kenjiArai 1:7fe8da827212 8 * Copyright (c) 2020 Kenji Arai / JH1PJL
kenjiArai 1:7fe8da827212 9 * http://www7b.biglobe.ne.jp/~kenjia/
kenjiArai 1:7fe8da827212 10 * https://os.mbed.com/users/kenjiArai/
kenjiArai 1:7fe8da827212 11 * Created: May 9th, 2020
kenjiArai 1:7fe8da827212 12 * Revised: May 12th, 2020
kenjiArai 1:7fe8da827212 13 */
kenjiArai 1:7fe8da827212 14
kenjiArai 1:7fe8da827212 15 /*
kenjiArai 1:7fe8da827212 16 Tested board on OS5.15.3
kenjiArai 1:7fe8da827212 17 Nucleo-L152RE,
kenjiArai 1:7fe8da827212 18 Nucleo-F401RE, -F411RE, -F446RE,
kenjiArai 1:7fe8da827212 19 Nucleo-L432KC, -L476RG
kenjiArai 1:7fe8da827212 20 FRDM-K64F
kenjiArai 1:7fe8da827212 21
kenjiArai 1:7fe8da827212 22 CAUTION!!
kenjiArai 1:7fe8da827212 23 Due to bug inside TimerEvent, not stable on STM32 series Mbed
kenjiArai 1:7fe8da827212 24 at this moment.
kenjiArai 1:7fe8da827212 25 FRDM-K40 works fine(no trouble TimerEvent function).
kenjiArai 1:7fe8da827212 26 */
kenjiArai 1:7fe8da827212 27
kenjiArai 1:7fe8da827212 28 // Include --------------------------------------------------------------------
kenjiArai 1:7fe8da827212 29 #include "mbed.h"
kenjiArai 1:7fe8da827212 30 #include "BufferedSoftSerial.h"
kenjiArai 1:7fe8da827212 31
kenjiArai 1:7fe8da827212 32 // Definition -----------------------------------------------------------------
kenjiArai 1:7fe8da827212 33 #define BAUD 9600
kenjiArai 1:7fe8da827212 34 //#define BAUD 14400
kenjiArai 1:7fe8da827212 35 //#define BAUD 19200 // No continuous transmission
kenjiArai 1:7fe8da827212 36 //#define BAUD 38400 // NOT SUCCESS!!
kenjiArai 1:7fe8da827212 37
kenjiArai 1:7fe8da827212 38 // Constructor ----------------------------------------------------------------
kenjiArai 1:7fe8da827212 39 #if defined(TARGET_NUCLEO_L432KC)
kenjiArai 1:7fe8da827212 40 DigitalOut test_point(D12);
kenjiArai 1:7fe8da827212 41 Serial ser(D5, D4, BAUD);
kenjiArai 1:7fe8da827212 42 BufferedSoftSerial dev(D6,D3);
kenjiArai 1:7fe8da827212 43 #else
kenjiArai 1:7fe8da827212 44 DigitalOut test_point(A0);
kenjiArai 1:7fe8da827212 45 BufferedSoftSerial dev(D4,D3);
kenjiArai 1:7fe8da827212 46 #endif
kenjiArai 1:7fe8da827212 47 Serial pc(USBTX,USBRX, BAUD);
kenjiArai 1:7fe8da827212 48
kenjiArai 1:7fe8da827212 49 // RAM ------------------------------------------------------------------------
kenjiArai 1:7fe8da827212 50
kenjiArai 1:7fe8da827212 51 // ROM / Constant data --------------------------------------------------------
kenjiArai 1:7fe8da827212 52
kenjiArai 1:7fe8da827212 53 // Function prototypes --------------------------------------------------------
kenjiArai 1:7fe8da827212 54 void pc2dev(void const *args);
kenjiArai 1:7fe8da827212 55 void dev2pc(void const *args);
kenjiArai 1:7fe8da827212 56
kenjiArai 1:7fe8da827212 57 //------------------------------------------------------------------------------
kenjiArai 1:7fe8da827212 58 // Control Program
kenjiArai 1:7fe8da827212 59 //------------------------------------------------------------------------------
kenjiArai 1:7fe8da827212 60 osThreadDef(pc2dev, osPriorityNormal,1024);
kenjiArai 1:7fe8da827212 61 osThreadDef(dev2pc, osPriorityNormal,1024);
kenjiArai 1:7fe8da827212 62
kenjiArai 1:7fe8da827212 63 int main()
kenjiArai 1:7fe8da827212 64 {
kenjiArai 1:7fe8da827212 65 dev.baud(BAUD);
kenjiArai 1:7fe8da827212 66 // Start tasks
kenjiArai 1:7fe8da827212 67 osThreadCreate(osThread(pc2dev), NULL);
kenjiArai 1:7fe8da827212 68 osThreadCreate(osThread(dev2pc), NULL);
kenjiArai 1:7fe8da827212 69 while(true) {
kenjiArai 1:7fe8da827212 70 ThisThread::sleep_for(1000000);
kenjiArai 1:7fe8da827212 71 }
kenjiArai 1:7fe8da827212 72 }
kenjiArai 1:7fe8da827212 73
kenjiArai 1:7fe8da827212 74 void pc2dev(void const *args)
kenjiArai 1:7fe8da827212 75 {
kenjiArai 1:7fe8da827212 76 pc.printf("\r\nStart program\r\n");
kenjiArai 1:7fe8da827212 77 while(true) {
kenjiArai 1:7fe8da827212 78 if (pc.readable()) {
kenjiArai 1:7fe8da827212 79 dev.putc(pc.getc());
kenjiArai 1:7fe8da827212 80 } else {
kenjiArai 1:7fe8da827212 81 ThisThread::yield();
kenjiArai 1:7fe8da827212 82 }
kenjiArai 1:7fe8da827212 83 }
kenjiArai 1:7fe8da827212 84 }
kenjiArai 1:7fe8da827212 85
kenjiArai 1:7fe8da827212 86 void dev2pc(void const *args)
kenjiArai 1:7fe8da827212 87 {
kenjiArai 1:7fe8da827212 88 dev.printf("\r\nStart program\r\n");
kenjiArai 1:7fe8da827212 89 while(true) {
kenjiArai 1:7fe8da827212 90 if (dev.readable()) {
kenjiArai 1:7fe8da827212 91 pc.putc(dev.getc());
kenjiArai 1:7fe8da827212 92 } else {
kenjiArai 1:7fe8da827212 93 ThisThread::yield();
kenjiArai 1:7fe8da827212 94 }
kenjiArai 1:7fe8da827212 95 }
kenjiArai 1:7fe8da827212 96 }