summaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorhathach <[email protected]>2026-06-11 17:20:15 +0700
committerhathach <[email protected]>2026-06-11 17:20:15 +0700
commit5145b67f7946763ca04954f5494bfa88eec2acad (patch)
tree9130540204c2404d532613adab01e88f4e918daa /hw
parentf52d9c7b27dc0234fb4738762a8a6da01817e2bf (diff)
parent0244a4f12e019406a4b73c75cd96f8efa096bbdc (diff)
Merge remote-tracking branch 'origin/master' into stm32c5
# Conflicts: # README.rst
Diffstat (limited to 'hw')
-rw-r--r--hw/bsp/BoardPresets.json26
-rw-r--r--hw/bsp/ch32v10x/boards/ch32v103c_bluepill/board.cmake8
-rw-r--r--hw/bsp/ch32v10x/boards/ch32v103c_bluepill/board.h27
-rw-r--r--hw/bsp/ch32v10x/boards/ch32v103c_bluepill/board.mk5
-rw-r--r--hw/bsp/ch32v10x/family.c23
-rw-r--r--hw/bsp/espressif/family.cmake7
-rw-r--r--hw/bsp/family_support.cmake62
-rw-r--r--hw/bsp/stm32f4/family.c5
-rw-r--r--hw/bsp/stm32f7/boards/stm32f746disco/board.cmake2
-rw-r--r--hw/bsp/stm32f7/boards/stm32f769disco/board.cmake1
-rw-r--r--hw/bsp/stm32f7/family.c21
-rw-r--r--hw/bsp/stm32u0/family.c13
-rw-r--r--hw/bsp/tm4c/family.cmake4
13 files changed, 174 insertions, 30 deletions
diff --git a/hw/bsp/BoardPresets.json b/hw/bsp/BoardPresets.json
index 1ff29f99d..2ad940caf 100644
--- a/hw/bsp/BoardPresets.json
+++ b/hw/bsp/BoardPresets.json
@@ -6,7 +6,7 @@
"hidden": true,
"description": "Configure preset for the ${presetName} board",
"generator": "Ninja Multi-Config",
- "binaryDir": "${sourceDir}/build/${presetName}",
+ "binaryDir": "${sourceDir}/cmake-build-${presetName}",
"cacheVariables": {
"CMAKE_DEFAULT_BUILD_TYPE": "RelWithDebInfo",
"BOARD": "${presetName}"
@@ -17,7 +17,7 @@
"hidden": true,
"description": "Configure preset for the ${presetName} board",
"generator": "Ninja",
- "binaryDir": "${sourceDir}/build/${presetName}",
+ "binaryDir": "${sourceDir}/cmake-build-${presetName}",
"cacheVariables": {
"BOARD": "${presetName}"
}
@@ -123,6 +123,10 @@
"inherits": "default"
},
{
+ "name": "ch32v103c_bluepill",
+ "inherits": "default"
+ },
+ {
"name": "ch32v103r_r1_1v0",
"inherits": "default"
},
@@ -1092,6 +1096,11 @@
"configurePreset": "ch32f205r-r0"
},
{
+ "name": "ch32v103c_bluepill",
+ "description": "Build preset for the ch32v103c_bluepill board",
+ "configurePreset": "ch32v103c_bluepill"
+ },
+ {
"name": "ch32v103r_r1_1v0",
"description": "Build preset for the ch32v103r_r1_1v0 board",
"configurePreset": "ch32v103r_r1_1v0"
@@ -2482,6 +2491,19 @@
]
},
{
+ "name": "ch32v103c_bluepill",
+ "steps": [
+ {
+ "type": "configure",
+ "name": "ch32v103c_bluepill"
+ },
+ {
+ "type": "build",
+ "name": "ch32v103c_bluepill"
+ }
+ ]
+ },
+ {
"name": "ch32v103r_r1_1v0",
"steps": [
{
diff --git a/hw/bsp/ch32v10x/boards/ch32v103c_bluepill/board.cmake b/hw/bsp/ch32v10x/boards/ch32v103c_bluepill/board.cmake
new file mode 100644
index 000000000..f6e47ba30
--- /dev/null
+++ b/hw/bsp/ch32v10x/boards/ch32v103c_bluepill/board.cmake
@@ -0,0 +1,8 @@
+set(LD_FLASH_SIZE 64K)
+set(LD_RAM_SIZE 20K)
+
+function(update_board TARGET)
+ target_compile_definitions(${TARGET} PUBLIC
+ CFG_EXAMPLE_MSC_DUAL_READONLY
+ )
+endfunction()
diff --git a/hw/bsp/ch32v10x/boards/ch32v103c_bluepill/board.h b/hw/bsp/ch32v10x/boards/ch32v103c_bluepill/board.h
new file mode 100644
index 000000000..3a97b44d6
--- /dev/null
+++ b/hw/bsp/ch32v10x/boards/ch32v103c_bluepill/board.h
@@ -0,0 +1,27 @@
+/* Some Chinese manufacturers use CH32V103C8T6 to make Bluepill boards
+ */
+/* metadata:
+ name: CH32V103C8T6-Bluepill
+ url: https://stm32-base.org/boards/STM32F103C8T6-Blue-Pill
+*/
+
+#ifndef BOARD_H_
+#define BOARD_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define LED_PORT GPIOC
+#define LED_PIN GPIO_Pin_13
+#define LED_STATE_ON 0
+
+#define BUTTON_PORT GPIOA
+#define BUTTON_PIN GPIO_Pin_1
+#define BUTTON_STATE_ACTIVE 1
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/hw/bsp/ch32v10x/boards/ch32v103c_bluepill/board.mk b/hw/bsp/ch32v10x/boards/ch32v103c_bluepill/board.mk
new file mode 100644
index 000000000..e594f42a7
--- /dev/null
+++ b/hw/bsp/ch32v10x/boards/ch32v103c_bluepill/board.mk
@@ -0,0 +1,5 @@
+CFLAGS += -DCFG_EXAMPLE_MSC_DUAL_READONLY
+
+LDFLAGS += \
+ -Wl,--defsym=__FLASH_SIZE=64K \
+ -Wl,--defsym=__RAM_SIZE=20K \
diff --git a/hw/bsp/ch32v10x/family.c b/hw/bsp/ch32v10x/family.c
index 72dae7086..9f5dc5572 100644
--- a/hw/bsp/ch32v10x/family.c
+++ b/hw/bsp/ch32v10x/family.c
@@ -66,14 +66,33 @@ uint32_t tusb_time_millis_api(void) {
}
#endif
+// 0x800 CSR register is writable in U-mode
+// according to manual: https://www.wch-ic.com/downloads/QingKeV3_Processor_Manual_PDF.html
+__attribute__((always_inline)) RV_STATIC_INLINE
+void __wch_vendor_enable_irq(void)
+{
+ __asm volatile ("csrs 0x800, %0" : : "r" (0x88) );
+}
+
+__attribute__((always_inline)) RV_STATIC_INLINE
+void __wch_vendor_disable_irq(void)
+{
+ __asm volatile ("csrc 0x800, %0" : : "r" (0x88) );
+ __asm volatile ("fence.i");
+}
+
void board_init(void) {
- __disable_irq();
+ /* __disable_irq() in CH32V103 EVT attempts to call
+ * `csrc mstatus, 0x88` in U-mode, which is allowed ONLY in M-mode.
+ * Replace this with CSR 0x800 to avoid hard-fault. */
+ __wch_vendor_disable_irq();
#if CFG_TUSB_OS == OPT_OS_NONE
SysTick_Config(SystemCoreClock / 1000);
#endif
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
EXTEN->EXTEN_CTR |= EXTEN_USBFS_IO_EN;
uint8_t usb_div;
@@ -123,7 +142,7 @@ void board_init(void) {
USART_Init(USART1, &usart);
USART_Cmd(USART1, ENABLE);
- __enable_irq();
+ __wch_vendor_enable_irq();
board_led_write(true);
}
diff --git a/hw/bsp/espressif/family.cmake b/hw/bsp/espressif/family.cmake
index 30d5a6ac9..b3bda4ad8 100644
--- a/hw/bsp/espressif/family.cmake
+++ b/hw/bsp/espressif/family.cmake
@@ -44,3 +44,10 @@ set(EXTRA_COMPONENT_DIRS "src" "${CMAKE_CURRENT_LIST_DIR}/boards" "${CMAKE_CURRE
set(SDKCONFIG ${CMAKE_BINARY_DIR}/sdkconfig)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
+
+# CI_BUILD marks firmware built in CI (GitHub Actions sets CI). Mirrors the
+# non-espressif define added in family_configure_common(); applied build-wide
+# here since espressif examples return before that function runs.
+if(DEFINED ENV{CI})
+ idf_build_set_property(COMPILE_DEFINITIONS "CI_BUILD=1" APPEND)
+endif()
diff --git a/hw/bsp/family_support.cmake b/hw/bsp/family_support.cmake
index 2468ac43c..1f3952205 100644
--- a/hw/bsp/family_support.cmake
+++ b/hw/bsp/family_support.cmake
@@ -244,7 +244,7 @@ function(family_add_bloaty TARGET)
COMMAND ${BLOATY_EXE} ${OPTION_LIST} $<TARGET_FILE:${TARGET}>
VERBATIM)
- set_property(TARGET ${TARGET}-bloaty PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-bloaty PROPERTY FOLDER ${TARGET}-group)
# post build
# add_custom_command(TARGET ${TARGET} POST_BUILD
# COMMAND ${BLOATY_EXE} --csv ${OPTION_LIST} $<TARGET_FILE:${TARGET}> > ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_bloaty.csv
@@ -265,7 +265,7 @@ function(family_add_linkermap TARGET)
VERBATIM
)
- set_property(TARGET ${TARGET}-linkermap PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-linkermap PROPERTY FOLDER ${TARGET}-group)
# post build
add_custom_command(TARGET ${TARGET} POST_BUILD
@@ -347,7 +347,7 @@ echo \"$MEMBROWSE_CMD\"")
COMMAND ${CMAKE_COMMAND} -E env MEMBROWSE_UPLOAD=0 bash -lc "${MEMBROWSE_PREPARE_CMD}; eval \"$MEMBROWSE_CMD\""
VERBATIM
)
- set_property(TARGET ${TARGET}-membrowse PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-membrowse PROPERTY FOLDER ${TARGET}-group)
add_custom_target(${TARGET}-membrowse-upload
COMMAND ${CMAKE_COMMAND} -E env MEMBROWSE_UPLOAD=1 bash -lc "${MEMBROWSE_PREPARE_CMD}; eval \"$MEMBROWSE_CMD\""
@@ -359,7 +359,7 @@ echo \"$MEMBROWSE_CMD\"")
endif ()
add_dependencies(examples-membrowse-upload ${TARGET}-membrowse-upload)
- set_property(TARGET ${TARGET}-membrowse-upload PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-membrowse-upload PROPERTY FOLDER ${TARGET}-group)
endif ()
endfunction()
@@ -454,6 +454,12 @@ function(family_configure_common TARGET RTOS)
BOARD_${BOARD_UPPER}
)
+ # CI_BUILD marks firmware built in CI (GitHub Actions sets CI). Examples can use
+ # it to alter behavior under test, e.g. board_test idles to park HIL boards.
+ if(DEFINED ENV{CI})
+ target_compile_definitions(${TARGET} PUBLIC CI_BUILD=1)
+ endif()
+
# compile define from command line
if(DEFINED CFLAGS_CLI)
separate_arguments(CFLAGS_CLI)
@@ -648,7 +654,7 @@ exit"
VERBATIM
)
- set_property(TARGET ${NAME_TARGET}-jlink PROPERTY FOLDER ${TARGET}-group)
+# set_property(TARGET ${NAME_TARGET}-jlink PROPERTY FOLDER ${NAME_TARGET}-group)
endfunction()
@@ -663,7 +669,7 @@ function(family_flash_stlink TARGET)
COMMAND ${STM32_PROGRAMMER_CLI} --connect port=swd --write $<TARGET_FILE:${TARGET}> --go
)
- set_property(TARGET ${TARGET}-stlink PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-stlink PROPERTY FOLDER ${TARGET}-group)
endfunction()
@@ -678,7 +684,7 @@ function(family_flash_stflash TARGET)
COMMAND ${ST_FLASH} write $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.bin 0x8000000
)
- set_property(TARGET ${TARGET}-stflash PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-stflash PROPERTY FOLDER ${TARGET}-group)
endfunction()
@@ -706,7 +712,7 @@ function(family_flash_openocd TARGET)
VERBATIM
)
- set_property(TARGET ${TARGET}-openocd PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-openocd PROPERTY FOLDER ${TARGET}-group)
endfunction()
@@ -769,7 +775,7 @@ function(family_flash_wlink_rs TARGET)
COMMAND ${WLINK_RS} flash $<TARGET_FILE:${TARGET}>
)
- set_property(TARGET ${TARGET}-wlink-rs PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-wlink-rs PROPERTY FOLDER ${TARGET}-group)
endfunction()
@@ -784,7 +790,7 @@ function(family_flash_pyocd TARGET)
COMMAND ${PYOCD} flash -t ${PYOCD_TARGET} $<TARGET_FILE:${TARGET}>
)
- set_property(TARGET ${TARGET}-pyocd PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-pyocd PROPERTY FOLDER ${TARGET}-group)
endfunction()
@@ -794,7 +800,7 @@ function(family_flash_uf2 TARGET FAMILY_ID)
DEPENDS ${TARGET}
COMMAND python ${UF2CONV_PY} -f ${FAMILY_ID} --deploy $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.uf2
)
- set_property(TARGET ${TARGET}-uf2 PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-uf2 PROPERTY FOLDER ${TARGET}-group)
endfunction()
@@ -810,7 +816,7 @@ function(family_flash_teensy TARGET)
COMMAND ${TEENSY_CLI} --mcu=${TEENSY_MCU} -w -s $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.hex
)
- set_property(TARGET ${TARGET}-teensy PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-teensy PROPERTY FOLDER ${TARGET}-group)
endfunction()
@@ -830,7 +836,7 @@ function(family_flash_nxplink TARGET)
COMMAND ${LINKSERVER_PATH} flash ${NXPLINK_DEVICE} load $<TARGET_FILE:${TARGET}>
)
- set_property(TARGET ${TARGET}-nxplink PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-nxplink PROPERTY FOLDER ${TARGET}-group)
endfunction()
@@ -845,7 +851,7 @@ function(family_flash_dfu_util TARGET OPTION)
VERBATIM
)
- set_property(TARGET ${TARGET}-dfu-util PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-dfu-util PROPERTY FOLDER ${TARGET}-group)
endfunction()
function(family_flash_msp430flasher TARGET)
@@ -862,7 +868,7 @@ function(family_flash_msp430flasher TARGET)
${MSP430FLASHER} -w $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.hex -z [VCC]
)
- set_property(TARGET ${TARGET}-msp430flasher PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-msp430flasher PROPERTY FOLDER ${TARGET}-group)
endfunction()
function(family_flash_rfp TARGET)
@@ -880,7 +886,7 @@ function(family_flash_rfp TARGET)
VERBATIM
)
- set_property(TARGET ${TARGET}-rfp PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-rfp PROPERTY FOLDER ${TARGET}-group)
endfunction()
@@ -897,7 +903,27 @@ function(family_flash_uniflash TARGET)
VERBATIM
)
- set_property(TARGET ${TARGET}-uniflash PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-uniflash PROPERTY FOLDER ${TARGET}-group)
+endfunction()
+
+# Add flash lm4flash target (lightweight flasher for TI Tiva-C/Stellaris ICDI boards)
+function(family_flash_lm4flash TARGET)
+ if (NOT DEFINED LM4FLASH)
+ set(LM4FLASH lm4flash)
+ endif ()
+
+ if (NOT DEFINED LM4FLASH_OPTION)
+ set(LM4FLASH_OPTION "")
+ endif ()
+ separate_arguments(OPTION_LIST UNIX_COMMAND ${LM4FLASH_OPTION})
+
+ add_custom_target(${TARGET}-lm4flash
+ DEPENDS ${TARGET}
+ COMMAND ${LM4FLASH} ${OPTION_LIST} $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.bin
+ VERBATIM
+ )
+
+ #set_property(TARGET ${TARGET}-lm4flash PROPERTY FOLDER ${TARGET}-group)
endfunction()
# Add flash ft9xx target need to remove kernal's ftdi_sio and bind D2XX drivers
@@ -912,7 +938,7 @@ function(family_flash_ft9xx TARGET)
COMMAND ${FT9XXPROG} -f $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.bin
)
- set_property(TARGET ${TARGET}-ft9xx PROPERTY FOLDER ${TARGET}-group)
+ #set_property(TARGET ${TARGET}-ft9xx PROPERTY FOLDER ${TARGET}-group)
endfunction()
#----------------------------------
diff --git a/hw/bsp/stm32f4/family.c b/hw/bsp/stm32f4/family.c
index 4eea5c7a8..3a323e673 100644
--- a/hw/bsp/stm32f4/family.c
+++ b/hw/bsp/stm32f4/family.c
@@ -109,6 +109,11 @@ void USARTn_IRQHandler(void) {
void board_init(void) {
board_clock_init();
+
+ __HAL_FLASH_INSTRUCTION_CACHE_ENABLE();
+ __HAL_FLASH_DATA_CACHE_ENABLE();
+ __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
+
//SystemCoreClockUpdate();
// Enable All GPIOs clocks
diff --git a/hw/bsp/stm32f7/boards/stm32f746disco/board.cmake b/hw/bsp/stm32f7/boards/stm32f746disco/board.cmake
index bc26c6ef4..5f46365f4 100644
--- a/hw/bsp/stm32f7/boards/stm32f746disco/board.cmake
+++ b/hw/bsp/stm32f7/boards/stm32f746disco/board.cmake
@@ -1,5 +1,5 @@
set(MCU_VARIANT stm32f746xx)
-set(JLINK_DEVICE stm32f746xx)
+set(JLINK_DEVICE stm32f746ng)
set(LD_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/STM32F746ZGTx_FLASH.ld)
diff --git a/hw/bsp/stm32f7/boards/stm32f769disco/board.cmake b/hw/bsp/stm32f7/boards/stm32f769disco/board.cmake
index 2335b869e..dbdd07e4d 100644
--- a/hw/bsp/stm32f7/boards/stm32f769disco/board.cmake
+++ b/hw/bsp/stm32f7/boards/stm32f769disco/board.cmake
@@ -1,5 +1,6 @@
set(MCU_VARIANT stm32f769xx)
set(JLINK_DEVICE stm32f769ni)
+#set(JLINK_OPTION "-USB 000778170924")
set(LD_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/STM32F769ZITx_FLASH.ld)
diff --git a/hw/bsp/stm32f7/family.c b/hw/bsp/stm32f7/family.c
index 7a322591b..9427ac4a6 100644
--- a/hw/bsp/stm32f7/family.c
+++ b/hw/bsp/stm32f7/family.c
@@ -82,8 +82,9 @@ static UART_HandleTypeDef UartHandle = {.Instance = USARTn,
.OverSampling = UART_OVERSAMPLING_16,
}};
-// RX ring buffer via RXNE interrupt — no HAL IT functions used (avoid HAL state conflicts)
-static uint8_t uart_rx_ff_buf[32];
+// RX ring buffer via RXNE interrupt — no HAL IT functions used (avoid HAL state conflicts).
+// Sized to absorb a full host-forwarding burst (>64B) when the main loop briefly stalls.
+static uint8_t uart_rx_ff_buf[256];
static tu_fifo_t uart_rx_ff;
void USARTn_IRQHandler(void) {
@@ -142,13 +143,24 @@ void board_init(void) {
// 1ms tick timer
SysTick_Config(SystemCoreClock / 1000);
+ // Set UART interrupt higher priority than USB OTG since the F7 USART has no hardware RX FIFO, so a host example's
+ // UART RX must not be starved by the frequent USB host interrupts or incoming bytes overrun (ORE) and dropped.
+ NVIC_SetPriority(OTG_FS_IRQn, 1);
+ NVIC_SetPriority(OTG_HS_IRQn, 1);
+ #ifdef UART_ID
+ NVIC_SetPriority(USARTn_IRQn, 0);
+ #endif
+
#elif CFG_TUSB_OS == OPT_OS_FREERTOS
// Explicitly disable systick to prevent its ISR from running before scheduler start
SysTick->CTRL &= ~1U;
// If freeRTOS is used, IRQ priority is limit by max syscall ( smaller is higher )
- NVIC_SetPriority(OTG_FS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY);
- NVIC_SetPriority(OTG_HS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY);
+ NVIC_SetPriority(OTG_FS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1);
+ NVIC_SetPriority(OTG_HS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1);
+ #ifdef UART_ID
+ NVIC_SetPriority(USARTn_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY);
+ #endif
#endif
#ifdef UART_ID
@@ -156,7 +168,6 @@ void board_init(void) {
HAL_UART_Init(&UartHandle);
tu_fifo_config(&uart_rx_ff, uart_rx_ff_buf, sizeof(uart_rx_ff_buf), false);
USARTn->CR1 |= USART_CR1_RXNEIE;
- NVIC_SetPriority(USARTn_IRQn, (1 << __NVIC_PRIO_BITS) - 1);
NVIC_EnableIRQ(USARTn_IRQn);
#endif
diff --git a/hw/bsp/stm32u0/family.c b/hw/bsp/stm32u0/family.c
index 7bd99fba6..0d20ba43f 100644
--- a/hw/bsp/stm32u0/family.c
+++ b/hw/bsp/stm32u0/family.c
@@ -166,6 +166,19 @@ uint32_t board_button_read(void) {
return BUTTON_STATE_ACTIVE == HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON_PIN);
}
+size_t board_get_unique_id(uint8_t id[], size_t max_len) {
+ (void) max_len;
+ volatile uint32_t *stm32_uuid = (volatile uint32_t *) UID_BASE;
+ uint32_t *id32 = (uint32_t *) (uintptr_t) id;
+ uint8_t const len = 12;
+
+ id32[0] = stm32_uuid[0];
+ id32[1] = stm32_uuid[1];
+ id32[2] = stm32_uuid[2];
+
+ return len;
+}
+
int board_uart_read(uint8_t* buf, int len) {
#ifdef UART_ID
int count = 0;
diff --git a/hw/bsp/tm4c/family.cmake b/hw/bsp/tm4c/family.cmake
index 41b8a597a..ce7c62409 100644
--- a/hw/bsp/tm4c/family.cmake
+++ b/hw/bsp/tm4c/family.cmake
@@ -79,6 +79,6 @@ function(family_configure_example TARGET RTOS)
# Flashing
family_add_bin_hex(${TARGET})
family_flash_jlink(${TARGET})
- family_flash_openocd(${TARGET})
- family_flash_uniflash(${TARGET})
+ family_flash_lm4flash(${TARGET})
+ # family_flash_uniflash(${TARGET})
endfunction()