diff options
| author | joeycastillo <joeycastillo@utexas.edu> | 2021-08-30 14:42:11 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-30 14:42:11 -0400 | 
| commit | eb3d9b26cbda2d2612f11eb39843b221224f1fa7 (patch) | |
| tree | 7a514b4d21dd0d2a324a5e1313a144f26bf20799 /tinyusb/hw/bsp/stm32h7 | |
| parent | ee9cc322d301631c9ff0751d9bed717c6492b6a5 (diff) | |
| parent | b0845cc3f1a8234a30c980eccf10e44765e4e105 (diff) | |
| download | Sensor-Watch-eb3d9b26cbda2d2612f11eb39843b221224f1fa7.tar.gz Sensor-Watch-eb3d9b26cbda2d2612f11eb39843b221224f1fa7.tar.bz2 Sensor-Watch-eb3d9b26cbda2d2612f11eb39843b221224f1fa7.zip  | |
Merge pull request #9 from joeycastillo/usb-refactor
USB refactor / Makefile simplification
Diffstat (limited to 'tinyusb/hw/bsp/stm32h7')
| -rwxr-xr-x | tinyusb/hw/bsp/stm32h7/boards/stm32h743eval/board.h | 132 | ||||
| -rwxr-xr-x | tinyusb/hw/bsp/stm32h7/boards/stm32h743eval/board.mk | 13 | ||||
| -rwxr-xr-x | tinyusb/hw/bsp/stm32h7/boards/stm32h743eval/stm32h743xx_flash.ld | 173 | ||||
| -rwxr-xr-x | tinyusb/hw/bsp/stm32h7/boards/stm32h743nucleo/board.h | 116 | ||||
| -rwxr-xr-x | tinyusb/hw/bsp/stm32h7/boards/stm32h743nucleo/board.mk | 13 | ||||
| -rwxr-xr-x | tinyusb/hw/bsp/stm32h7/boards/stm32h743nucleo/stm32h743xx_flash.ld | 173 | ||||
| -rwxr-xr-x | tinyusb/hw/bsp/stm32h7/boards/stm32h745disco/board.h | 134 | ||||
| -rwxr-xr-x | tinyusb/hw/bsp/stm32h7/boards/stm32h745disco/board.mk | 17 | ||||
| -rwxr-xr-x | tinyusb/hw/bsp/stm32h7/family.c | 287 | ||||
| -rwxr-xr-x | tinyusb/hw/bsp/stm32h7/family.mk | 51 | ||||
| -rwxr-xr-x | tinyusb/hw/bsp/stm32h7/stm32h7xx_hal_conf.h | 483 | 
11 files changed, 1592 insertions, 0 deletions
diff --git a/tinyusb/hw/bsp/stm32h7/boards/stm32h743eval/board.h b/tinyusb/hw/bsp/stm32h7/boards/stm32h743eval/board.h new file mode 100755 index 00000000..ab263d2b --- /dev/null +++ b/tinyusb/hw/bsp/stm32h7/boards/stm32h743eval/board.h @@ -0,0 +1,132 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2021, Ha Thach (tinyusb.org) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * This file is part of the TinyUSB stack. + */ + +#ifndef BOARD_H_ +#define BOARD_H_ + +#ifdef __cplusplus + extern "C" { +#endif + +#define LED_PORT              GPIOA +#define LED_PIN               GPIO_PIN_4 +#define LED_STATE_ON          1 + +// Tamper push-button +#define BUTTON_PORT           GPIOC +#define BUTTON_PIN            GPIO_PIN_13 +#define BUTTON_STATE_ACTIVE   0 + +// Need to change jumper setting J7 and J8 from RS-232 to STLink +#define UART_DEV              USART1 +#define UART_CLK_EN           __HAL_RCC_USART1_CLK_ENABLE +#define UART_GPIO_PORT        GPIOB +#define UART_GPIO_AF          GPIO_AF4_USART1 +#define UART_TX_PIN           GPIO_PIN_14 +#define UART_RX_PIN           GPIO_PIN_15 + +// VBUS Sense detection +#define OTG_FS_VBUS_SENSE     1 +#define OTG_HS_VBUS_SENSE     0 + +//--------------------------------------------------------------------+ +// RCC Clock +//--------------------------------------------------------------------+ +static inline void board_stm32h7_clock_init(void) +{ +  RCC_ClkInitTypeDef RCC_ClkInitStruct; +  RCC_OscInitTypeDef RCC_OscInitStruct; +  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; + +  /*!< Supply configuration update enable */ +  HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY); + +  /* The voltage scaling allows optimizing the power consumption when the device is +     clocked below the maximum system frequency, to update the voltage scaling value +     regarding system frequency refer to product datasheet.  */ +  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + +  while ((PWR->D3CR & (PWR_D3CR_VOSRDY)) != PWR_D3CR_VOSRDY) {} + +  /* Enable HSE Oscillator and activate PLL with HSE as source */ +  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; +  RCC_OscInitStruct.HSEState = RCC_HSE_ON; +  RCC_OscInitStruct.HSIState = RCC_HSI_OFF; +  RCC_OscInitStruct.CSIState = RCC_CSI_OFF; +  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; +  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + +  /* PLL1 for System Clock */ +  RCC_OscInitStruct.PLL.PLLM = 5; +  RCC_OscInitStruct.PLL.PLLN = 160; +  RCC_OscInitStruct.PLL.PLLFRACN = 0; +  RCC_OscInitStruct.PLL.PLLP = 2; +  RCC_OscInitStruct.PLL.PLLR = 2; +  RCC_OscInitStruct.PLL.PLLQ = 4; + +  RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOMEDIUM; +  RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2; +  HAL_RCC_OscConfig(&RCC_OscInitStruct); + +  /* PLL3 for USB Clock */ +  PeriphClkInitStruct.PLL3.PLL3M = 25; +  PeriphClkInitStruct.PLL3.PLL3N = 336; +  PeriphClkInitStruct.PLL3.PLL3FRACN = 0; +  PeriphClkInitStruct.PLL3.PLL3P = 2; +  PeriphClkInitStruct.PLL3.PLL3R = 2; +  PeriphClkInitStruct.PLL3.PLL3Q = 7; + +  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB; +  PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL3; +  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); + +  /* Select PLL as system clock source and configure  bus clocks dividers */ +  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | \ +  RCC_CLOCKTYPE_PCLK2  | RCC_CLOCKTYPE_D3PCLK1); + +  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; +  RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; +  RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2; +  RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; +  RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2; +  RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV1; +  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4); + +  /*activate CSI clock mondatory for I/O Compensation Cell*/ +  __HAL_RCC_CSI_ENABLE() ; + +  /* Enable SYSCFG clock mondatory for I/O Compensation Cell */ +  __HAL_RCC_SYSCFG_CLK_ENABLE() ; + +  /* Enables the I/O Compensation Cell */ +  HAL_EnableCompensationCell(); +} + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/tinyusb/hw/bsp/stm32h7/boards/stm32h743eval/board.mk b/tinyusb/hw/bsp/stm32h7/boards/stm32h743eval/board.mk new file mode 100755 index 00000000..96d14a79 --- /dev/null +++ b/tinyusb/hw/bsp/stm32h7/boards/stm32h743eval/board.mk @@ -0,0 +1,13 @@ +CFLAGS += -DSTM32H743xx -DHSE_VALUE=25000000 + +# Default is Highspeed port +PORT ?= 1 + +SRC_S += $(ST_CMSIS)/Source/Templates/gcc/startup_stm32h743xx.s +LD_FILE = $(BOARD_PATH)/stm32h743xx_flash.ld + +# For flash-jlink target +JLINK_DEVICE = stm32h743xi + +# flash target using on-board stlink +flash: flash-stlink diff --git a/tinyusb/hw/bsp/stm32h7/boards/stm32h743eval/stm32h743xx_flash.ld b/tinyusb/hw/bsp/stm32h7/boards/stm32h743eval/stm32h743xx_flash.ld new file mode 100755 index 00000000..59b9ff4d --- /dev/null +++ b/tinyusb/hw/bsp/stm32h7/boards/stm32h743eval/stm32h743xx_flash.ld @@ -0,0 +1,173 @@ +/* +***************************************************************************** +** + +**  File        : LinkerScript.ld +** +**  Abstract    : Linker script for STM32H743XIHx Device with +**                2048KByte FLASH, 128KByte RAM +** +**                Set heap size, stack size and stack location according +**                to application requirements. +** +**                Set memory bank area and size if external memory is used. +** +**  Target      : STMicroelectronics STM32 +** +** +**  Distribution: The file is distributed as is, without any warranty +**                of any kind. +** +**  (c)Copyright Ac6. +**  You may use this file as-is or modify it according to the needs of your +**  project. Distribution of this file (unmodified or modified) is not +**  permitted. Ac6 permit registered System Workbench for MCU users the +**  rights to distribute the assembled, compiled & linked contents of this +**  file as part of an application binary file, provided that it is built +**  using the System Workbench for MCU toolchain. +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20020000;    /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x200;      /* required amount of heap  */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +DTCMRAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128K +RAM_D1 (xrw)      : ORIGIN = 0x24000000, LENGTH = 512K +RAM_D2 (xrw)      : ORIGIN = 0x30000000, LENGTH = 288K +RAM_D3 (xrw)      : ORIGIN = 0x38000000, LENGTH = 64K +ITCMRAM (xrw)      : ORIGIN = 0x00000000, LENGTH = 64K +FLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 2048K +} + +/* Define output sections */ +SECTIONS +{ +  /* The startup code goes first into FLASH */ +  .isr_vector : +  { +    . = ALIGN(4); +    KEEP(*(.isr_vector)) /* Startup code */ +    . = ALIGN(4); +  } >FLASH + +  /* The program code and other data goes into FLASH */ +  .text : +  { +    . = ALIGN(4); +    *(.text)           /* .text sections (code) */ +    *(.text*)          /* .text* sections (code) */ +    *(.glue_7)         /* glue arm to thumb code */ +    *(.glue_7t)        /* glue thumb to arm code */ +    *(.eh_frame) + +    KEEP (*(.init)) +    KEEP (*(.fini)) + +    . = ALIGN(4); +    _etext = .;        /* define a global symbols at end of code */ +  } >FLASH + +  /* Constant data goes into FLASH */ +  .rodata : +  { +    . = ALIGN(4); +    *(.rodata)         /* .rodata sections (constants, strings, etc.) */ +    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */ +    . = ALIGN(4); +  } >FLASH + +  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH +  .ARM : { +    __exidx_start = .; +    *(.ARM.exidx*) +    __exidx_end = .; +  } >FLASH + +  .preinit_array     : +  { +    PROVIDE_HIDDEN (__preinit_array_start = .); +    KEEP (*(.preinit_array*)) +    PROVIDE_HIDDEN (__preinit_array_end = .); +  } >FLASH +  .init_array : +  { +    PROVIDE_HIDDEN (__init_array_start = .); +    KEEP (*(SORT(.init_array.*))) +    KEEP (*(.init_array*)) +    PROVIDE_HIDDEN (__init_array_end = .); +  } >FLASH +  .fini_array : +  { +    PROVIDE_HIDDEN (__fini_array_start = .); +    KEEP (*(SORT(.fini_array.*))) +    KEEP (*(.fini_array*)) +    PROVIDE_HIDDEN (__fini_array_end = .); +  } >FLASH + +  /* used by the startup to initialize data */ +  _sidata = LOADADDR(.data); + +  /* Initialized data sections goes into RAM, load LMA copy after code */ +  .data :  +  { +    . = ALIGN(4); +    _sdata = .;        /* create a global symbol at data start */ +    *(.data)           /* .data sections */ +    *(.data*)          /* .data* sections */ + +    . = ALIGN(4); +    _edata = .;        /* define a global symbol at data end */ +  } >DTCMRAM AT> FLASH + +   +  /* Uninitialized data section */ +  . = ALIGN(4); +  .bss : +  { +    /* This is used by the startup in order to initialize the .bss secion */ +    _sbss = .;         /* define a global symbol at bss start */ +    __bss_start__ = _sbss; +    *(.bss) +    *(.bss*) +    *(COMMON) + +    . = ALIGN(4); +    _ebss = .;         /* define a global symbol at bss end */ +    __bss_end__ = _ebss; +  } >DTCMRAM + +  /* User_heap_stack section, used to check that there is enough RAM left */ +  ._user_heap_stack : +  { +    . = ALIGN(8); +    PROVIDE ( end = . ); +    PROVIDE ( _end = . ); +    . = . + _Min_Heap_Size; +    . = . + _Min_Stack_Size; +    . = ALIGN(8); +  } >DTCMRAM + +   + +  /* Remove information from the standard libraries */ +  /DISCARD/ : +  { +    libc.a ( * ) +    libm.a ( * ) +    libgcc.a ( * ) +  } + +  .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/tinyusb/hw/bsp/stm32h7/boards/stm32h743nucleo/board.h b/tinyusb/hw/bsp/stm32h7/boards/stm32h743nucleo/board.h new file mode 100755 index 00000000..3a31783a --- /dev/null +++ b/tinyusb/hw/bsp/stm32h7/boards/stm32h743nucleo/board.h @@ -0,0 +1,116 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2021, Ha Thach (tinyusb.org) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * This file is part of the TinyUSB stack. + */ + +#ifndef BOARD_H_ +#define BOARD_H_ + +#ifdef __cplusplus + extern "C" { +#endif + +#define LED_PORT              GPIOB +#define LED_PIN               GPIO_PIN_0 +#define LED_STATE_ON          1 + +#define BUTTON_PORT           GPIOC +#define BUTTON_PIN            GPIO_PIN_13 +#define BUTTON_STATE_ACTIVE   1 + +#define UART_DEV              USART3 +#define UART_CLK_EN           __HAL_RCC_USART3_CLK_ENABLE +#define UART_GPIO_PORT        GPIOD +#define UART_GPIO_AF          GPIO_AF7_USART3 +#define UART_TX_PIN           GPIO_PIN_8 +#define UART_RX_PIN           GPIO_PIN_9 + +// VBUS Sense detection +#define OTG_FS_VBUS_SENSE     1 +#define OTG_HS_VBUS_SENSE     0 + +//--------------------------------------------------------------------+ +// RCC Clock +//--------------------------------------------------------------------+ +static inline void board_stm32h7_clock_init(void) +{ +  RCC_ClkInitTypeDef RCC_ClkInitStruct; +  RCC_OscInitTypeDef RCC_OscInitStruct; + +  /* The PWR block is always enabled on the H7 series- there is no clock +     enable. For now, use the default VOS3 scale mode (lowest) and limit clock +     frequencies to avoid potential current draw problems from bus +     power when using the max clock speeds throughout the chip. */ + +  /* Enable HSE Oscillator and activate PLL1 with HSE as source */ +  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; +  RCC_OscInitStruct.HSEState = RCC_HSE_ON; +  RCC_OscInitStruct.HSIState = RCC_HSI_OFF; +  RCC_OscInitStruct.CSIState = RCC_CSI_OFF; +  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 = 336; +  RCC_OscInitStruct.PLL.PLLP = 2; +  RCC_OscInitStruct.PLL.PLLQ = 7; +  RCC_OscInitStruct.PLL.PLLR = 2; /* Unused */ +  RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_0; +  RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOMEDIUM; +  RCC_OscInitStruct.PLL.PLLFRACN = 0; +  HAL_RCC_OscConfig(&RCC_OscInitStruct); + +  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | \ +    RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 | \ +    RCC_CLOCKTYPE_D3PCLK1); +  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; +  RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; +  RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1; + +  /* Unlike on the STM32F4 family, it appears the maximum APB frequencies are +     device-dependent- 120 MHz for this board according to Figure 2 of +     the datasheet. Dividing by half will be safe for now. */ +  RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2; +  RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; +  RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2; +  RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2; + +  /* 4 wait states required for 168MHz and VOS3. */ +  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4); + +  /* Like on F4, on H7, USB's actual peripheral clock and bus clock are +     separate. However, the main system PLL (PLL1) doesn't have a direct +     connection to the USB peripheral clock to generate 48 MHz, so we do this +     dance. This will connect PLL1's Q output to the USB peripheral clock. */ +  RCC_PeriphCLKInitTypeDef RCC_PeriphCLKInitStruct; + +  RCC_PeriphCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB; +  RCC_PeriphCLKInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL; +  HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphCLKInitStruct); +} + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/tinyusb/hw/bsp/stm32h7/boards/stm32h743nucleo/board.mk b/tinyusb/hw/bsp/stm32h7/boards/stm32h743nucleo/board.mk new file mode 100755 index 00000000..fc670fe7 --- /dev/null +++ b/tinyusb/hw/bsp/stm32h7/boards/stm32h743nucleo/board.mk @@ -0,0 +1,13 @@ +CFLAGS += -DSTM32H743xx -DHSE_VALUE=8000000 + +# Default is FulSpeed port +PORT ?= 0 + +SRC_S += $(ST_CMSIS)/Source/Templates/gcc/startup_stm32h743xx.s +LD_FILE = $(BOARD_PATH)/stm32h743xx_flash.ld + +# For flash-jlink target +JLINK_DEVICE = stm32h743zi + +# flash target using on-board stlink +flash: flash-stlink diff --git a/tinyusb/hw/bsp/stm32h7/boards/stm32h743nucleo/stm32h743xx_flash.ld b/tinyusb/hw/bsp/stm32h7/boards/stm32h743nucleo/stm32h743xx_flash.ld new file mode 100755 index 00000000..59b9ff4d --- /dev/null +++ b/tinyusb/hw/bsp/stm32h7/boards/stm32h743nucleo/stm32h743xx_flash.ld @@ -0,0 +1,173 @@ +/* +***************************************************************************** +** + +**  File        : LinkerScript.ld +** +**  Abstract    : Linker script for STM32H743XIHx Device with +**                2048KByte FLASH, 128KByte RAM +** +**                Set heap size, stack size and stack location according +**                to application requirements. +** +**                Set memory bank area and size if external memory is used. +** +**  Target      : STMicroelectronics STM32 +** +** +**  Distribution: The file is distributed as is, without any warranty +**                of any kind. +** +**  (c)Copyright Ac6. +**  You may use this file as-is or modify it according to the needs of your +**  project. Distribution of this file (unmodified or modified) is not +**  permitted. Ac6 permit registered System Workbench for MCU users the +**  rights to distribute the assembled, compiled & linked contents of this +**  file as part of an application binary file, provided that it is built +**  using the System Workbench for MCU toolchain. +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20020000;    /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x200;      /* required amount of heap  */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +DTCMRAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128K +RAM_D1 (xrw)      : ORIGIN = 0x24000000, LENGTH = 512K +RAM_D2 (xrw)      : ORIGIN = 0x30000000, LENGTH = 288K +RAM_D3 (xrw)      : ORIGIN = 0x38000000, LENGTH = 64K +ITCMRAM (xrw)      : ORIGIN = 0x00000000, LENGTH = 64K +FLASH (rx)      : ORIGIN = 0x8000000, LENGTH = 2048K +} + +/* Define output sections */ +SECTIONS +{ +  /* The startup code goes first into FLASH */ +  .isr_vector : +  { +    . = ALIGN(4); +    KEEP(*(.isr_vector)) /* Startup code */ +    . = ALIGN(4); +  } >FLASH + +  /* The program code and other data goes into FLASH */ +  .text : +  { +    . = ALIGN(4); +    *(.text)           /* .text sections (code) */ +    *(.text*)          /* .text* sections (code) */ +    *(.glue_7)         /* glue arm to thumb code */ +    *(.glue_7t)        /* glue thumb to arm code */ +    *(.eh_frame) + +    KEEP (*(.init)) +    KEEP (*(.fini)) + +    . = ALIGN(4); +    _etext = .;        /* define a global symbols at end of code */ +  } >FLASH + +  /* Constant data goes into FLASH */ +  .rodata : +  { +    . = ALIGN(4); +    *(.rodata)         /* .rodata sections (constants, strings, etc.) */ +    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */ +    . = ALIGN(4); +  } >FLASH + +  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH +  .ARM : { +    __exidx_start = .; +    *(.ARM.exidx*) +    __exidx_end = .; +  } >FLASH + +  .preinit_array     : +  { +    PROVIDE_HIDDEN (__preinit_array_start = .); +    KEEP (*(.preinit_array*)) +    PROVIDE_HIDDEN (__preinit_array_end = .); +  } >FLASH +  .init_array : +  { +    PROVIDE_HIDDEN (__init_array_start = .); +    KEEP (*(SORT(.init_array.*))) +    KEEP (*(.init_array*)) +    PROVIDE_HIDDEN (__init_array_end = .); +  } >FLASH +  .fini_array : +  { +    PROVIDE_HIDDEN (__fini_array_start = .); +    KEEP (*(SORT(.fini_array.*))) +    KEEP (*(.fini_array*)) +    PROVIDE_HIDDEN (__fini_array_end = .); +  } >FLASH + +  /* used by the startup to initialize data */ +  _sidata = LOADADDR(.data); + +  /* Initialized data sections goes into RAM, load LMA copy after code */ +  .data :  +  { +    . = ALIGN(4); +    _sdata = .;        /* create a global symbol at data start */ +    *(.data)           /* .data sections */ +    *(.data*)          /* .data* sections */ + +    . = ALIGN(4); +    _edata = .;        /* define a global symbol at data end */ +  } >DTCMRAM AT> FLASH + +   +  /* Uninitialized data section */ +  . = ALIGN(4); +  .bss : +  { +    /* This is used by the startup in order to initialize the .bss secion */ +    _sbss = .;         /* define a global symbol at bss start */ +    __bss_start__ = _sbss; +    *(.bss) +    *(.bss*) +    *(COMMON) + +    . = ALIGN(4); +    _ebss = .;         /* define a global symbol at bss end */ +    __bss_end__ = _ebss; +  } >DTCMRAM + +  /* User_heap_stack section, used to check that there is enough RAM left */ +  ._user_heap_stack : +  { +    . = ALIGN(8); +    PROVIDE ( end = . ); +    PROVIDE ( _end = . ); +    . = . + _Min_Heap_Size; +    . = . + _Min_Stack_Size; +    . = ALIGN(8); +  } >DTCMRAM + +   + +  /* Remove information from the standard libraries */ +  /DISCARD/ : +  { +    libc.a ( * ) +    libm.a ( * ) +    libgcc.a ( * ) +  } + +  .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/tinyusb/hw/bsp/stm32h7/boards/stm32h745disco/board.h b/tinyusb/hw/bsp/stm32h7/boards/stm32h745disco/board.h new file mode 100755 index 00000000..30a7a9ff --- /dev/null +++ b/tinyusb/hw/bsp/stm32h7/boards/stm32h745disco/board.h @@ -0,0 +1,134 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2021, Ha Thach (tinyusb.org) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * This file is part of the TinyUSB stack. + */ + +#ifndef BOARD_H_ +#define BOARD_H_ + +#ifdef __cplusplus + extern "C" { +#endif + +#define LED_PORT              GPIOJ +#define LED_PIN               GPIO_PIN_2 +#define LED_STATE_ON          1 + +// Blue push-button +#define BUTTON_PORT           GPIOC +#define BUTTON_PIN            GPIO_PIN_13 +#define BUTTON_STATE_ACTIVE   1 + +// UART +#define UART_DEV              USART3 +#define UART_CLK_EN           __HAL_RCC_USART3_CLK_ENABLE +#define UART_GPIO_PORT        GPIOB +#define UART_GPIO_AF          GPIO_AF7_USART3 +#define UART_TX_PIN           GPIO_PIN_10 +#define UART_RX_PIN           GPIO_PIN_11 + +// VBUS Sense detection +#define OTG_FS_VBUS_SENSE     1 +#define OTG_HS_VBUS_SENSE     0 + +//--------------------------------------------------------------------+ +// RCC Clock +//--------------------------------------------------------------------+ +static inline void board_stm32h7_clock_init(void) +{ +  RCC_ClkInitTypeDef RCC_ClkInitStruct; +  RCC_OscInitTypeDef RCC_OscInitStruct; +  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; + +  /*!< Supply configuration update enable */ +  /* For STM32H750XB, use "HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);" */ +  HAL_PWREx_ConfigSupply(PWR_DIRECT_SMPS_SUPPLY); + +  /* The voltage scaling allows optimizing the power consumption when the +     device is clocked below the maximum system frequency, to update the +     voltage scaling value regarding system frequency refer to product +     datasheet.  */ +  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + +  while ((PWR->D3CR & (PWR_D3CR_VOSRDY)) != PWR_D3CR_VOSRDY) {} + +  /* Enable HSE Oscillator and activate PLL with HSE as source */ +  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; +  RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS; +  RCC_OscInitStruct.HSIState = RCC_HSI_OFF; +  RCC_OscInitStruct.CSIState = RCC_CSI_OFF; +  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; +  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + +  /* PLL1 for System Clock */ +  RCC_OscInitStruct.PLL.PLLM = 5; +  RCC_OscInitStruct.PLL.PLLN = 160; +  RCC_OscInitStruct.PLL.PLLFRACN = 0; +  RCC_OscInitStruct.PLL.PLLP = 2; +  RCC_OscInitStruct.PLL.PLLR = 2; +  RCC_OscInitStruct.PLL.PLLQ = 4; + +  RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOMEDIUM; +  RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2; +  HAL_RCC_OscConfig(&RCC_OscInitStruct); + +  /* PLL3 for USB Clock */ +  PeriphClkInitStruct.PLL3.PLL3M = 25; +  PeriphClkInitStruct.PLL3.PLL3N = 336; +  PeriphClkInitStruct.PLL3.PLL3FRACN = 0; +  PeriphClkInitStruct.PLL3.PLL3P = 2; +  PeriphClkInitStruct.PLL3.PLL3R = 2; +  PeriphClkInitStruct.PLL3.PLL3Q = 7; + +  PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USB; +  PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_PLL3; +  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); + +  /* Select PLL as system clock source and configure  bus clocks dividers */ +  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_D1PCLK1 | RCC_CLOCKTYPE_PCLK1 | \ +  RCC_CLOCKTYPE_PCLK2  | RCC_CLOCKTYPE_D3PCLK1); + +  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; +  RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; +  RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2; +  RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; +  RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2; +  RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV1; +  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4); + +  /*activate CSI clock mondatory for I/O Compensation Cell*/ +  __HAL_RCC_CSI_ENABLE() ; + +  /* Enable SYSCFG clock mondatory for I/O Compensation Cell */ +  __HAL_RCC_SYSCFG_CLK_ENABLE() ; + +  /* Enables the I/O Compensation Cell */ +  HAL_EnableCompensationCell(); +} + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/tinyusb/hw/bsp/stm32h7/boards/stm32h745disco/board.mk b/tinyusb/hw/bsp/stm32h7/boards/stm32h745disco/board.mk new file mode 100755 index 00000000..384065bd --- /dev/null +++ b/tinyusb/hw/bsp/stm32h7/boards/stm32h745disco/board.mk @@ -0,0 +1,17 @@ +# STM32H745I-DISCO uses OTG_FS +# FIXME: Reset enumerates, un/replug USB plug does not enumerate + +CFLAGS += -DSTM32H745xx -DCORE_CM7 -DHSE_VALUE=25000000 + +# Default is FulSpeed port +PORT ?= 0 + +SRC_S += $(ST_CMSIS)/Source/Templates/gcc/startup_stm32h745xx.s +LD_FILE = $(ST_CMSIS)/Source/Templates/gcc/linker/stm32h745xx_flash_CM7.ld + +# For flash-jlink target +JLINK_DEVICE = stm32h745xi_m7 + +# flash target using on-board stlink +flash: flash-stlink + diff --git a/tinyusb/hw/bsp/stm32h7/family.c b/tinyusb/hw/bsp/stm32h7/family.c new file mode 100755 index 00000000..2cbd8741 --- /dev/null +++ b/tinyusb/hw/bsp/stm32h7/family.c @@ -0,0 +1,287 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2019 + *    William D. Jones (thor0505@comcast.net), + *    Ha Thach (tinyusb.org) + *    Uwe Bonnes (bon@elektron.ikp.physik.tu-darmstadt.de + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * This file is part of the TinyUSB stack. + */ + +#include "stm32h7xx_hal.h" +#include "bsp/board.h" +#include "board.h" + +//--------------------------------------------------------------------+ +// Forward USB interrupt events to TinyUSB IRQ Handler +//--------------------------------------------------------------------+ + +// Despite being call USB2_OTG +// OTG_FS is marked as RHPort0 by TinyUSB to be consistent across stm32 port +void OTG_FS_IRQHandler(void) +{ +  tud_int_handler(0); +} + +// Despite being call USB2_OTG +// OTG_HS is marked as RHPort1 by TinyUSB to be consistent across stm32 port +void OTG_HS_IRQHandler(void) +{ +  tud_int_handler(1); +} + + +//--------------------------------------------------------------------+ +// MACRO TYPEDEF CONSTANT ENUM +//--------------------------------------------------------------------+ + +UART_HandleTypeDef UartHandle; + +void board_init(void) +{ +  board_stm32h7_clock_init(); + +  // Enable All GPIOs clocks +  __HAL_RCC_GPIOA_CLK_ENABLE(); +  __HAL_RCC_GPIOB_CLK_ENABLE(); // USB ULPI NXT +  __HAL_RCC_GPIOC_CLK_ENABLE(); // USB ULPI NXT +  __HAL_RCC_GPIOD_CLK_ENABLE(); +  __HAL_RCC_GPIOE_CLK_ENABLE(); +  __HAL_RCC_GPIOE_CLK_ENABLE(); +  __HAL_RCC_GPIOG_CLK_ENABLE(); +  __HAL_RCC_GPIOH_CLK_ENABLE(); // USB ULPI NXT +  __HAL_RCC_GPIOI_CLK_ENABLE(); // USB ULPI NXT +  __HAL_RCC_GPIOJ_CLK_ENABLE(); + +  // Enable UART Clock +  UART_CLK_EN(); + +  // 1ms tick timer +  SysTick_Config(SystemCoreClock / 1000); + +#if CFG_TUSB_OS == OPT_OS_FREERTOS +  // 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 ); +#endif +   +  GPIO_InitTypeDef  GPIO_InitStruct; + +  // LED +  GPIO_InitStruct.Pin   = LED_PIN; +  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP; +  GPIO_InitStruct.Pull  = GPIO_PULLUP; +  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; +  HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct); + +  // Button +  GPIO_InitStruct.Pin   = BUTTON_PIN; +  GPIO_InitStruct.Mode  = GPIO_MODE_INPUT; +  GPIO_InitStruct.Pull  = GPIO_NOPULL; +  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; +  HAL_GPIO_Init(BUTTON_PORT, &GPIO_InitStruct); + +  // Uart +  GPIO_InitStruct.Pin       = UART_TX_PIN | UART_RX_PIN; +  GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP; +  GPIO_InitStruct.Pull      = GPIO_PULLUP; +  GPIO_InitStruct.Speed     = GPIO_SPEED_FREQ_VERY_HIGH; +  GPIO_InitStruct.Alternate = UART_GPIO_AF; +  HAL_GPIO_Init(UART_GPIO_PORT, &GPIO_InitStruct); + +  UartHandle.Instance        = UART_DEV; +  UartHandle.Init.BaudRate   = CFG_BOARD_UART_BAUDRATE; +  UartHandle.Init.WordLength = UART_WORDLENGTH_8B; +  UartHandle.Init.StopBits   = UART_STOPBITS_1; +  UartHandle.Init.Parity     = UART_PARITY_NONE; +  UartHandle.Init.HwFlowCtl  = UART_HWCONTROL_NONE; +  UartHandle.Init.Mode       = UART_MODE_TX_RX; +  UartHandle.Init.OverSampling = UART_OVERSAMPLING_16; +  HAL_UART_Init(&UartHandle); + +#if BOARD_DEVICE_RHPORT_NUM == 0 +  // Despite being call USB2_OTG +  // OTG_FS is marked as RHPort0 by TinyUSB to be consistent across stm32 port +  // PA9 VUSB, PA10 ID, PA11 DM, PA12 DP + +  /* Configure DM DP Pins */ +  GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12; +  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; +  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; +  GPIO_InitStruct.Pull = GPIO_NOPULL; +  GPIO_InitStruct.Alternate = GPIO_AF10_OTG2_HS; +  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + +  /* This for ID line debug */ +  GPIO_InitStruct.Pin = GPIO_PIN_10; +  GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; +  GPIO_InitStruct.Pull = GPIO_PULLUP; +  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; +  GPIO_InitStruct.Alternate = GPIO_AF10_OTG2_HS; +  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + +  // https://community.st.com/s/question/0D50X00009XkYZLSA3/stm32h7-nucleo-usb-fs-cdc +  // TODO: Board init actually works fine without this line. +  HAL_PWREx_EnableUSBVoltageDetector(); +  __HAL_RCC_USB2_OTG_FS_CLK_ENABLE(); + +#if OTG_FS_VBUS_SENSE +  /* Configure VBUS Pin */ +  GPIO_InitStruct.Pin = GPIO_PIN_9; +  GPIO_InitStruct.Mode = GPIO_MODE_INPUT; +  GPIO_InitStruct.Pull = GPIO_NOPULL; +  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + +  // Enable VBUS sense (B device) via pin PA9 +  USB_OTG_FS->GCCFG |= USB_OTG_GCCFG_VBDEN; +#else +  // Disable VBUS sense (B device) via pin PA9 +  USB_OTG_FS->GCCFG &= ~USB_OTG_GCCFG_VBDEN; + +  // B-peripheral session valid override enable +  USB_OTG_FS->GOTGCTL |= USB_OTG_GOTGCTL_BVALOEN; +  USB_OTG_FS->GOTGCTL |= USB_OTG_GOTGCTL_BVALOVAL; +#endif // vbus sense + +#elif BOARD_DEVICE_RHPORT_NUM == 1 +  // Despite being call USB2_OTG +  // OTG_HS is marked as RHPort1 by TinyUSB to be consistent across stm32 port + +  /* CLK */ +  GPIO_InitStruct.Pin = GPIO_PIN_5; +  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; +  GPIO_InitStruct.Pull = GPIO_NOPULL; +  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; +  GPIO_InitStruct.Alternate = GPIO_AF10_OTG2_HS; +  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + +  /* D0 */ +  GPIO_InitStruct.Pin = GPIO_PIN_3; +  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; +  GPIO_InitStruct.Pull = GPIO_NOPULL; +  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; +  GPIO_InitStruct.Alternate = GPIO_AF10_OTG2_HS; +  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + +  /* D1 D2 D3 D4 D5 D6 D7 */ +  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_5 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13; +  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; +  GPIO_InitStruct.Pull = GPIO_NOPULL; +  GPIO_InitStruct.Alternate = GPIO_AF10_OTG2_HS; +  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + +  /* STP */ +  GPIO_InitStruct.Pin = GPIO_PIN_0; +  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; +  GPIO_InitStruct.Pull = GPIO_NOPULL; +  GPIO_InitStruct.Alternate = GPIO_AF10_OTG2_HS; +  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + +  /* NXT */ +  GPIO_InitStruct.Pin = GPIO_PIN_4; +  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; +  GPIO_InitStruct.Pull = GPIO_NOPULL; +  GPIO_InitStruct.Alternate = GPIO_AF10_OTG2_HS; +  HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); + +  /* DIR */ +  GPIO_InitStruct.Pin = GPIO_PIN_11; +  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; +  GPIO_InitStruct.Pull = GPIO_NOPULL; +  GPIO_InitStruct.Alternate = GPIO_AF10_OTG2_HS; +  HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); + +  // Enable USB HS & ULPI Clocks +  __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE(); +  __HAL_RCC_USB1_OTG_HS_CLK_ENABLE(); + +#if OTG_HS_VBUS_SENSE +  #error OTG HS VBUS Sense enabled is not implemented +#else +  // No VBUS sense +  USB_OTG_HS->GCCFG &= ~USB_OTG_GCCFG_VBDEN; + +  // B-peripheral session valid override enable +  USB_OTG_HS->GOTGCTL |= USB_OTG_GOTGCTL_BVALOEN; +  USB_OTG_HS->GOTGCTL |= USB_OTG_GOTGCTL_BVALOVAL; +#endif + +  // Force device mode +  USB_OTG_HS->GUSBCFG &= ~USB_OTG_GUSBCFG_FHMOD; +  USB_OTG_HS->GUSBCFG |= USB_OTG_GUSBCFG_FDMOD; + +  HAL_PWREx_EnableUSBVoltageDetector(); +#endif // rhport = 1 + +} + +//--------------------------------------------------------------------+ +// Board porting API +//--------------------------------------------------------------------+ + +void board_led_write(bool state) +{ +  HAL_GPIO_WritePin(LED_PORT, LED_PIN, state ? LED_STATE_ON : (1-LED_STATE_ON)); +} + +uint32_t board_button_read(void) +{ +  return (BUTTON_STATE_ACTIVE == HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON_PIN)) ? 1 : 0; +} + +int board_uart_read(uint8_t* buf, int len) +{ +  (void) buf; (void) len; +  return 0; +} + +int board_uart_write(void const * buf, int len) +{ +  HAL_UART_Transmit(&UartHandle, (uint8_t*) buf, len, 0xffff); +  return len; +} + + +#if CFG_TUSB_OS == OPT_OS_NONE +volatile uint32_t system_ticks = 0; +void SysTick_Handler (void) +{ +  system_ticks++; +} + +uint32_t board_millis(void) +{ +  return system_ticks; +} +#endif + +void HardFault_Handler (void) +{ +  asm("bkpt"); +} + +// Required by __libc_init_array in startup code if we are compiling using +// -nostdlib/-nostartfiles. +void _init(void) +{ + +} diff --git a/tinyusb/hw/bsp/stm32h7/family.mk b/tinyusb/hw/bsp/stm32h7/family.mk new file mode 100755 index 00000000..e35e7561 --- /dev/null +++ b/tinyusb/hw/bsp/stm32h7/family.mk @@ -0,0 +1,51 @@ +UF2_FAMILY_ID = 0x6db66082 +ST_FAMILY = h7 +DEPS_SUBMODULES += lib/CMSIS_5 hw/mcu/st/cmsis_device_$(ST_FAMILY) hw/mcu/st/stm32$(ST_FAMILY)xx_hal_driver + +ST_CMSIS = hw/mcu/st/cmsis_device_$(ST_FAMILY) +ST_HAL_DRIVER = hw/mcu/st/stm32$(ST_FAMILY)xx_hal_driver + +include $(TOP)/$(BOARD_PATH)/board.mk + +CFLAGS += \ +  -flto \ +  -mthumb \ +  -mabi=aapcs \ +  -mcpu=cortex-m7 \ +  -mfloat-abi=hard \ +  -mfpu=fpv5-d16 \ +  -nostdlib -nostartfiles \ +  -DCFG_TUSB_MCU=OPT_MCU_STM32H7 \ +	-DBOARD_DEVICE_RHPORT_NUM=$(PORT) + +ifeq ($(PORT), 1) +  CFLAGS += -DBOARD_DEVICE_RHPORT_SPEED=OPT_MODE_HIGH_SPEED +  $(info "PORT1 High Speed") +else +  $(info "PORT0 Full Speed") +endif + +# suppress warning caused by vendor mcu driver +CFLAGS += -Wno-error=maybe-uninitialized -Wno-error=cast-align + +# All source paths should be relative to the top level. +SRC_C += \ +	src/portable/st/synopsys/dcd_synopsys.c \ +	$(ST_CMSIS)/Source/Templates/system_stm32$(ST_FAMILY)xx.c \ +	$(ST_HAL_DRIVER)/Src/stm32$(ST_FAMILY)xx_hal.c \ +	$(ST_HAL_DRIVER)/Src/stm32$(ST_FAMILY)xx_hal_cortex.c \ +	$(ST_HAL_DRIVER)/Src/stm32$(ST_FAMILY)xx_hal_rcc.c \ +	$(ST_HAL_DRIVER)/Src/stm32$(ST_FAMILY)xx_hal_rcc_ex.c \ +	$(ST_HAL_DRIVER)/Src/stm32$(ST_FAMILY)xx_hal_gpio.c \ +	$(ST_HAL_DRIVER)/Src/stm32$(ST_FAMILY)xx_hal_uart.c \ +	$(ST_HAL_DRIVER)/Src/stm32$(ST_FAMILY)xx_hal_pwr_ex.c + +INC += \ +	$(TOP)/$(BOARD_PATH) \ +	$(TOP)/lib/CMSIS_5/CMSIS/Core/Include \ +	$(TOP)/$(ST_CMSIS)/Include \ +	$(TOP)/$(ST_HAL_DRIVER)/Inc + +# For freeRTOS port source +FREERTOS_PORT = ARM_CM7/r0p1 + diff --git a/tinyusb/hw/bsp/stm32h7/stm32h7xx_hal_conf.h b/tinyusb/hw/bsp/stm32h7/stm32h7xx_hal_conf.h new file mode 100755 index 00000000..a7cc6d82 --- /dev/null +++ b/tinyusb/hw/bsp/stm32h7/stm32h7xx_hal_conf.h @@ -0,0 +1,483 @@ +/** +  ****************************************************************************** +  * @file    stm32h7xx_hal_conf_template.h +  * @brief   HAL configuration template file.  +  *          This file should be copied to the application folder and renamed +  *          to stm32h7xx_hal_conf.h. +  ****************************************************************************** +  * @attention +  * +  * <h2><center>© COPYRIGHT(c) 2019 STMicroelectronics</center></h2> +  * +  * Redistribution and use in source and binary forms, with or without modification, +  * are permitted provided that the following conditions are met: +  *   1. Redistributions of source code must retain the above copyright notice, +  *      this list of conditions and the following disclaimer. +  *   2. Redistributions in binary form must reproduce the above copyright notice, +  *      this list of conditions and the following disclaimer in the documentation +  *      and/or other materials provided with the distribution. +  *   3. Neither the name of STMicroelectronics nor the names of its contributors +  *      may be used to endorse or promote products derived from this software +  *      without specific prior written permission. +  * +  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +  * +  ****************************************************************************** +  */  + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32H7xx_HAL_CONF_H +#define __STM32H7xx_HAL_CONF_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* ########################## Module Selection ############################## */ +/** +  * @brief This is the list of modules to be used in the HAL driver +  */ +#define HAL_MODULE_ENABLED +#define HAL_ADC_MODULE_ENABLED +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_COMP_MODULE_ENABLED */ +#define HAL_CORTEX_MODULE_ENABLED +/* #define HAL_CRC_MODULE_ENABLED */ +/* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_DAC_MODULE_ENABLED */ +/* #define HAL_DCMI_MODULE_ENABLED */ +/* #define HAL_DFSDM_MODULE_ENABLED */ +#define HAL_DMA_MODULE_ENABLED +/* #define HAL_DMA2D_MODULE_ENABLED */ +/* #define HAL_ETH_MODULE_ENABLED */ +/* #define HAL_EXTI_MODULE_ENABLED */ +/* #define HAL_FDCAN_MODULE_ENABLED */ +#define HAL_FLASH_MODULE_ENABLED +#define HAL_GPIO_MODULE_ENABLED +/* #define HAL_HASH_MODULE_ENABLED */ +/* #define HAL_HCD_MODULE_ENABLED */ +/* #define HAL_HRTIM_MODULE_ENABLED */ +/* #define HAL_HSEM_MODULE_ENABLED */ +/* #define HAL_I2C_MODULE_ENABLED */ +/* #define HAL_I2S_MODULE_ENABLED */ +/* #define HAL_IRDA_MODULE_ENABLED */ +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_JPEG_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +/* #define HAL_LTDC_MODULE_ENABLED */ +/* #define HAL_MDIOS_MODULE_ENABLED */ +/* #define HAL_MDMA_MODULE_ENABLED */ +/* #define HAL_MMC_MODULE_ENABLED */ +/* #define HAL_NAND_MODULE_ENABLED */ +/* #define HAL_NOR_MODULE_ENABLED */ +/* #define HAL_OPAMP_MODULE_ENABLED */ +/* #define HAL_PCD_MODULE_ENABLED */ +#define HAL_PWR_MODULE_ENABLED +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_RAMECC_MODULE_ENABLED */ +#define HAL_RCC_MODULE_ENABLED +/* #define HAL_RNG_MODULE_ENABLED */ +/* #define HAL_RTC_MODULE_ENABLED */ +/* #define HAL_SAI_MODULE_ENABLED */ +/* #define HAL_SD_MODULE_ENABLED */ +/* #define HAL_SDRAM_MODULE_ENABLED */ +/* #define HAL_SMARTCARD_MODULE_ENABLED */ +/* #define HAL_SMBUS_MODULE_ENABLED */ +/* #define HAL_SPDIFRX_MODULE_ENABLED */ +#define HAL_SPI_MODULE_ENABLED +/* #define HAL_SRAM_MODULE_ENABLED */ +/* #define HAL_SWPMI_MODULE_ENABLED */ +/* #define HAL_TIM_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/* #define HAL_USART_MODULE_ENABLED */ +/* #define HAL_WWDG_MODULE_ENABLED */ + +/* ########################## Oscillator Values adaptation ####################*/ +/** +  * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. +  *        This value is used by the RCC HAL module to compute the system frequency +  *        (when HSE is used as system clock source, directly or through the PLL). +  */ +#if !defined  (HSE_VALUE) +//#define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ +#error HSE_VALUE is not defined +#endif /* HSE_VALUE */ + +#if !defined  (HSE_STARTUP_TIMEOUT) +  #define HSE_STARTUP_TIMEOUT    ((uint32_t)5000)   /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** +  * @brief Internal  oscillator (CSI) default value. +  *        This value is the default CSI value after Reset. +  */ +#if !defined  (CSI_VALUE) +  #define CSI_VALUE    ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* CSI_VALUE */ + +/** +  * @brief Internal High Speed oscillator (HSI) value. +  *        This value is used by the RCC HAL module to compute the system frequency +  *        (when HSI is used as system clock source, directly or through the PLL). +  */ +#if !defined  (HSI_VALUE) +  #define HSI_VALUE    ((uint32_t)64000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** +  * @brief External Low Speed oscillator (LSE) value. +  *        This value is used by the UART, RTC HAL module to compute the system frequency +  */ +#if !defined  (LSE_VALUE) +  #define LSE_VALUE    ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/ +#endif /* LSE_VALUE */ + + +#if !defined  (LSE_STARTUP_TIMEOUT) +  #define LSE_STARTUP_TIMEOUT    ((uint32_t)5000)   /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +#if !defined  (LSI_VALUE) +  #define LSI_VALUE  ((uint32_t)32000)      /*!< LSI Typical Value in Hz*/ +#endif /* LSI_VALUE */                      /*!< Value of the Internal Low Speed oscillator in Hz +                                              The real value may vary depending on the variations +                                              in voltage and temperature.*/ + +/** +  * @brief External clock source for I2S peripheral +  *        This value is used by the I2S HAL module to compute the I2S clock source +  *        frequency, this source is inserted directly through I2S_CKIN pad. +  */ +#if !defined  (EXTERNAL_CLOCK_VALUE) +  #define EXTERNAL_CLOCK_VALUE    12288000U /*!< Value of the External clock in Hz*/ +#endif /* EXTERNAL_CLOCK_VALUE */ + +/* Tip: To avoid modifying this file each time you need to use different HSE, +   ===  you can define the HSE value in your toolchain compiler preprocessor. */ + +/* ########################### System Configuration ######################### */ +/** +  * @brief This is the HAL system configuration section +  */ +#define  VDD_VALUE                    ((uint32_t)3300) /*!< Value of VDD in mv */ +#define  TICK_INT_PRIORITY            ((uint32_t)0x0F) /*!< tick interrupt priority */ +#define  USE_RTOS                     0 +#define  USE_SD_TRANSCEIVER           1U               /*!< use uSD Transceiver */ +#define  USE_SPI_CRC                  1U               /*!< use CRC in SPI */ + +#define  USE_HAL_ADC_REGISTER_CALLBACKS     0U /* ADC register callback disabled     */ +#define  USE_HAL_CEC_REGISTER_CALLBACKS     0U /* CEC register callback disabled     */ +#define  USE_HAL_COMP_REGISTER_CALLBACKS    0U /* COMP register callback disabled    */ +#define  USE_HAL_CRYP_REGISTER_CALLBACKS    0U /* CRYP register callback disabled    */ +#define  USE_HAL_DAC_REGISTER_CALLBACKS     0U /* DAC register callback disabled     */ +#define  USE_HAL_DCMI_REGISTER_CALLBACKS    0U /* DCMI register callback disabled    */ +#define  USE_HAL_DFSDM_REGISTER_CALLBACKS   0U /* DFSDM register callback disabled   */ +#define  USE_HAL_DMA2D_REGISTER_CALLBACKS   0U /* DMA2D register callback disabled   */ +#define  USE_HAL_DSI_REGISTER_CALLBACKS     0U /* DSI register callback disabled     */ +#define  USE_HAL_ETH_REGISTER_CALLBACKS     0U /* ETH register callback disabled     */ +#define  USE_HAL_FDCAN_REGISTER_CALLBACKS   0U /* FDCAN register callback disabled   */ +#define  USE_HAL_NAND_REGISTER_CALLBACKS    0U /* NAND register callback disabled    */ +#define  USE_HAL_NOR_REGISTER_CALLBACKS     0U /* NOR register callback disabled     */ +#define  USE_HAL_SDRAM_REGISTER_CALLBACKS   0U /* SDRAM register callback disabled   */ +#define  USE_HAL_SRAM_REGISTER_CALLBACKS    0U /* SRAM register callback disabled    */ +#define  USE_HAL_HASH_REGISTER_CALLBACKS    0U /* HASH register callback disabled    */ +#define  USE_HAL_HCD_REGISTER_CALLBACKS     0U /* HCD register callback disabled     */ +#define  USE_HAL_HRTIM_REGISTER_CALLBACKS   0U /* HRTIM register callback disabled   */ +#define  USE_HAL_I2C_REGISTER_CALLBACKS     0U /* I2C register callback disabled     */ +#define  USE_HAL_I2S_REGISTER_CALLBACKS     0U /* I2S register callback disabled     */ +#define  USE_HAL_JPEG_REGISTER_CALLBACKS    0U /* JPEG register callback disabled    */ +#define  USE_HAL_LPTIM_REGISTER_CALLBACKS   0U /* LPTIM register callback disabled   */ +#define  USE_HAL_LTDC_REGISTER_CALLBACKS    0U /* LTDC register callback disabled    */ +#define  USE_HAL_MDIOS_REGISTER_CALLBACKS   0U /* MDIO register callback disabled    */ +#define  USE_HAL_OPAMP_REGISTER_CALLBACKS   0U /* MDIO register callback disabled    */ +#define  USE_HAL_PCD_REGISTER_CALLBACKS     0U /* PCD register callback disabled     */ +#define  USE_HAL_QSPI_REGISTER_CALLBACKS    0U /* QSPI register callback disabled    */ +#define  USE_HAL_RNG_REGISTER_CALLBACKS     0U /* RNG register callback disabled     */ +#define  USE_HAL_RTC_REGISTER_CALLBACKS     0U /* RTC register callback disabled     */ +#define  USE_HAL_SAI_REGISTER_CALLBACKS     0U /* SAI register callback disabled     */ +#define  USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ +#define  USE_HAL_SMBUS_REGISTER_CALLBACKS   0U /* SMBUS register callback disabled   */ +#define  USE_HAL_SPI_REGISTER_CALLBACKS     0U /* SPI register callback disabled     */ +#define  USE_HAL_SWPMI_REGISTER_CALLBACKS   0U /* SWPMI register callback disabled   */ +#define  USE_HAL_TIM_REGISTER_CALLBACKS     0U /* TIM register callback disabled     */ +#define  USE_HAL_UART_REGISTER_CALLBACKS    0U /* UART register callback disabled      */ +#define  USE_HAL_USART_REGISTER_CALLBACKS   0U /* USART register callback disabled     */ +#define  USE_HAL_WWDG_REGISTER_CALLBACKS    0U /* WWDG register callback disabled    */ + +/* ########################### Ethernet Configuration ######################### */ +#define ETH_TX_DESC_CNT         4  /* number of Ethernet Tx DMA descriptors */ +#define ETH_RX_DESC_CNT         4  /* number of Ethernet Rx DMA descriptors */ + +#define ETH_MAC_ADDR0    ((uint8_t)0x02) +#define ETH_MAC_ADDR1    ((uint8_t)0x00) +#define ETH_MAC_ADDR2    ((uint8_t)0x00) +#define ETH_MAC_ADDR3    ((uint8_t)0x00) +#define ETH_MAC_ADDR4    ((uint8_t)0x00) +#define ETH_MAC_ADDR5    ((uint8_t)0x00) + +/* ########################## Assert Selection ############################## */ +/** +  * @brief Uncomment the line below to expanse the "assert_param" macro in the +  *        HAL drivers code +  */ +/* #define USE_FULL_ASSERT    1 */ + + +/* Includes ------------------------------------------------------------------*/ +/** +  * @brief Include module's header file +  */ + +#ifdef HAL_RCC_MODULE_ENABLED +  #include "stm32h7xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED +  #include "stm32h7xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED +  #include "stm32h7xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_MDMA_MODULE_ENABLED + #include "stm32h7xx_hal_mdma.h" +#endif /* HAL_MDMA_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED +  #include "stm32h7xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED +  #include "stm32h7xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED +  #include "stm32h7xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED +  #include "stm32h7xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED +  #include "stm32h7xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED +  #include "stm32h7xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED +  #include "stm32h7xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED +  #include "stm32h7xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED +  #include "stm32h7xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_FDCAN_MODULE_ENABLED +  #include "stm32h7xx_hal_fdcan.h" +#endif /* HAL_FDCAN_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED +  #include "stm32h7xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_COMP_MODULE_ENABLED +  #include "stm32h7xx_hal_comp.h" +#endif /* HAL_COMP_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED +  #include "stm32h7xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED +  #include "stm32h7xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED +  #include "stm32h7xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED +  #include "stm32h7xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_HRTIM_MODULE_ENABLED +  #include "stm32h7xx_hal_hrtim.h" +#endif /* HAL_HRTIM_MODULE_ENABLED */ + +#ifdef HAL_HSEM_MODULE_ENABLED +  #include "stm32h7xx_hal_hsem.h" +#endif /* HAL_HSEM_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED +  #include "stm32h7xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED +  #include "stm32h7xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED +  #include "stm32h7xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32h7xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32h7xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32h7xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_JPEG_MODULE_ENABLED + #include "stm32h7xx_hal_jpeg.h" +#endif /* HAL_JPEG_MODULE_ENABLED */ + +#ifdef HAL_MDIOS_MODULE_ENABLED + #include "stm32h7xx_hal_mdios.h" +#endif /* HAL_MDIOS_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32h7xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED +#include "stm32h7xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED +#include "stm32h7xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_OPAMP_MODULE_ENABLED +#include "stm32h7xx_hal_opamp.h" +#endif /* HAL_OPAMP_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32h7xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32h7xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_RAMECC_MODULE_ENABLED + #include "stm32h7xx_hal_ramecc.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32h7xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32h7xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32h7xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32h7xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_SDRAM_MODULE_ENABLED + #include "stm32h7xx_hal_sdram.h" +#endif /* HAL_SDRAM_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32h7xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED + #include "stm32h7xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_SWPMI_MODULE_ENABLED + #include "stm32h7xx_hal_swpmi.h" +#endif /* HAL_SWPMI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32h7xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32h7xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32h7xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32h7xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32h7xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32h7xx_hal_smbus.h" +#endif /* HAL_SMBUS_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32h7xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32h7xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32h7xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef  USE_FULL_ASSERT +/** +  * @brief  The assert_param macro is used for function's parameters check. +  * @param  expr: If expr is false, it calls assert_failed function +  *         which reports the name of the source file and the source +  *         line number of the call that failed. +  *         If expr is true, it returns no value. +  * @retval None +  */ +  #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ +  void assert_failed(uint8_t *file, uint32_t line); +#else +  #define assert_param(expr) ((void)0U) +#endif /* USE_FULL_ASSERT */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32H7xx_HAL_CONF_H */ +  + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/  | 
