diff --git a/boards/hifive1/Makefile.features b/boards/hifive1/Makefile.features index b6af1780822dfd336dc5773cc0b142f7c56ae10b..289f037b4a5c69ef17907ff8594fe1ee664d4a01 100644 --- a/boards/hifive1/Makefile.features +++ b/boards/hifive1/Makefile.features @@ -1,6 +1,7 @@ # Put defined MCU peripherals here (in alphabetical order) +FEATURES_PROVIDED += periph_cpuid FEATURES_PROVIDED += periph_gpio -FEATURES_PROVIDED += periph_pwm +#FEATURES_PROVIDED += periph_pwm FEATURES_PROVIDED += periph_rtc FEATURES_PROVIDED += periph_rtt #FEATURES_PROVIDED += periph_spi diff --git a/boards/hifive1/board.c b/boards/hifive1/board.c index 98b0e914605f0bfb177e77c8b1c6dc30ba9edd64..78b588504eb151dc7d49e3defe71187d012cd6b0 100644 --- a/boards/hifive1/board.c +++ b/boards/hifive1/board.c @@ -7,11 +7,11 @@ */ /** - * @ingroup boards_hifive HiFive1 + * @ingroup boards_hifive * @{ * * @file - * @brief Support for the HiFive1 RISC-V board + * @brief Support for the SiFive HiFive1 RISC-V board * * @author Ken Rabold, JP Bonn * diff --git a/boards/hifive1/include/board.h b/boards/hifive1/include/board.h index 76134a9b019299f82012d12dc10a3f48b343b1c7..278a8d778c712de4275aa4cbdd503e8bdb5ef3b1 100644 --- a/boards/hifive1/include/board.h +++ b/boards/hifive1/include/board.h @@ -7,13 +7,13 @@ */ /** - * @defgroup boards_hifive + * @defgroup boards_hifive SiFive HiFive1 RISC-V board * @ingroup boards - * @brief Support for the HiFive1 RISC-V board + * @brief Support for the SiFive HiFive1 RISC-V board * @{ * * @file - * @brief Board specific definitions for the HiFive1 RISC-V board + * @brief Board specific definitions for the SiFive HiFive1 RISC-V board * * @author Ken Rabold */ @@ -46,6 +46,7 @@ extern "C" { #define LED2_ON gpio_clear(LED2_PIN) #define LED2_OFF gpio_set(LED2_PIN) #define LED2_TOGGLE gpio_toggle(LED2_PIN) +/** @} */ /** * @brief Initialize board specific hardware, including clock, LEDs and std-IO @@ -54,8 +55,6 @@ void board_init(void); /** * @brief Initialize the board clock to use PLL and faster SPI access. - * @detail This must be done before UART initialization. RIOT assumes - * newlib initializes the UART in the _init() routine. */ void board_init_clock(void); diff --git a/boards/hifive1/include/periph_conf.h b/boards/hifive1/include/periph_conf.h index 6c595300aca597a0fafd2f4a150be22d21aea2c9..e0dd67612199c96065e46317beb0cf303aae665e 100644 --- a/boards/hifive1/include/periph_conf.h +++ b/boards/hifive1/include/periph_conf.h @@ -7,9 +7,7 @@ */ /** - * @defgroup boards_hifive HiFive1 - * @ingroup boards - * @brief Support for the HiFive1 RISC-V board + * @ingroup boards_hifive * @{ * * @file diff --git a/cpu/fe310/Makefile.include b/cpu/fe310/Makefile.include index e3afe4befc0c61b2d59d3eeb1f22846b4be11adb..564abaa5b32207d7b18709aa8ddf692d6bb7c954 100644 --- a/cpu/fe310/Makefile.include +++ b/cpu/fe310/Makefile.include @@ -7,4 +7,6 @@ USEMODULE += sifive_drivers_fe310 USEMODULE += periph USEMODULE += periph_pm +CFLAGS += -Wno-pedantic + include $(RIOTMAKE)/arch/riscv.inc.mk diff --git a/cpu/fe310/context_frame.c b/cpu/fe310/context_frame.c index e1b2a81bd9f12b0a3c6c4db2602e58df22610f65..4aa644815022e13cd2243814d30146623b7dbb0f 100644 --- a/cpu/fe310/context_frame.c +++ b/cpu/fe310/context_frame.c @@ -1,4 +1,3 @@ - /* * Copyright (C) 2017 JP Bonn * @@ -41,8 +40,7 @@ static void check_context_switch_frame_alignment(void) "Stack pointer should be 16 byte aligned"); _Static_assert(sizeof(struct context_switch_frame) == CONTEXT_FRAME_SIZE, "context_switch_frame size mismatch"); - CHECK_OFFSET(filler0); - CHECK_OFFSET(filler1); + CHECK_OFFSET(pad); CHECK_OFFSET(pc); CHECK_OFFSET(s0); CHECK_OFFSET(s1); diff --git a/cpu/fe310/include/context_frame.h b/cpu/fe310/include/context_frame.h index e8fc29210ddab3e16a8308b2a70cb440268ea660..49c65d5ed55a6bd52292580830cf1bf14bc28c45 100644 --- a/cpu/fe310/include/context_frame.h +++ b/cpu/fe310/include/context_frame.h @@ -1,4 +1,3 @@ - /* * Copyright (C) 2017 JP Bonn * @@ -8,9 +7,7 @@ */ /** - * @defgroup cpu_fe310 - * @ingroup cpu - * @brief Freedom E cpu + * @ingroup cpu_fe310 * @{ * * @file @@ -32,59 +29,61 @@ extern "C" { #endif +#if !defined(__ASSEMBLER__) + /** - * @brief context_switch_frame stores the registers and PC for a context switch. + * @brief Stores the registers and PC for a context switch. * * This also defines context_switch_frame offsets for assembly language. The * structure is sized to maintain 16 byte stack alignment per the ABI. * https://github.com/riscv/riscv-elf-psabi-doc * */ -#if !defined(__ASSEMBLER__) - -/* N.B.: update the definitions below if this changes */ struct context_switch_frame { - uint32_t filler0; /* filler to maintain 16 byte alignment */ - uint32_t filler1; /* filler to maintain 16 byte alignment */ - uint32_t pc; + uint32_t pad[2]; /**< padding to maintain 16 byte alignment */ + uint32_t pc; /**< program counter */ /* Callee saved registers */ - uint32_t s0; - uint32_t s1; - uint32_t s2; - uint32_t s3; - uint32_t s4; - uint32_t s5; - uint32_t s6; - uint32_t s7; - uint32_t s8; - uint32_t s9; - uint32_t s10; - uint32_t s11; - /* Caller saved register */ - uint32_t ra; - uint32_t tp; - uint32_t t0; - uint32_t t1; - uint32_t t2; - uint32_t t3; - uint32_t t4; - uint32_t t5; - uint32_t t6; - uint32_t a0; - uint32_t a1; - uint32_t a2; - uint32_t a3; - uint32_t a4; - uint32_t a5; - uint32_t a6; - uint32_t a7; + uint32_t s0; /**< s0 register */ + uint32_t s1; /**< s1 register */ + uint32_t s2; /**< s2 register */ + uint32_t s3; /**< s3 register */ + uint32_t s4; /**< s4 register */ + uint32_t s5; /**< s5 register */ + uint32_t s6; /**< s6 register */ + uint32_t s7; /**< s7 register */ + uint32_t s8; /**< s8 register */ + uint32_t s9; /**< s9 register */ + uint32_t s10; /**< s10 register */ + uint32_t s11; /**< s11 register */ + /* Caller saved registers */ + uint32_t ra; /**< ra register */ + uint32_t tp; /**< tp register */ + uint32_t t0; /**< t0 register */ + uint32_t t1; /**< t1 register */ + uint32_t t2; /**< t2 register */ + uint32_t t3; /**< t3 register */ + uint32_t t4; /**< t4 register */ + uint32_t t5; /**< t5 register */ + uint32_t t6; /**< t6 register */ + uint32_t a0; /**< a0 register */ + uint32_t a1; /**< a1 register */ + uint32_t a2; /**< a2 register */ + uint32_t a3; /**< a3 register */ + uint32_t a4; /**< a4 register */ + uint32_t a5; /**< a5 register */ + uint32_t a6; /**< a6 register */ + uint32_t a7; /**< a7 register */ }; + #endif /* __ASSEMBLER__ */ +/** + * @name Register offsets + * @{ + */ /* These values are checked for correctness in context_frame.c */ -#define filler0_OFFSET 0 -#define filler1_OFFSET 4 +#define pad_OFFSET 0 #define pc_OFFSET 8 #define s0_OFFSET 12 #define s1_OFFSET 16 @@ -115,9 +114,16 @@ struct context_switch_frame { #define a5_OFFSET 116 #define a6_OFFSET 120 #define a7_OFFSET 124 +/** @} */ +/** + * @brief Size of context switch frame + */ #define CONTEXT_FRAME_SIZE (a7_OFFSET + 4) +/** + * @brief Offset of stack pointer in struct _thread + */ #define SP_OFFSET_IN_THREAD 0 diff --git a/cpu/fe310/include/cpu.h b/cpu/fe310/include/cpu.h index 0da3944f65f61184b0954548f45a3b557e57fa0e..eed309e4596e5029f0d83af66a54f59ce82ebcbf 100644 --- a/cpu/fe310/include/cpu.h +++ b/cpu/fe310/include/cpu.h @@ -7,7 +7,7 @@ */ /** - * @defgroup cpu_fe310 + * @defgroup cpu_fe310 SiFive FE310 * @ingroup cpu * @brief Common implementations and headers for RISC-V * @{ diff --git a/cpu/fe310/include/cpu_conf.h b/cpu/fe310/include/cpu_conf.h index 0bf6bfbc06724c65691233c220eac9a7e9f794db..4023b007982c416a27bd844181919982933feea8 100644 --- a/cpu/fe310/include/cpu_conf.h +++ b/cpu/fe310/include/cpu_conf.h @@ -7,9 +7,7 @@ */ /** - * @defgroup cpu_fe310 - * @ingroup cpu - * @brief CPU specific implementations for the SiFive FE310 cpu + * @ingroup cpu_fe310 * @{ * * @file @@ -21,6 +19,10 @@ #ifndef CPU_CONF_H #define CPU_CONF_H +/** + * @name Configuration of default stack sizes + * @{ + */ #ifndef THREAD_EXTRA_STACKSIZE_PRINTF #define THREAD_EXTRA_STACKSIZE_PRINTF (256) #endif @@ -30,6 +32,7 @@ #ifndef THREAD_STACKSIZE_IDLE #define THREAD_STACKSIZE_IDLE (256) #endif +/** @} */ #ifdef __cplusplus extern "C" { diff --git a/cpu/fe310/nano/nanostubs.c b/cpu/fe310/nano/nanostubs.c index f68ddffce00c8e74dbdb035e0a3e529164ec1705..0a230622ca490314afea850de43f394da632fac0 100644 --- a/cpu/fe310/nano/nanostubs.c +++ b/cpu/fe310/nano/nanostubs.c @@ -148,3 +148,30 @@ _off_t _lseek(int fd, _off_t pos, int dir) errno = ENODEV; return -1; } + +int _gettimeofday(struct timeval *tp, void *tzp) +{ + (void) tp; + (void) tzp; + errno = EINVAL; + return -1; +} + +int _getpid(void) +{ + return thread_getpid(); +} + +int _kill(int pid, int sig) +{ + (void) pid; + (void) sig; + errno = EINVAL; + return -1; +} + +void _exit(int _status) +{ + (void) _status; + while(1); +} diff --git a/cpu/fe310/periph/cpuid.c b/cpu/fe310/periph/cpuid.c index ce9ba9b1efde03fecafd7940c1a3838248f5bd5c..bd97ee415f10db03d2f92130c347c3e9404471a2 100644 --- a/cpu/fe310/periph/cpuid.c +++ b/cpu/fe310/periph/cpuid.c @@ -22,8 +22,8 @@ #include "periph/cpuid.h" #include "cpu.h" -#include "sifive/encoding.h" -#include "sifive/platform.h" +#include "vendor/encoding.h" +#include "vendor/platform.h" void cpuid_get(void *id) { diff --git a/examples/dtls-echo/Makefile b/examples/dtls-echo/Makefile index b7218655a3e57f0e2015a592301c871c77513db2..4471157df275787b1ed7462a625176ca14f409e0 100644 --- a/examples/dtls-echo/Makefile +++ b/examples/dtls-echo/Makefile @@ -13,7 +13,7 @@ BOARD_BLACKLIST := arduino-duemilanove arduino-mega2560 arduino-uno chronos \ z1 jiminy-mega256rfr2 mega-xplained BOARD_INSUFFICIENT_MEMORY := airfy-beacon b-l072z-lrwan1 bluepill calliope-mini \ - cc2650-launchpad cc2650stk maple-mini \ + cc2650-launchpad cc2650stk hifive1 maple-mini \ microbit nrf51dongle nrf6310 nucleo-f031k6 \ nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 nucleo-f030r8 \ nucleo-f070rb nucleo-f072rb nucleo-f103rb nucleo-f302r8 nucleo-f334r8 \ diff --git a/examples/emcute_mqttsn/Makefile b/examples/emcute_mqttsn/Makefile index c963f3511fdd51a38b9d5ca55ee4d56d23d28905..d257136119fed13f285ab35d9e72d340c73ab555 100644 --- a/examples/emcute_mqttsn/Makefile +++ b/examples/emcute_mqttsn/Makefile @@ -8,7 +8,7 @@ BOARD ?= native RIOTBASE ?= $(CURDIR)/../.. BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \ - chronos msb-430 msb-430h nucleo-f031k6 nucleo-f042k6 \ + chronos hifive1 msb-430 msb-430h nucleo-f031k6 nucleo-f042k6 \ nucleo-f303k8 nucleo-l031k6 nucleo-f030r8 nucleo-f070rb \ nucleo-f072rb nucleo-f302r8 nucleo-f334r8 nucleo-l053r8 \ stm32f0discovery telosb waspmote-pro wsn430-v1_3b \ diff --git a/examples/gnrc_border_router/Makefile b/examples/gnrc_border_router/Makefile index 0aa938f41fa4c14334f3f3712e8107705138cc86..4ae9ef4166eb6709ff59ae01b2ddeb7a74609106 100644 --- a/examples/gnrc_border_router/Makefile +++ b/examples/gnrc_border_router/Makefile @@ -8,7 +8,7 @@ BOARD ?= samr21-xpro RIOTBASE ?= $(CURDIR)/../.. BOARD_INSUFFICIENT_MEMORY := airfy-beacon b-l072z-lrwan1 bluepill calliope-mini \ - cc2650-launchpad cc2650stk maple-mini \ + cc2650-launchpad cc2650stk hifive1 maple-mini \ microbit msb-430 msb-430h nrf51dongle nrf6310 \ nucleo-f031k6 nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 \ nucleo-f030r8 nucleo-f070rb nucleo-f072rb nucleo-f103rb nucleo-f302r8 \ diff --git a/examples/gnrc_networking/Makefile b/examples/gnrc_networking/Makefile index b8ef131ab0cb04032636ea7f35d39dc0aecdc14b..86b7a94c143cbcfd2d18c9040e85c4332b699d0e 100644 --- a/examples/gnrc_networking/Makefile +++ b/examples/gnrc_networking/Makefile @@ -7,7 +7,7 @@ BOARD ?= native # This has to be the absolute path to the RIOT base directory: RIOTBASE ?= $(CURDIR)/../.. -BOARD_INSUFFICIENT_MEMORY := calliope-mini chronos microbit msb-430 msb-430h \ +BOARD_INSUFFICIENT_MEMORY := calliope-mini chronos hifive1 microbit msb-430 msb-430h \ nucleo-f031k6 nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 \ nucleo-f030r8 nucleo-f070rb nucleo-f072rb nucleo-f103rb nucleo-f302r8 \ nucleo-f334r8 nucleo-l053r8 spark-core stm32f0discovery telosb \ diff --git a/examples/gnrc_tftp/Makefile b/examples/gnrc_tftp/Makefile index f5d7170c428e3098dc3ba503acd24bdac8c9e1b2..295eacc1a59e70820553300b56739d65a1fce888 100644 --- a/examples/gnrc_tftp/Makefile +++ b/examples/gnrc_tftp/Makefile @@ -8,7 +8,7 @@ BOARD ?= native RIOTBASE ?= $(CURDIR)/../.. BOARD_INSUFFICIENT_MEMORY := airfy-beacon b-l072z-lrwan1 bluepill calliope-mini chronos \ - microbit msb-430 msb-430h nrf51dongle nrf6310 nucleo-f031k6 \ + hifive1 microbit msb-430 msb-430h nrf51dongle nrf6310 nucleo-f031k6 \ nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 nucleo-f030r8 \ nucleo-f070rb nucleo-f072rb nucleo-f103rb nucleo-f302r8 nucleo-f334r8 \ nucleo-l053r8 spark-core stm32f0discovery \ diff --git a/examples/javascript/Makefile b/examples/javascript/Makefile index 6cfdd3908cc86af25aadab2d93181641a2cd9d3c..7a2c26dd1795663f8a69d95bbc1cff59a1c1eed0 100644 --- a/examples/javascript/Makefile +++ b/examples/javascript/Makefile @@ -8,7 +8,7 @@ BOARD ?= native RIOTBASE ?= $(CURDIR)/../.. BOARD_INSUFFICIENT_MEMORY := airfy-beacon b-l072z-lrwan1 bluepill calliope-mini \ - cc2650-launchpad cc2650stk maple-mini \ + cc2650-launchpad cc2650stk hifive1 maple-mini \ microbit nrf51dongle nrf6310 nucleo-f030r8 nucleo-f070rb \ nucleo-f072rb nucleo-f103rb nucleo-f302r8 nucleo-f334r8 nucleo-f410rb \ nucleo-l053r8 nucleo-l073rz nucleo-f031k6 nucleo-f042k6 \ diff --git a/examples/lua/Makefile b/examples/lua/Makefile index 030e7e3d9587e083006c02cc00352cd9ab8d2be7..365becd65a40a976a45cb9bfeba4aee5f7de974a 100644 --- a/examples/lua/Makefile +++ b/examples/lua/Makefile @@ -15,7 +15,7 @@ BOARD_INSUFFICIENT_MEMORY := bluepill calliope-mini cc2650-launchpad \ opencm904 spark-core stm32f0discovery BOARD_BLACKLIST := arduino-duemilanove arduino-mega2560 arduino-uno \ - chronos jiminy-mega256rfr2 mega-xplained mips-malta \ + chronos hifive1 jiminy-mega256rfr2 mega-xplained mips-malta \ msb-430 msb-430h pic32-clicker pic32-wifire telosb \ waspmote-pro wsn430-v1_3b wsn430-v1_4 z1 diff --git a/examples/rdcli_simple/Makefile b/examples/rdcli_simple/Makefile index e84b3d61d822ea6ad6f1e5cf5db8b4045742d7a2..6ee362fbfeed7e3bf9c2156d655729b8b20f4a8e 100644 --- a/examples/rdcli_simple/Makefile +++ b/examples/rdcli_simple/Makefile @@ -7,7 +7,7 @@ BOARD ?= native # This has to be the absolute path to the RIOT base directory: RIOTBASE ?= $(CURDIR)/../.. -BOARD_INSUFFICIENT_MEMORY := chronos msb-430 msb-430h nucleo-f030r8 nucleo-l053r8 \ +BOARD_INSUFFICIENT_MEMORY := chronos hifive1 msb-430 msb-430h nucleo-f030r8 nucleo-l053r8 \ nucleo-f031k6 nucleo-f042k6 nucleo-l031k6 \ stm32f0discovery telosb wsn430-v1_3b wsn430-v1_4 \ z1 diff --git a/tests/conn_can/Makefile b/tests/conn_can/Makefile index f310d0d3b37158750a86bdc5dd9dc7794b78de19..35fde68429a0099ec328a5f0ac9db86e4dbcf00b 100644 --- a/tests/conn_can/Makefile +++ b/tests/conn_can/Makefile @@ -1,6 +1,6 @@ include ../Makefile.tests_common -BOARD_INSUFFICIENT_MEMORY := chronos msb-430 msb-430h nucleo-f031k6 nucleo-f042k6 \ +BOARD_INSUFFICIENT_MEMORY := chronos hifive1 msb-430 msb-430h nucleo-f031k6 nucleo-f042k6 \ nucleo-f303k8 nucleo-l031k6 nucleo-f030r8 nucleo-f070rb \ nucleo-f072rb nucleo-f302r8 nucleo-f303re nucleo-f334r8 \ nucleo-l053r8 stm32f0discovery telosb wsn430-v1_3b \ diff --git a/tests/gnrc_netif/Makefile b/tests/gnrc_netif/Makefile index dc27e96cedf9867346ac69b77e47b515bf3b7fa4..55937078b105068bbf5c3273bc0ac22a6ee8fb50 100644 --- a/tests/gnrc_netif/Makefile +++ b/tests/gnrc_netif/Makefile @@ -1,7 +1,7 @@ include ../Makefile.tests_common BOARD_INSUFFICIENT_MEMORY := airfy-beacon b-l072z-lrwan1 bluepill calliope-mini \ - cc2650-launchpad cc2650stk chronos maple-mini \ + cc2650-launchpad cc2650stk chronos hifive1 maple-mini \ microbit msb-430 msb-430h nrf51dongle nrf6310 \ nucleo-f030r8 nucleo-f070rb nucleo-f072rb nucleo-f103rb \ nucleo-f302r8 nucleo-f334r8 nucleo-l053r8 nucleo-l073rz \ diff --git a/tests/gnrc_tcp_client/Makefile b/tests/gnrc_tcp_client/Makefile index 6415f2647b65d67410c3fe6ec31f3f13059f55f9..42f60f09113e407b29fafd4a67e93cb4d95ebcc4 100644 --- a/tests/gnrc_tcp_client/Makefile +++ b/tests/gnrc_tcp_client/Makefile @@ -10,7 +10,7 @@ TCP_TEST_CYCLES ?= 3 # Mark Boards with insufficient memory BOARD_INSUFFICIENT_MEMORY := airfy-beacon arduino-duemilanove arduino-mega2560 \ - arduino-uno calliope-mini chronos mega-xplained microbit \ + arduino-uno calliope-mini chronos hifive1 mega-xplained microbit \ msb-430 msb-430h nrf51dongle nrf6310 nucleo-f031k6 \ nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 nucleo-f030r8 \ nucleo-f070rb nucleo-f072rb nucleo-f302r8 nucleo-f334r8 nucleo-l053r8 \ diff --git a/tests/gnrc_tcp_server/Makefile b/tests/gnrc_tcp_server/Makefile index 340a838f5aa1b88baf5b4359582c291ed6a4ff8b..0ea14225b20e491dd9ab8b973daab9a7a8a4f861 100644 --- a/tests/gnrc_tcp_server/Makefile +++ b/tests/gnrc_tcp_server/Makefile @@ -10,7 +10,7 @@ TCP_TEST_CYCLES ?= 3 # Mark Boards with insufficient memory BOARD_INSUFFICIENT_MEMORY := airfy-beacon arduino-duemilanove arduino-mega2560 \ - arduino-uno calliope-mini chronos mega-xplained \ + arduino-uno calliope-mini chronos hifive1 mega-xplained \ microbit msb-430 msb-430h nrf51dongle nrf6310 nucleo-f031k6 \ nucleo-f042k6 nucleo-f303k8 nucleo-l031k6 nucleo-f030r8 \ nucleo-f070rb nucleo-f072rb nucleo-f302r8 nucleo-f334r8 nucleo-l053r8 \ diff --git a/tests/lwip/Makefile b/tests/lwip/Makefile index 8844b9f1dea4596b5f3db9a1deed1fdd15b84851..a5c7dde0fb9a890426ac58cf701bd24cbd71f0d8 100644 --- a/tests/lwip/Makefile +++ b/tests/lwip/Makefile @@ -5,7 +5,7 @@ include ../Makefile.tests_common BOARD_BLACKLIST := arduino-uno arduino-duemilanove arduino-mega2560 chronos \ msb-430 msb-430h telosb waspmote-pro wsn430-v1_3b \ wsn430-v1_4 z1 jiminy-mega256rfr2 mega-xplained -BOARD_INSUFFICIENT_MEMORY := airfy-beacon nrf6310 nucleo-f031k6 nucleo-f042k6 \ +BOARD_INSUFFICIENT_MEMORY := airfy-beacon hifive1 nrf6310 nucleo-f031k6 nucleo-f042k6 \ nucleo-l031k6 nucleo-f030r8 nucleo-f334r8 nucleo-l053r8 \ stm32f0discovery yunjia-nrf51822