Test for SWO viewer library.

Dependencies:   SWO mbed

See here for more information.

Committer:
wim
Date:
Thu Aug 24 18:16:36 2017 +0000
Revision:
3:3d2422feccb5
Parent:
2:9c50385f83c5
Added stream claim demo for stdout, proposed by Pavel Sorejs. Added example of SWO in a function other than main.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 2:9c50385f83c5 1 /* mbed Test program for debug and monitoring of ST nucleo boards with SWO.
wim 2:9c50385f83c5 2 * Copyright (c) 2015, v01: WH, Initial version
wim 3:3d2422feccb5 3 * 2016, v02: WH, Stream support, Added F446
wim 3:3d2422feccb5 4 * 2017, v03: WH,PS. Added Stream claim for stdout, proposed by Pavel Sorejs
wim 2:9c50385f83c5 5 *
wim 2:9c50385f83c5 6 * Permission is hereby granted, free of charge, to any person obtaining a copy
wim 2:9c50385f83c5 7 * of this software and associated documentation files (the "Software"), to deal
wim 2:9c50385f83c5 8 * in the Software without restriction, including without limitation the rights
wim 2:9c50385f83c5 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
wim 2:9c50385f83c5 10 * copies of the Software, and to permit persons to whom the Software is
wim 2:9c50385f83c5 11 * furnished to do so, subject to the following conditions:
wim 2:9c50385f83c5 12 *
wim 2:9c50385f83c5 13 * The above copyright notice and this permission notice shall be included in
wim 2:9c50385f83c5 14 * all copies or substantial portions of the Software.
wim 2:9c50385f83c5 15 *
wim 2:9c50385f83c5 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
wim 2:9c50385f83c5 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
wim 2:9c50385f83c5 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
wim 2:9c50385f83c5 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
wim 2:9c50385f83c5 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
wim 2:9c50385f83c5 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
wim 2:9c50385f83c5 22 * THE SOFTWARE.
wim 2:9c50385f83c5 23 */
wim 2:9c50385f83c5 24
wim 0:de9d7358fcd0 25 #include "mbed.h"
wim 3:3d2422feccb5 26 #include "flip.h"
wim 0:de9d7358fcd0 27 #include "SWO.h"
wim 0:de9d7358fcd0 28
wim 0:de9d7358fcd0 29 //Single Wire Output(SWO) Test
wim 0:de9d7358fcd0 30 //Hook up to Host PC software ST-LINK Utility or Segger J-Link SWO viewer
wim 0:de9d7358fcd0 31 //
wim 1:3308ab077592 32 #define D_SWO 1 //Enable SWO output
wim 1:3308ab077592 33
wim 1:3308ab077592 34 //Stream implementation
wim 0:de9d7358fcd0 35
wim 3:3d2422feccb5 36 DigitalOut myled(LED1); //PA_1
wim 3:3d2422feccb5 37
wim 3:3d2422feccb5 38 //Note:
wim 3:3d2422feccb5 39 // SWO is on pin PB_3
wim 3:3d2422feccb5 40 // SWDIO is on pin PA_13
wim 3:3d2422feccb5 41 // SWCLK is on pin PA_14
wim 3:3d2422feccb5 42 //
wim 3:3d2422feccb5 43 //I2C i2c(PB_9, PB_8); //I2C, OK
wim 3:3d2422feccb5 44 //DigitalIn in(PB_3); //SWO, using pin breaks SWO viewer
wim 3:3d2422feccb5 45 //DigitalIn in(PA_10); //RX UART1, OK
wim 3:3d2422feccb5 46 //DigitalIn in(PA_13); //SWDIO, using pin breaks SWO viewer
wim 3:3d2422feccb5 47 //DigitalIn in(PA_14); //SWCLK, using pin breaks SWO viewer
wim 0:de9d7358fcd0 48
wim 0:de9d7358fcd0 49 Serial pc(SERIAL_TX, SERIAL_RX);
wim 0:de9d7358fcd0 50
wim 3:3d2422feccb5 51 SWO_Channel swo("channel");
wim 3:3d2422feccb5 52
wim 3:3d2422feccb5 53 int i;
wim 1:3308ab077592 54
wim 0:de9d7358fcd0 55 int main() {
wim 2:9c50385f83c5 56 #if defined(TARGET_NUCLEO_F103RB)
wim 2:9c50385f83c5 57 pc.printf("Hello World from ST32F103RB\n\r");
wim 2:9c50385f83c5 58 #endif
wim 3:3d2422feccb5 59 #if defined(TARGET_NUCLEO_F401RE)
wim 3:3d2422feccb5 60 pc.printf("Hello World from ST32F401RE\n\r");
wim 3:3d2422feccb5 61 #endif
wim 2:9c50385f83c5 62 #if defined(TARGET_NUCLEO_F446RE)
wim 2:9c50385f83c5 63 pc.printf("Hello World from ST32F446RE\n\r");
wim 2:9c50385f83c5 64 #endif
wim 0:de9d7358fcd0 65 // pc.printf("\r\nMy Program - build " MBED_BUILD_TIMESTAMP "\r\n");
wim 0:de9d7358fcd0 66 pc.printf("\r\nMy Program - (partial) build " __DATE__ " " __TIME__ "\r\n");
wim 0:de9d7358fcd0 67 pc.printf("CPU SystemCoreClock is %d Hz\r\n", SystemCoreClock);
wim 0:de9d7358fcd0 68
wim 0:de9d7358fcd0 69 #if (D_SWO == 1)
wim 3:3d2422feccb5 70 swo.printf("\r\nHello World from SWO\r\n");
wim 3:3d2422feccb5 71 swo.printf("CPU SystemCoreClock is %d Hz\r\n", SystemCoreClock);
wim 3:3d2422feccb5 72
wim 3:3d2422feccb5 73 printf("Message on stdout\r\n");
wim 3:3d2422feccb5 74
wim 3:3d2422feccb5 75 if (swo.claim() == true) {
wim 3:3d2422feccb5 76 pc.printf("SWO has claimed stdout\r\n");
wim 3:3d2422feccb5 77 printf("Message on stdout redirected to SWO\r\n");
wim 3:3d2422feccb5 78 }
wim 3:3d2422feccb5 79 else {
wim 3:3d2422feccb5 80 pc.printf("SWO failed to claim stdout\r\n");
wim 3:3d2422feccb5 81 }
wim 3:3d2422feccb5 82 #endif
wim 1:3308ab077592 83
wim 0:de9d7358fcd0 84 while(1) {
wim 0:de9d7358fcd0 85 myled = 1; // LED is ON
wim 0:de9d7358fcd0 86 wait(0.2); // 200 ms
wim 0:de9d7358fcd0 87 myled = 0; // LED is OFF
wim 0:de9d7358fcd0 88 wait(1.0); // 1 sec
wim 2:9c50385f83c5 89
wim 3:3d2422feccb5 90 pc.putc('*');
wim 2:9c50385f83c5 91
wim 0:de9d7358fcd0 92 #if (D_SWO == 1)
wim 3:3d2422feccb5 93 swo.putc('#');
wim 3:3d2422feccb5 94 flip(i);
wim 3:3d2422feccb5 95 i = (i+1) & 0xFF;
wim 2:9c50385f83c5 96 #endif
wim 1:3308ab077592 97 }
wim 1:3308ab077592 98 }
wim 1:3308ab077592 99