mirror of
https://github.com/hathach/tinyusb.git
synced 2025-04-25 03:02:26 +00:00
port clang stm32: f1, f2, f3
This commit is contained in:
parent
f76d38c924
commit
0f3d6c61b5
1
.github/workflows/build_arm.yml
vendored
1
.github/workflows/build_arm.yml
vendored
@ -41,7 +41,6 @@ jobs:
|
|||||||
- 'lpc51'
|
- 'lpc51'
|
||||||
- 'mm32 msp432e4'
|
- 'mm32 msp432e4'
|
||||||
- 'samd11 same5x saml2x'
|
- 'samd11 same5x saml2x'
|
||||||
- 'stm32f2 stm32f3'
|
|
||||||
- 'stm32l0 stm32wb'
|
- 'stm32l0 stm32wb'
|
||||||
- 'tm4c123 xmc4000'
|
- 'tm4c123 xmc4000'
|
||||||
steps:
|
steps:
|
||||||
|
4
.github/workflows/cmake_arm.yml
vendored
4
.github/workflows/cmake_arm.yml
vendored
@ -49,6 +49,8 @@ jobs:
|
|||||||
- 'samd51'
|
- 'samd51'
|
||||||
- 'stm32f0'
|
- 'stm32f0'
|
||||||
- 'stm32f1'
|
- 'stm32f1'
|
||||||
|
- 'stm32f2'
|
||||||
|
- 'stm32f3'
|
||||||
- 'stm32f4'
|
- 'stm32f4'
|
||||||
- 'stm32f7'
|
- 'stm32f7'
|
||||||
- 'stm32g0'
|
- 'stm32g0'
|
||||||
@ -135,6 +137,8 @@ jobs:
|
|||||||
- 'samd51'
|
- 'samd51'
|
||||||
- 'stm32f0'
|
- 'stm32f0'
|
||||||
- 'stm32f1'
|
- 'stm32f1'
|
||||||
|
- 'stm32f2'
|
||||||
|
- 'stm32f3'
|
||||||
- 'stm32f4'
|
- 'stm32f4'
|
||||||
- 'stm32f7'
|
- 'stm32f7'
|
||||||
- 'stm32g0'
|
- 'stm32g0'
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
include_guard()
|
include_guard()
|
||||||
|
|
||||||
if (NOT BOARD)
|
|
||||||
message(FATAL_ERROR "BOARD not specified")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
set(ST_FAMILY f1)
|
set(ST_FAMILY f1)
|
||||||
set(ST_PREFIX stm32${ST_FAMILY}xx)
|
set(ST_PREFIX stm32${ST_FAMILY}xx)
|
||||||
|
|
||||||
@ -29,8 +25,14 @@ function(add_board_target BOARD_TARGET)
|
|||||||
if (NOT TARGET ${BOARD_TARGET})
|
if (NOT TARGET ${BOARD_TARGET})
|
||||||
# Startup & Linker script
|
# Startup & Linker script
|
||||||
set(STARTUP_FILE_GNU ${ST_CMSIS}/Source/Templates/gcc/startup_${MCU_VARIANT}.s)
|
set(STARTUP_FILE_GNU ${ST_CMSIS}/Source/Templates/gcc/startup_${MCU_VARIANT}.s)
|
||||||
|
set(STARTUP_FILE_Clang ${STARTUP_FILE_GNU})
|
||||||
set(STARTUP_FILE_IAR ${ST_CMSIS}/Source/Templates/iar/startup_${MCU_VARIANT}.s)
|
set(STARTUP_FILE_IAR ${ST_CMSIS}/Source/Templates/iar/startup_${MCU_VARIANT}.s)
|
||||||
|
|
||||||
|
set(LD_FILE_Clang ${LD_FILE_GNU})
|
||||||
|
if (NOT DEFINED LD_FILE_IAR)
|
||||||
|
set(LD_FILE_IAR ${ST_CMSIS}/Source/Templates/iar/linker/${MCU_VARIANT}_flash.icf)
|
||||||
|
endif ()
|
||||||
|
|
||||||
add_library(${BOARD_TARGET} STATIC
|
add_library(${BOARD_TARGET} STATIC
|
||||||
${ST_CMSIS}/Source/Templates/system_${ST_PREFIX}.c
|
${ST_CMSIS}/Source/Templates/system_${ST_PREFIX}.c
|
||||||
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal.c
|
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal.c
|
||||||
@ -47,10 +49,8 @@ function(add_board_target BOARD_TARGET)
|
|||||||
${ST_CMSIS}/Include
|
${ST_CMSIS}/Include
|
||||||
${ST_HAL_DRIVER}/Inc
|
${ST_HAL_DRIVER}/Inc
|
||||||
)
|
)
|
||||||
target_compile_options(${BOARD_TARGET} PUBLIC
|
#target_compile_options(${BOARD_TARGET} PUBLIC)
|
||||||
)
|
#target_compile_definitions(${BOARD_TARGET} PUBLIC)
|
||||||
target_compile_definitions(${BOARD_TARGET} PUBLIC
|
|
||||||
)
|
|
||||||
|
|
||||||
update_board(${BOARD_TARGET})
|
update_board(${BOARD_TARGET})
|
||||||
|
|
||||||
@ -58,9 +58,11 @@ function(add_board_target BOARD_TARGET)
|
|||||||
target_link_options(${BOARD_TARGET} PUBLIC
|
target_link_options(${BOARD_TARGET} PUBLIC
|
||||||
"LINKER:--script=${LD_FILE_GNU}"
|
"LINKER:--script=${LD_FILE_GNU}"
|
||||||
-nostartfiles
|
-nostartfiles
|
||||||
# nanolib
|
--specs=nosys.specs --specs=nano.specs
|
||||||
--specs=nosys.specs
|
)
|
||||||
--specs=nano.specs
|
elseif (CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||||
|
target_link_options(${BOARD_TARGET} PUBLIC
|
||||||
|
"LINKER:--script=${LD_FILE_Clang}"
|
||||||
)
|
)
|
||||||
elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR")
|
elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR")
|
||||||
target_link_options(${BOARD_TARGET} PUBLIC
|
target_link_options(${BOARD_TARGET} PUBLIC
|
||||||
@ -106,5 +108,5 @@ function(family_configure_example TARGET RTOS)
|
|||||||
|
|
||||||
# Flashing
|
# Flashing
|
||||||
family_flash_stlink(${TARGET})
|
family_flash_stlink(${TARGET})
|
||||||
#family_flash_jlink(${TARGET})
|
family_flash_jlink(${TARGET})
|
||||||
endfunction()
|
endfunction()
|
||||||
|
10
hw/bsp/stm32f2/boards/stm32f207nucleo/board.cmake
Normal file
10
hw/bsp/stm32f2/boards/stm32f207nucleo/board.cmake
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
set(MCU_VARIANT stm32f207xx)
|
||||||
|
set(JLINK_DEVICE stm32f207zg)
|
||||||
|
|
||||||
|
set(LD_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/STM32F207ZGTx_FLASH.ld)
|
||||||
|
|
||||||
|
function(update_board TARGET)
|
||||||
|
target_compile_definitions(${TARGET} PUBLIC
|
||||||
|
STM32F207xx
|
||||||
|
)
|
||||||
|
endfunction()
|
57
hw/bsp/stm32f2/boards/stm32f207nucleo/board.h
Normal file
57
hw/bsp/stm32f2/boards/stm32f207nucleo/board.h
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#ifndef BOARD_H
|
||||||
|
#define BOARD_H
|
||||||
|
|
||||||
|
#define LED_PORT GPIOB
|
||||||
|
#define LED_PIN GPIO_PIN_14
|
||||||
|
#define LED_STATE_ON 1
|
||||||
|
|
||||||
|
#define BUTTON_PORT GPIOC
|
||||||
|
#define BUTTON_PIN GPIO_PIN_13
|
||||||
|
#define BUTTON_STATE_ACTIVE 1
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* The system Clock is configured as follow :
|
||||||
|
* System Clock source = PLL (HSE)
|
||||||
|
* SYSCLK(Hz) = 120000000
|
||||||
|
* HCLK(Hz) = 120000000
|
||||||
|
* AHB Prescaler = 1
|
||||||
|
* APB1 Prescaler = 4
|
||||||
|
* APB2 Prescaler = 2
|
||||||
|
* HSE Frequency(Hz) = 8000000
|
||||||
|
* PLL_M = HSE_VALUE/1000000
|
||||||
|
* PLL_N = 240
|
||||||
|
* PLL_P = 2
|
||||||
|
* PLL_Q = 5
|
||||||
|
* VDD(V) = 3.3
|
||||||
|
* Flash Latency(WS) = 3
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static inline void SystemClock_Config(void) {
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct;
|
||||||
|
|
||||||
|
/* Enable HSE Oscillator and activate PLL with HSE as source */
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLM = HSE_VALUE / 1000000;
|
||||||
|
RCC_OscInitStruct.PLL.PLLN = 240;
|
||||||
|
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
|
||||||
|
RCC_OscInitStruct.PLL.PLLQ = 5;
|
||||||
|
HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
||||||
|
|
||||||
|
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
|
||||||
|
clocks dividers */
|
||||||
|
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -24,15 +24,14 @@
|
|||||||
* This file is part of the TinyUSB stack.
|
* This file is part of the TinyUSB stack.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "bsp/board_api.h"
|
|
||||||
|
|
||||||
#include "stm32f2xx_hal.h"
|
#include "stm32f2xx_hal.h"
|
||||||
|
#include "bsp/board_api.h"
|
||||||
|
#include "board.h"
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Forward USB interrupt events to TinyUSB IRQ Handler
|
// Forward USB interrupt events to TinyUSB IRQ Handler
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
void OTG_FS_IRQHandler(void)
|
void OTG_FS_IRQHandler(void) {
|
||||||
{
|
|
||||||
tud_int_handler(0);
|
tud_int_handler(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,81 +39,24 @@ void OTG_FS_IRQHandler(void)
|
|||||||
// MACRO TYPEDEF CONSTANT ENUM
|
// MACRO TYPEDEF CONSTANT ENUM
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
#define LED_PORT GPIOB
|
|
||||||
#define LED_PIN GPIO_PIN_14
|
|
||||||
#define LED_STATE_ON 1
|
|
||||||
|
|
||||||
#define BUTTON_PORT GPIOC
|
|
||||||
#define BUTTON_PIN GPIO_PIN_13
|
|
||||||
#define BUTTON_STATE_ACTIVE 1
|
|
||||||
|
|
||||||
|
|
||||||
// enable all LED, Button, Uart, USB clock
|
// enable all LED, Button, Uart, USB clock
|
||||||
static void all_rcc_clk_enable(void)
|
static void all_rcc_clk_enable(void) {
|
||||||
{
|
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE(); // USB D+, D-
|
__HAL_RCC_GPIOA_CLK_ENABLE(); // USB D+, D-
|
||||||
__HAL_RCC_GPIOB_CLK_ENABLE(); // LED
|
__HAL_RCC_GPIOB_CLK_ENABLE(); // LED
|
||||||
__HAL_RCC_GPIOC_CLK_ENABLE(); // Button
|
__HAL_RCC_GPIOC_CLK_ENABLE(); // Button
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
void board_init(void) {
|
||||||
* @brief System Clock Configuration
|
|
||||||
* The system Clock is configured as follow :
|
|
||||||
* System Clock source = PLL (HSE)
|
|
||||||
* SYSCLK(Hz) = 120000000
|
|
||||||
* HCLK(Hz) = 120000000
|
|
||||||
* AHB Prescaler = 1
|
|
||||||
* APB1 Prescaler = 4
|
|
||||||
* APB2 Prescaler = 2
|
|
||||||
* HSE Frequency(Hz) = 8000000
|
|
||||||
* PLL_M = HSE_VALUE/1000000
|
|
||||||
* PLL_N = 240
|
|
||||||
* PLL_P = 2
|
|
||||||
* PLL_Q = 5
|
|
||||||
* VDD(V) = 3.3
|
|
||||||
* Flash Latency(WS) = 3
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void SystemClock_Config(void)
|
|
||||||
{
|
|
||||||
RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
|
||||||
RCC_OscInitTypeDef RCC_OscInitStruct;
|
|
||||||
|
|
||||||
/* Enable HSE Oscillator and activate PLL with HSE as source */
|
|
||||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
|
||||||
RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
|
|
||||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
|
||||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
|
||||||
RCC_OscInitStruct.PLL.PLLM = HSE_VALUE/1000000;
|
|
||||||
RCC_OscInitStruct.PLL.PLLN = 240;
|
|
||||||
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
|
|
||||||
RCC_OscInitStruct.PLL.PLLQ = 5;
|
|
||||||
HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
|
||||||
|
|
||||||
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
|
|
||||||
clocks dividers */
|
|
||||||
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
|
|
||||||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
|
||||||
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
|
||||||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
|
|
||||||
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
|
|
||||||
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3);
|
|
||||||
}
|
|
||||||
|
|
||||||
void board_init(void)
|
|
||||||
{
|
|
||||||
SystemClock_Config();
|
SystemClock_Config();
|
||||||
|
|
||||||
#if CFG_TUSB_OS == OPT_OS_NONE
|
#if CFG_TUSB_OS == OPT_OS_NONE
|
||||||
// 1ms tick timer
|
// 1ms tick timer
|
||||||
SysTick_Config(SystemCoreClock / 1000);
|
SysTick_Config(SystemCoreClock / 1000);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
all_rcc_clk_enable();
|
all_rcc_clk_enable();
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct;
|
GPIO_InitTypeDef GPIO_InitStruct;
|
||||||
|
|
||||||
// LED
|
// LED
|
||||||
GPIO_InitStruct.Pin = LED_PIN;
|
GPIO_InitStruct.Pin = LED_PIN;
|
||||||
@ -165,50 +107,44 @@ void board_init(void)
|
|||||||
// Board porting API
|
// Board porting API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
void board_led_write(bool state)
|
void board_led_write(bool state) {
|
||||||
{
|
HAL_GPIO_WritePin(LED_PORT, LED_PIN, state ? LED_STATE_ON : (1 - LED_STATE_ON));
|
||||||
HAL_GPIO_WritePin(LED_PORT, LED_PIN, state ? LED_STATE_ON : (1-LED_STATE_ON));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t board_button_read(void)
|
uint32_t board_button_read(void) {
|
||||||
{
|
|
||||||
return BUTTON_STATE_ACTIVE == HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON_PIN);
|
return BUTTON_STATE_ACTIVE == HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON_PIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
int board_uart_read(uint8_t* buf, int len)
|
int board_uart_read(uint8_t* buf, int len) {
|
||||||
{
|
(void) buf;
|
||||||
(void) buf; (void) len;
|
(void) len;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int board_uart_write(void const * buf, int len)
|
int board_uart_write(void const* buf, int len) {
|
||||||
{
|
(void) buf;
|
||||||
(void) buf; (void) len;
|
(void) len;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CFG_TUSB_OS == OPT_OS_NONE
|
#if CFG_TUSB_OS == OPT_OS_NONE
|
||||||
volatile uint32_t system_ticks = 0;
|
volatile uint32_t system_ticks = 0;
|
||||||
void SysTick_Handler (void)
|
|
||||||
{
|
void SysTick_Handler(void) {
|
||||||
HAL_IncTick();
|
HAL_IncTick();
|
||||||
system_ticks++;
|
system_ticks++;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t board_millis(void)
|
uint32_t board_millis(void) {
|
||||||
{
|
|
||||||
return system_ticks;
|
return system_ticks;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void HardFault_Handler (void)
|
void HardFault_Handler(void) {
|
||||||
{
|
|
||||||
__asm("BKPT #0\n");
|
__asm("BKPT #0\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Required by __libc_init_array in startup code if we are compiling using
|
// Required by __libc_init_array in startup code if we are compiling using
|
||||||
// -nostdlib/-nostartfiles.
|
// -nostdlib/-nostartfiles.
|
||||||
void _init(void)
|
void _init(void) {
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
112
hw/bsp/stm32f2/family.cmake
Normal file
112
hw/bsp/stm32f2/family.cmake
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
include_guard()
|
||||||
|
|
||||||
|
set(ST_FAMILY f2)
|
||||||
|
set(ST_PREFIX stm32${ST_FAMILY}xx)
|
||||||
|
|
||||||
|
set(ST_HAL_DRIVER ${TOP}/hw/mcu/st/stm32${ST_FAMILY}xx_hal_driver)
|
||||||
|
set(ST_CMSIS ${TOP}/hw/mcu/st/cmsis_device_${ST_FAMILY})
|
||||||
|
set(CMSIS_5 ${TOP}/lib/CMSIS_5)
|
||||||
|
|
||||||
|
# include board specific
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
|
||||||
|
|
||||||
|
# toolchain set up
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR cortex-m3 CACHE INTERNAL "System Processor")
|
||||||
|
set(CMAKE_TOOLCHAIN_FILE ${TOP}/examples/build_system/cmake/toolchain/arm_${TOOLCHAIN}.cmake)
|
||||||
|
|
||||||
|
set(FAMILY_MCUS STM32F2 CACHE INTERNAL "")
|
||||||
|
|
||||||
|
|
||||||
|
#------------------------------------
|
||||||
|
# BOARD_TARGET
|
||||||
|
#------------------------------------
|
||||||
|
# only need to be built ONCE for all examples
|
||||||
|
function(add_board_target BOARD_TARGET)
|
||||||
|
if (NOT TARGET ${BOARD_TARGET})
|
||||||
|
# Startup & Linker script
|
||||||
|
set(STARTUP_FILE_GNU ${ST_CMSIS}/Source/Templates/gcc/startup_${MCU_VARIANT}.s)
|
||||||
|
set(STARTUP_FILE_Clang ${STARTUP_FILE_GNU})
|
||||||
|
set(STARTUP_FILE_IAR ${ST_CMSIS}/Source/Templates/iar/startup_${MCU_VARIANT}.s)
|
||||||
|
|
||||||
|
set(LD_FILE_Clang ${LD_FILE_GNU})
|
||||||
|
if (NOT DEFINED LD_FILE_IAR)
|
||||||
|
set(LD_FILE_IAR ${ST_CMSIS}/Source/Templates/iar/linker/${MCU_VARIANT}_flash.icf)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
add_library(${BOARD_TARGET} STATIC
|
||||||
|
${ST_CMSIS}/Source/Templates/system_${ST_PREFIX}.c
|
||||||
|
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal.c
|
||||||
|
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_cortex.c
|
||||||
|
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_rcc.c
|
||||||
|
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_rcc_ex.c
|
||||||
|
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_gpio.c
|
||||||
|
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_uart.c
|
||||||
|
${STARTUP_FILE_${CMAKE_C_COMPILER_ID}}
|
||||||
|
)
|
||||||
|
target_include_directories(${BOARD_TARGET} PUBLIC
|
||||||
|
${CMAKE_CURRENT_FUNCTION_LIST_DIR}
|
||||||
|
${CMSIS_5}/CMSIS/Core/Include
|
||||||
|
${ST_CMSIS}/Include
|
||||||
|
${ST_HAL_DRIVER}/Inc
|
||||||
|
)
|
||||||
|
#target_compile_options(${BOARD_TARGET} PUBLIC)
|
||||||
|
#target_compile_definitions(${BOARD_TARGET} PUBLIC)
|
||||||
|
|
||||||
|
update_board(${BOARD_TARGET})
|
||||||
|
|
||||||
|
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||||
|
target_link_options(${BOARD_TARGET} PUBLIC
|
||||||
|
"LINKER:--script=${LD_FILE_GNU}"
|
||||||
|
-nostartfiles
|
||||||
|
--specs=nosys.specs --specs=nano.specs
|
||||||
|
)
|
||||||
|
elseif (CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||||
|
target_link_options(${BOARD_TARGET} PUBLIC
|
||||||
|
"LINKER:--script=${LD_FILE_Clang}"
|
||||||
|
)
|
||||||
|
elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR")
|
||||||
|
target_link_options(${BOARD_TARGET} PUBLIC
|
||||||
|
"LINKER:--config=${LD_FILE_IAR}"
|
||||||
|
)
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
|
#------------------------------------
|
||||||
|
# Functions
|
||||||
|
#------------------------------------
|
||||||
|
function(family_configure_example TARGET RTOS)
|
||||||
|
family_configure_common(${TARGET} ${RTOS})
|
||||||
|
|
||||||
|
# Board target
|
||||||
|
add_board_target(board_${BOARD})
|
||||||
|
|
||||||
|
#---------- Port Specific ----------
|
||||||
|
# These files are built for each example since it depends on example's tusb_config.h
|
||||||
|
target_sources(${TARGET} PUBLIC
|
||||||
|
# BSP
|
||||||
|
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/family.c
|
||||||
|
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../board.c
|
||||||
|
)
|
||||||
|
target_include_directories(${TARGET} PUBLIC
|
||||||
|
# family, hw, board
|
||||||
|
${CMAKE_CURRENT_FUNCTION_LIST_DIR}
|
||||||
|
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../
|
||||||
|
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add TinyUSB target and port source
|
||||||
|
family_add_tinyusb(${TARGET} OPT_MCU_STM32F2 ${RTOS})
|
||||||
|
target_sources(${TARGET}-tinyusb PUBLIC
|
||||||
|
${TOP}/src/portable/synopsys/dwc2/dcd_dwc2.c
|
||||||
|
)
|
||||||
|
target_link_libraries(${TARGET}-tinyusb PUBLIC board_${BOARD})
|
||||||
|
|
||||||
|
# Link dependencies
|
||||||
|
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
|
||||||
|
|
||||||
|
# Flashing
|
||||||
|
family_flash_stlink(${TARGET})
|
||||||
|
family_flash_jlink(${TARGET})
|
||||||
|
endfunction()
|
10
hw/bsp/stm32f3/boards/stm32f303disco/board.cmake
Normal file
10
hw/bsp/stm32f3/boards/stm32f303disco/board.cmake
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
set(MCU_VARIANT stm32f303xc)
|
||||||
|
set(JLINK_DEVICE stm32f303vc)
|
||||||
|
|
||||||
|
set(LD_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/STM32F303VCTx_FLASH.ld)
|
||||||
|
|
||||||
|
function(update_board TARGET)
|
||||||
|
target_compile_definitions(${TARGET} PUBLIC
|
||||||
|
STM32F303xC
|
||||||
|
)
|
||||||
|
endfunction()
|
61
hw/bsp/stm32f3/boards/stm32f303disco/board.h
Normal file
61
hw/bsp/stm32f3/boards/stm32f303disco/board.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#ifndef BOARD_H
|
||||||
|
#define BOARD_H
|
||||||
|
|
||||||
|
#define LED_PORT GPIOE
|
||||||
|
#define LED_PIN GPIO_PIN_9
|
||||||
|
#define LED_STATE_ON 1
|
||||||
|
|
||||||
|
#define BUTTON_PORT GPIOA
|
||||||
|
#define BUTTON_PIN GPIO_PIN_0
|
||||||
|
#define BUTTON_STATE_ACTIVE 1
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System Clock Configuration
|
||||||
|
* The system Clock is configured as follow :
|
||||||
|
* System Clock source = PLL (HSE)
|
||||||
|
* SYSCLK(Hz) = 72000000
|
||||||
|
* HCLK(Hz) = 72000000
|
||||||
|
* AHB Prescaler = 1
|
||||||
|
* APB1 Prescaler = 2
|
||||||
|
* APB2 Prescaler = 1
|
||||||
|
* HSE Frequency(Hz) = 8000000
|
||||||
|
* HSE PREDIV = 1
|
||||||
|
* PLLMUL = RCC_PLL_MUL9 (9)
|
||||||
|
* Flash Latency(WS) = 2
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static inline void SystemClock_Config(void) {
|
||||||
|
RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
||||||
|
RCC_OscInitTypeDef RCC_OscInitStruct;
|
||||||
|
RCC_PeriphCLKInitTypeDef RCC_PeriphClkInit;
|
||||||
|
|
||||||
|
/* Enable HSE Oscillator and activate PLL with HSE as source */
|
||||||
|
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
||||||
|
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
||||||
|
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
||||||
|
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||||
|
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||||
|
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
|
||||||
|
HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
||||||
|
|
||||||
|
/* Configures the USB clock */
|
||||||
|
HAL_RCCEx_GetPeriphCLKConfig(&RCC_PeriphClkInit);
|
||||||
|
RCC_PeriphClkInit.USBClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphClkInit);
|
||||||
|
|
||||||
|
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
|
||||||
|
clocks dividers */
|
||||||
|
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
|
||||||
|
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
||||||
|
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
||||||
|
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
||||||
|
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
||||||
|
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
|
||||||
|
|
||||||
|
/* Enable Power Clock */
|
||||||
|
__HAL_RCC_PWR_CLK_ENABLE();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -24,8 +24,9 @@
|
|||||||
* This file is part of the TinyUSB stack.
|
* This file is part of the TinyUSB stack.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "bsp/board_api.h"
|
|
||||||
#include "stm32f3xx_hal.h"
|
#include "stm32f3xx_hal.h"
|
||||||
|
#include "bsp/board_api.h"
|
||||||
|
#include "board.h"
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Forward USB interrupt events to TinyUSB IRQ Handler
|
// Forward USB interrupt events to TinyUSB IRQ Handler
|
||||||
@ -38,23 +39,20 @@
|
|||||||
// USB high-priority interrupt (Channel 74): Triggered only by a correct
|
// USB high-priority interrupt (Channel 74): Triggered only by a correct
|
||||||
// transfer event for isochronous and double-buffer bulk transfer to reach
|
// transfer event for isochronous and double-buffer bulk transfer to reach
|
||||||
// the highest possible transfer rate.
|
// the highest possible transfer rate.
|
||||||
void USB_HP_IRQHandler(void)
|
void USB_HP_IRQHandler(void) {
|
||||||
{
|
|
||||||
tud_int_handler(0);
|
tud_int_handler(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// USB low-priority interrupt (Channel 75): Triggered by all USB events
|
// USB low-priority interrupt (Channel 75): Triggered by all USB events
|
||||||
// (Correct transfer, USB reset, etc.). The firmware has to check the
|
// (Correct transfer, USB reset, etc.). The firmware has to check the
|
||||||
// interrupt source before serving the interrupt.
|
// interrupt source before serving the interrupt.
|
||||||
void USB_LP_IRQHandler(void)
|
void USB_LP_IRQHandler(void) {
|
||||||
{
|
|
||||||
tud_int_handler(0);
|
tud_int_handler(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// USB wakeup interrupt (Channel 76): Triggered by the wakeup event from the USB
|
// USB wakeup interrupt (Channel 76): Triggered by the wakeup event from the USB
|
||||||
// Suspend mode.
|
// Suspend mode.
|
||||||
void USBWakeUp_RMP_IRQHandler(void)
|
void USBWakeUp_RMP_IRQHandler(void) {
|
||||||
{
|
|
||||||
tud_int_handler(0);
|
tud_int_handler(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,69 +60,11 @@ void USBWakeUp_RMP_IRQHandler(void)
|
|||||||
// MACRO TYPEDEF CONSTANT ENUM
|
// MACRO TYPEDEF CONSTANT ENUM
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
#define LED_PORT GPIOE
|
|
||||||
#define LED_PIN GPIO_PIN_9
|
|
||||||
#define LED_STATE_ON 1
|
|
||||||
|
|
||||||
#define BUTTON_PORT GPIOA
|
void board_init(void) {
|
||||||
#define BUTTON_PIN GPIO_PIN_0
|
|
||||||
#define BUTTON_STATE_ACTIVE 1
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief System Clock Configuration
|
|
||||||
* The system Clock is configured as follow :
|
|
||||||
* System Clock source = PLL (HSE)
|
|
||||||
* SYSCLK(Hz) = 72000000
|
|
||||||
* HCLK(Hz) = 72000000
|
|
||||||
* AHB Prescaler = 1
|
|
||||||
* APB1 Prescaler = 2
|
|
||||||
* APB2 Prescaler = 1
|
|
||||||
* HSE Frequency(Hz) = 8000000
|
|
||||||
* HSE PREDIV = 1
|
|
||||||
* PLLMUL = RCC_PLL_MUL9 (9)
|
|
||||||
* Flash Latency(WS) = 2
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
static void SystemClock_Config(void)
|
|
||||||
{
|
|
||||||
RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
|
||||||
RCC_OscInitTypeDef RCC_OscInitStruct;
|
|
||||||
RCC_PeriphCLKInitTypeDef RCC_PeriphClkInit;
|
|
||||||
|
|
||||||
/* Enable HSE Oscillator and activate PLL with HSE as source */
|
|
||||||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
|
|
||||||
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
|
|
||||||
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
|
|
||||||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
|
||||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
|
||||||
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
|
|
||||||
HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
|
||||||
|
|
||||||
/* Configures the USB clock */
|
|
||||||
HAL_RCCEx_GetPeriphCLKConfig(&RCC_PeriphClkInit);
|
|
||||||
RCC_PeriphClkInit.USBClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
|
||||||
HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphClkInit);
|
|
||||||
|
|
||||||
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
|
|
||||||
clocks dividers */
|
|
||||||
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
|
|
||||||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
|
||||||
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
|
||||||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
|
|
||||||
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
|
||||||
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
|
|
||||||
|
|
||||||
/* Enable Power Clock */
|
|
||||||
__HAL_RCC_PWR_CLK_ENABLE();
|
|
||||||
}
|
|
||||||
|
|
||||||
void board_init(void)
|
|
||||||
{
|
|
||||||
SystemClock_Config();
|
SystemClock_Config();
|
||||||
|
|
||||||
#if CFG_TUSB_OS == OPT_OS_NONE
|
#if CFG_TUSB_OS == OPT_OS_NONE
|
||||||
// 1ms tick timer
|
// 1ms tick timer
|
||||||
SysTick_Config(SystemCoreClock / 1000);
|
SysTick_Config(SystemCoreClock / 1000);
|
||||||
#endif
|
#endif
|
||||||
@ -135,7 +75,7 @@ void board_init(void)
|
|||||||
|
|
||||||
// LED
|
// LED
|
||||||
__HAL_RCC_GPIOE_CLK_ENABLE();
|
__HAL_RCC_GPIOE_CLK_ENABLE();
|
||||||
GPIO_InitTypeDef GPIO_InitStruct;
|
GPIO_InitTypeDef GPIO_InitStruct;
|
||||||
GPIO_InitStruct.Pin = LED_PIN;
|
GPIO_InitStruct.Pin = LED_PIN;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||||
@ -167,50 +107,46 @@ void board_init(void)
|
|||||||
// Board porting API
|
// Board porting API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
void board_led_write(bool state)
|
void board_led_write(bool state) {
|
||||||
{
|
HAL_GPIO_WritePin(LED_PORT, LED_PIN, state ? LED_STATE_ON : (1 - LED_STATE_ON));
|
||||||
HAL_GPIO_WritePin(LED_PORT, LED_PIN, state ? LED_STATE_ON : (1-LED_STATE_ON));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t board_button_read(void)
|
uint32_t board_button_read(void) {
|
||||||
{
|
|
||||||
return BUTTON_STATE_ACTIVE == HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON_PIN);
|
return BUTTON_STATE_ACTIVE == HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON_PIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
int board_uart_read(uint8_t* buf, int len)
|
int board_uart_read(uint8_t* buf, int len) {
|
||||||
{
|
(void) buf;
|
||||||
(void) buf; (void) len;
|
(void) len;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int board_uart_write(void const * buf, int len)
|
int board_uart_write(void const* buf, int len) {
|
||||||
{
|
(void) buf;
|
||||||
(void) buf; (void) len;
|
(void) len;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CFG_TUSB_OS == OPT_OS_NONE
|
#if CFG_TUSB_OS == OPT_OS_NONE
|
||||||
volatile uint32_t system_ticks = 0;
|
volatile uint32_t system_ticks = 0;
|
||||||
void SysTick_Handler (void)
|
|
||||||
{
|
void SysTick_Handler(void) {
|
||||||
HAL_IncTick();
|
HAL_IncTick();
|
||||||
system_ticks++;
|
system_ticks++;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t board_millis(void)
|
uint32_t board_millis(void) {
|
||||||
{
|
|
||||||
return system_ticks;
|
return system_ticks;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void HardFault_Handler (void)
|
void HardFault_Handler(void) {
|
||||||
{
|
|
||||||
asm("bkpt");
|
asm("bkpt");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Required by __libc_init_array in startup code if we are compiling using
|
// Required by __libc_init_array in startup code if we are compiling using
|
||||||
// -nostdlib/-nostartfiles.
|
// -nostdlib/-nostartfiles.
|
||||||
void _init(void)
|
void _init(void) {
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
110
hw/bsp/stm32f3/family.cmake
Normal file
110
hw/bsp/stm32f3/family.cmake
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
include_guard()
|
||||||
|
|
||||||
|
set(ST_FAMILY f3)
|
||||||
|
set(ST_PREFIX stm32${ST_FAMILY}xx)
|
||||||
|
|
||||||
|
set(ST_HAL_DRIVER ${TOP}/hw/mcu/st/stm32${ST_FAMILY}xx_hal_driver)
|
||||||
|
set(ST_CMSIS ${TOP}/hw/mcu/st/cmsis_device_${ST_FAMILY})
|
||||||
|
set(CMSIS_5 ${TOP}/lib/CMSIS_5)
|
||||||
|
|
||||||
|
# include board specific
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
|
||||||
|
|
||||||
|
# toolchain set up
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR cortex-m3 CACHE INTERNAL "System Processor")
|
||||||
|
set(CMAKE_TOOLCHAIN_FILE ${TOP}/examples/build_system/cmake/toolchain/arm_${TOOLCHAIN}.cmake)
|
||||||
|
|
||||||
|
set(FAMILY_MCUS STM32F3 CACHE INTERNAL "")
|
||||||
|
|
||||||
|
|
||||||
|
#------------------------------------
|
||||||
|
# BOARD_TARGET
|
||||||
|
#------------------------------------
|
||||||
|
# only need to be built ONCE for all examples
|
||||||
|
function(add_board_target BOARD_TARGET)
|
||||||
|
if (NOT TARGET ${BOARD_TARGET})
|
||||||
|
# Startup & Linker script
|
||||||
|
set(STARTUP_FILE_GNU ${ST_CMSIS}/Source/Templates/gcc/startup_${MCU_VARIANT}.s)
|
||||||
|
set(STARTUP_FILE_Clang ${STARTUP_FILE_GNU})
|
||||||
|
set(STARTUP_FILE_IAR ${ST_CMSIS}/Source/Templates/iar/startup_${MCU_VARIANT}.s)
|
||||||
|
|
||||||
|
set(LD_FILE_Clang ${LD_FILE_GNU})
|
||||||
|
set(LD_FILE_IAR ${ST_CMSIS}/Source/Templates/iar/linker/${MCU_VARIANT}_flash.icf)
|
||||||
|
|
||||||
|
add_library(${BOARD_TARGET} STATIC
|
||||||
|
${ST_CMSIS}/Source/Templates/system_${ST_PREFIX}.c
|
||||||
|
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal.c
|
||||||
|
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_cortex.c
|
||||||
|
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_rcc.c
|
||||||
|
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_rcc_ex.c
|
||||||
|
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_gpio.c
|
||||||
|
${ST_HAL_DRIVER}/Src/${ST_PREFIX}_hal_uart.c
|
||||||
|
${STARTUP_FILE_${CMAKE_C_COMPILER_ID}}
|
||||||
|
)
|
||||||
|
target_include_directories(${BOARD_TARGET} PUBLIC
|
||||||
|
${CMAKE_CURRENT_FUNCTION_LIST_DIR}
|
||||||
|
${CMSIS_5}/CMSIS/Core/Include
|
||||||
|
${ST_CMSIS}/Include
|
||||||
|
${ST_HAL_DRIVER}/Inc
|
||||||
|
)
|
||||||
|
#target_compile_options(${BOARD_TARGET} PUBLIC)
|
||||||
|
#target_compile_definitions(${BOARD_TARGET} PUBLIC)
|
||||||
|
|
||||||
|
update_board(${BOARD_TARGET})
|
||||||
|
|
||||||
|
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||||
|
target_link_options(${BOARD_TARGET} PUBLIC
|
||||||
|
"LINKER:--script=${LD_FILE_GNU}"
|
||||||
|
-nostartfiles
|
||||||
|
--specs=nosys.specs --specs=nano.specs
|
||||||
|
)
|
||||||
|
elseif (CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||||
|
target_link_options(${BOARD_TARGET} PUBLIC
|
||||||
|
"LINKER:--script=${LD_FILE_Clang}"
|
||||||
|
)
|
||||||
|
elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR")
|
||||||
|
target_link_options(${BOARD_TARGET} PUBLIC
|
||||||
|
"LINKER:--config=${LD_FILE_IAR}"
|
||||||
|
)
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
|
#------------------------------------
|
||||||
|
# Functions
|
||||||
|
#------------------------------------
|
||||||
|
function(family_configure_example TARGET RTOS)
|
||||||
|
family_configure_common(${TARGET} ${RTOS})
|
||||||
|
|
||||||
|
# Board target
|
||||||
|
add_board_target(board_${BOARD})
|
||||||
|
|
||||||
|
#---------- Port Specific ----------
|
||||||
|
# These files are built for each example since it depends on example's tusb_config.h
|
||||||
|
target_sources(${TARGET} PUBLIC
|
||||||
|
# BSP
|
||||||
|
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/family.c
|
||||||
|
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../board.c
|
||||||
|
)
|
||||||
|
target_include_directories(${TARGET} PUBLIC
|
||||||
|
# family, hw, board
|
||||||
|
${CMAKE_CURRENT_FUNCTION_LIST_DIR}
|
||||||
|
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../
|
||||||
|
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add TinyUSB target and port source
|
||||||
|
family_add_tinyusb(${TARGET} OPT_MCU_STM32F3 ${RTOS})
|
||||||
|
target_sources(${TARGET}-tinyusb PUBLIC
|
||||||
|
${TOP}/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c
|
||||||
|
)
|
||||||
|
target_link_libraries(${TARGET}-tinyusb PUBLIC board_${BOARD})
|
||||||
|
|
||||||
|
# Link dependencies
|
||||||
|
target_link_libraries(${TARGET} PUBLIC board_${BOARD} ${TARGET}-tinyusb)
|
||||||
|
|
||||||
|
# Flashing
|
||||||
|
family_flash_stlink(${TARGET})
|
||||||
|
family_flash_jlink(${TARGET})
|
||||||
|
endfunction()
|
@ -440,11 +440,15 @@ static void reset_core(dwc2_regs_t* dwc2) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool phy_hs_supported(dwc2_regs_t* dwc2) {
|
static bool phy_hs_supported(dwc2_regs_t* dwc2) {
|
||||||
// note: esp32 incorrect report its hs_phy_type as utmi
|
(void) dwc2;
|
||||||
|
|
||||||
#if TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3)
|
#if TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3)
|
||||||
|
// note: esp32 incorrect report its hs_phy_type as utmi
|
||||||
|
return false;
|
||||||
|
#elif !TUD_OPT_HIGH_SPEED
|
||||||
return false;
|
return false;
|
||||||
#else
|
#else
|
||||||
return TUD_OPT_HIGH_SPEED && dwc2->ghwcfg2_bm.hs_phy_type != HS_PHY_TYPE_NONE;
|
return dwc2->ghwcfg2_bm.hs_phy_type != HS_PHY_TYPE_NONE;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user