From 5b2a7f5ed69eb8eac7151144e58dbc18395f94b3 Mon Sep 17 00:00:00 2001 From: Ouxiaolong <1576690133@qq.com> Date: Sun, 1 Aug 2021 15:30:50 +0800 Subject: [PATCH] add stm32f746-st-nucleo --- bsp/stm32/stm32f746-st-nucleo/.config | 721 ++++ bsp/stm32/stm32f746-st-nucleo/Kconfig | 21 + bsp/stm32/stm32f746-st-nucleo/README.md | 55 + bsp/stm32/stm32f746-st-nucleo/README_zh.md | 110 + bsp/stm32/stm32f746-st-nucleo/SConscript | 15 + bsp/stm32/stm32f746-st-nucleo/SConstruct | 60 + .../applications/SConscript | 12 + .../stm32f746-st-nucleo/applications/main.c | 33 + .../board/CubeMX_Config/.mxproject | 19 + .../board/CubeMX_Config/CubeMX_Config.ioc | 218 ++ .../board/CubeMX_Config/Inc/main.h | 95 + .../CubeMX_Config/Inc/stm32f7xx_hal_conf.h | 483 +++ .../board/CubeMX_Config/Inc/stm32f7xx_it.h | 84 + .../board/CubeMX_Config/Src/main.c | 409 +++ .../CubeMX_Config/Src/stm32f7xx_hal_msp.c | 407 +++ .../board/CubeMX_Config/Src/stm32f7xx_it.c | 218 ++ .../CubeMX_Config/Src/system_stm32f7xx.c | 278 ++ bsp/stm32/stm32f746-st-nucleo/board/Kconfig | 253 ++ .../stm32f746-st-nucleo/board/SConscript | 35 + bsp/stm32/stm32f746-st-nucleo/board/board.c | 70 + bsp/stm32/stm32f746-st-nucleo/board/board.h | 41 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 157 + .../board/linker_scripts/link.sct | 15 + .../board/ports/phy_reset.c | 21 + .../figures/en.high-perf_nucleo-144_mbed.jpg | Bin 0 -> 73924 bytes bsp/stm32/stm32f746-st-nucleo/project.ewd | 2966 +++++++++++++++++ bsp/stm32/stm32f746-st-nucleo/project.ewp | 2422 ++++++++++++++ bsp/stm32/stm32f746-st-nucleo/project.eww | 10 + bsp/stm32/stm32f746-st-nucleo/project.uvoptx | 1336 ++++++++ bsp/stm32/stm32f746-st-nucleo/project.uvprojx | 972 ++++++ bsp/stm32/stm32f746-st-nucleo/rtconfig.h | 282 ++ bsp/stm32/stm32f746-st-nucleo/rtconfig.py | 157 + .../stm32f746-st-nucleo/rtconfig_preinc.h | 14 + bsp/stm32/stm32f746-st-nucleo/template.ewp | 2074 ++++++++++++ bsp/stm32/stm32f746-st-nucleo/template.eww | 10 + bsp/stm32/stm32f746-st-nucleo/template.uvoptx | 192 ++ .../stm32f746-st-nucleo/template.uvprojx | 411 +++ 38 files changed, 14704 insertions(+) create mode 100644 bsp/stm32/stm32f746-st-nucleo/.config create mode 100644 bsp/stm32/stm32f746-st-nucleo/Kconfig create mode 100644 bsp/stm32/stm32f746-st-nucleo/README.md create mode 100644 bsp/stm32/stm32f746-st-nucleo/README_zh.md create mode 100644 bsp/stm32/stm32f746-st-nucleo/SConscript create mode 100644 bsp/stm32/stm32f746-st-nucleo/SConstruct create mode 100644 bsp/stm32/stm32f746-st-nucleo/applications/SConscript create mode 100644 bsp/stm32/stm32f746-st-nucleo/applications/main.c create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/.mxproject create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_it.h create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_it.c create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/system_stm32f7xx.c create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/Kconfig create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/SConscript create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/board.c create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/board.h create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f746-st-nucleo/board/ports/phy_reset.c create mode 100644 bsp/stm32/stm32f746-st-nucleo/figures/en.high-perf_nucleo-144_mbed.jpg create mode 100644 bsp/stm32/stm32f746-st-nucleo/project.ewd create mode 100644 bsp/stm32/stm32f746-st-nucleo/project.ewp create mode 100644 bsp/stm32/stm32f746-st-nucleo/project.eww create mode 100644 bsp/stm32/stm32f746-st-nucleo/project.uvoptx create mode 100644 bsp/stm32/stm32f746-st-nucleo/project.uvprojx create mode 100644 bsp/stm32/stm32f746-st-nucleo/rtconfig.h create mode 100644 bsp/stm32/stm32f746-st-nucleo/rtconfig.py create mode 100644 bsp/stm32/stm32f746-st-nucleo/rtconfig_preinc.h create mode 100644 bsp/stm32/stm32f746-st-nucleo/template.ewp create mode 100644 bsp/stm32/stm32f746-st-nucleo/template.eww create mode 100644 bsp/stm32/stm32f746-st-nucleo/template.uvoptx create mode 100644 bsp/stm32/stm32f746-st-nucleo/template.uvprojx diff --git a/bsp/stm32/stm32f746-st-nucleo/.config b/bsp/stm32/stm32f746-st-nucleo/.config new file mode 100644 index 0000000000..53e188ad36 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/.config @@ -0,0 +1,721 @@ +# Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib) + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=4 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=100 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +CONFIG_RT_USING_TIMER_SOFT=y +CONFIG_RT_TIMER_THREAD_PRIO=4 +CONFIG_RT_TIMER_THREAD_STACK_SIZE=512 + +# +# kservice optimization +# +# CONFIG_RT_KSERVICE_USING_STDLIB is not set +# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set +# end of kservice optimization + +CONFIG_RT_DEBUG=y +CONFIG_RT_DEBUG_COLOR=y +# CONFIG_RT_DEBUG_INIT_CONFIG is not set +# CONFIG_RT_DEBUG_THREAD_CONFIG is not set +# CONFIG_RT_DEBUG_SCHEDULER_CONFIG is not set +# CONFIG_RT_DEBUG_IPC_CONFIG is not set +# CONFIG_RT_DEBUG_TIMER_CONFIG is not set +# CONFIG_RT_DEBUG_IRQ_CONFIG is not set +# CONFIG_RT_DEBUG_MEM_CONFIG is not set +# CONFIG_RT_DEBUG_SLAB_CONFIG is not set +# CONFIG_RT_DEBUG_MEMHEAP_CONFIG is not set +# CONFIG_RT_DEBUG_MODULE_CONFIG is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_SIGNALS is not set +# end of Inter-Thread communication + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +# CONFIG_RT_USING_MEMHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_HEAP=y +# end of Memory Management + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=256 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart3" +# CONFIG_RT_PRINTF_LONGLONG is not set +# end of Kernel Device Object + +CONFIG_RT_VER_NUM=0x40004 +# end of RT-Thread Kernel + +CONFIG_ARCH_ARM=y +CONFIG_RT_USING_CPU_FFS=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M7=y + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 + +# +# C++ features +# +# CONFIG_RT_USING_CPLUSPLUS is not set +# end of C++ features + +# +# Command shell +# +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_CMD_SIZE=80 +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_USING_MSH_DEFAULT=y +# CONFIG_FINSH_USING_MSH_ONLY is not set +CONFIG_FINSH_ARG_MAX=10 +# end of Command shell + +# +# Device virtual file system +# +CONFIG_RT_USING_DFS=y +CONFIG_DFS_USING_WORKDIR=y +CONFIG_DFS_FILESYSTEMS_MAX=2 +CONFIG_DFS_FILESYSTEM_TYPES_MAX=2 +CONFIG_DFS_FD_MAX=16 +# CONFIG_RT_USING_DFS_MNTTABLE is not set +# CONFIG_RT_USING_DFS_ELMFAT is not set +CONFIG_RT_USING_DFS_DEVFS=y +# CONFIG_RT_USING_DFS_ROMFS is not set +# CONFIG_RT_USING_DFS_RAMFS is not set +# CONFIG_RT_USING_DFS_NFS is not set +# end of Device virtual file system + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_PIPE_BUFSZ=512 +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_USING_SERIAL_V1=y +# CONFIG_RT_USING_SERIAL_V2 is not set +CONFIG_RT_SERIAL_USING_DMA=y +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +# CONFIG_RT_USING_PHY is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +CONFIG_RT_USING_RTC=y +# CONFIG_RT_USING_ALARM is not set +CONFIG_RT_USING_SOFT_RTC=y +# CONFIG_RT_USING_SDIO is not set +CONFIG_RT_USING_SPI=y +# CONFIG_RT_USING_QSPI is not set +# CONFIG_RT_USING_SPI_MSD is not set +# CONFIG_RT_USING_SFUD is not set +# CONFIG_RT_USING_ENC28J60 is not set +# CONFIG_RT_USING_SPI_WIFI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_WIFI is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set +# end of Using USB +# end of Device Drivers + +# +# POSIX layer and C standard library +# +CONFIG_RT_USING_LIBC=y +# CONFIG_RT_USING_PTHREADS is not set +CONFIG_RT_USING_POSIX=y +# CONFIG_RT_USING_POSIX_MMAP is not set +# CONFIG_RT_USING_POSIX_TERMIOS is not set +# CONFIG_RT_USING_POSIX_GETLINE is not set +# CONFIG_RT_USING_POSIX_AIO is not set +# CONFIG_RT_USING_MODULE is not set +CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8 +# end of POSIX layer and C standard library + +# +# Network +# + +# +# Socket abstraction layer +# +# CONFIG_RT_USING_SAL is not set +# end of Socket abstraction layer + +# +# Network interface device +# +# CONFIG_RT_USING_NETDEV is not set +CONFIG_NETDEV_USING_PING=y +# end of Network interface device + +# +# light weight TCP/IP stack +# +CONFIG_RT_USING_LWIP=y +# CONFIG_RT_USING_LWIP141 is not set +# CONFIG_RT_USING_LWIP202 is not set +# CONFIG_RT_USING_LWIP203 is not set +CONFIG_RT_USING_LWIP212=y +# CONFIG_RT_USING_LWIP_IPV6 is not set +CONFIG_RT_LWIP_MEM_ALIGNMENT=4 +CONFIG_RT_LWIP_IGMP=y +CONFIG_RT_LWIP_ICMP=y +# CONFIG_RT_LWIP_SNMP is not set +CONFIG_RT_LWIP_DNS=y +CONFIG_RT_LWIP_DHCP=y +CONFIG_IP_SOF_BROADCAST=1 +CONFIG_IP_SOF_BROADCAST_RECV=1 + +# +# Static IPv4 Address +# +CONFIG_RT_LWIP_IPADDR="192.168.1.30" +CONFIG_RT_LWIP_GWADDR="192.168.1.1" +CONFIG_RT_LWIP_MSKADDR="255.255.255.0" +# end of Static IPv4 Address + +CONFIG_RT_LWIP_UDP=y +CONFIG_RT_LWIP_TCP=y +CONFIG_RT_LWIP_RAW=y +# CONFIG_RT_LWIP_PPP is not set +CONFIG_RT_MEMP_NUM_NETCONN=8 +CONFIG_RT_LWIP_PBUF_NUM=16 +CONFIG_RT_LWIP_RAW_PCB_NUM=4 +CONFIG_RT_LWIP_UDP_PCB_NUM=4 +CONFIG_RT_LWIP_TCP_PCB_NUM=4 +CONFIG_RT_LWIP_TCP_SEG_NUM=40 +CONFIG_RT_LWIP_TCP_SND_BUF=8196 +CONFIG_RT_LWIP_TCP_WND=8196 +CONFIG_RT_LWIP_TCPTHREAD_PRIORITY=10 +CONFIG_RT_LWIP_TCPTHREAD_MBOX_SIZE=8 +CONFIG_RT_LWIP_TCPTHREAD_STACKSIZE=1024 +# CONFIG_LWIP_NO_RX_THREAD is not set +# CONFIG_LWIP_NO_TX_THREAD is not set +CONFIG_RT_LWIP_ETHTHREAD_PRIORITY=12 +CONFIG_RT_LWIP_ETHTHREAD_STACKSIZE=1024 +CONFIG_RT_LWIP_ETHTHREAD_MBOX_SIZE=8 +# CONFIG_RT_LWIP_REASSEMBLY_FRAG is not set +CONFIG_LWIP_NETIF_STATUS_CALLBACK=1 +CONFIG_LWIP_NETIF_LINK_CALLBACK=1 +CONFIG_SO_REUSE=1 +CONFIG_LWIP_SO_RCVTIMEO=1 +CONFIG_LWIP_SO_SNDTIMEO=1 +CONFIG_LWIP_SO_RCVBUF=1 +CONFIG_LWIP_SO_LINGER=0 +# CONFIG_RT_LWIP_NETIF_LOOPBACK is not set +CONFIG_LWIP_NETIF_LOOPBACK=0 +# CONFIG_RT_LWIP_STATS is not set +# CONFIG_RT_LWIP_USING_HW_CHECKSUM is not set +CONFIG_RT_LWIP_USING_PING=y +# CONFIG_RT_LWIP_DEBUG is not set +# end of light weight TCP/IP stack + +# +# AT commands +# +# CONFIG_RT_USING_AT is not set +# end of AT commands + +# CONFIG_LWIP_USING_DHCPD is not set +# end of Network + +# +# VBUS(Virtual Software BUS) +# +# CONFIG_RT_USING_VBUS is not set +# end of VBUS(Virtual Software BUS) + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_RT_LINK is not set +# end of Utilities + +# CONFIG_RT_USING_LWP is not set +# end of RT-Thread Components + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_LORAWAN_DRIVER is not set +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_UMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_MYMQTT is not set +# CONFIG_PKG_USING_KAWAII_MQTT is not set +# CONFIG_PKG_USING_BC28_MQTT is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_LIBMODBUS is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_NANOPB is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set +# end of Marvell WiFi + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# end of Wiced WiFi + +# CONFIG_PKG_USING_RW007 is not set +# end of Wi-Fi + +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_CMUX is not set +# CONFIG_PKG_USING_PPP_DEVICE is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_ATSRV_SOCKET is not set +# CONFIG_PKG_USING_WIZNET is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set +# CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set +# end of IoT Cloud + +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set +# CONFIG_PKG_USING_IPMSG is not set +# CONFIG_PKG_USING_LSSDP is not set +# CONFIG_PKG_USING_AIRKISS_OPEN is not set +# CONFIG_PKG_USING_LIBRWS is not set +# CONFIG_PKG_USING_TCPSERVER is not set +# CONFIG_PKG_USING_PROTOBUF_C is not set +# CONFIG_PKG_USING_DLT645 is not set +# CONFIG_PKG_USING_QXWZ is not set +# CONFIG_PKG_USING_SMTP_CLIENT is not set +# CONFIG_PKG_USING_ABUP_FOTA is not set +# CONFIG_PKG_USING_LIBCURL2RTT is not set +# CONFIG_PKG_USING_CAPNP is not set +# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set +# CONFIG_PKG_USING_WAYZ_IOTKIT is not set +# CONFIG_PKG_USING_MAVLINK is not set +# CONFIG_PKG_USING_RAPIDJSON is not set +# CONFIG_PKG_USING_BSAL is not set +# CONFIG_PKG_USING_AGILE_MODBUS is not set +# CONFIG_PKG_USING_AGILE_FTP is not set +# CONFIG_PKG_USING_EMBEDDEDPROTO is not set +# end of IoT - internet of things + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_libsodium is not set +# CONFIG_PKG_USING_TINYCRYPT is not set +# CONFIG_PKG_USING_TFM is not set +# CONFIG_PKG_USING_YD_CRYPTO is not set +# end of security packages + +# +# language packages +# +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set +# end of language packages + +# +# multimedia packages +# +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set +# CONFIG_PKG_USING_STEMWIN is not set +# CONFIG_PKG_USING_WAVPLAYER is not set +# CONFIG_PKG_USING_TJPGD is not set +# CONFIG_PKG_USING_PDFGEN is not set +# CONFIG_PKG_USING_HELIX is not set +# CONFIG_PKG_USING_AZUREGUIX is not set +# CONFIG_PKG_USING_TOUCHGFX2RTT is not set +# CONFIG_PKG_USING_NUEMWIN is not set +# CONFIG_PKG_USING_MP3PLAYER is not set +# CONFIG_PKG_USING_TINYJPEG is not set +# end of multimedia packages + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_SEGGER_RTT is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_ULOG_FILE is not set +# CONFIG_PKG_USING_LOGMGR is not set +# CONFIG_PKG_USING_ADBD is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_DHRYSTONE is not set +# CONFIG_PKG_USING_MEMORYPERF is not set +# CONFIG_PKG_USING_NR_MICRO_SHELL is not set +# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set +# CONFIG_PKG_USING_LUNAR_CALENDAR is not set +# CONFIG_PKG_USING_BS8116A is not set +# CONFIG_PKG_USING_GPS_RMC is not set +# CONFIG_PKG_USING_URLENCODE is not set +# CONFIG_PKG_USING_UMCN is not set +# CONFIG_PKG_USING_LWRB2RTT is not set +# CONFIG_PKG_USING_CPU_USAGE is not set +# CONFIG_PKG_USING_GBK2UTF8 is not set +# CONFIG_PKG_USING_VCONSOLE is not set +# CONFIG_PKG_USING_KDB is not set +# CONFIG_PKG_USING_WAMR is not set +# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set +# CONFIG_PKG_USING_LWLOG is not set +# CONFIG_PKG_USING_ANV_TRACE is not set +# CONFIG_PKG_USING_ANV_MEMLEAK is not set +# CONFIG_PKG_USING_ANV_TESTSUIT is not set +# CONFIG_PKG_USING_ANV_BENCH is not set +# CONFIG_PKG_USING_DEVMEM is not set +# CONFIG_PKG_USING_REGEX is not set +# CONFIG_PKG_USING_MEM_SANDBOX is not set +# CONFIG_PKG_USING_SOLAR_TERMS is not set +# CONFIG_PKG_USING_GAN_ZHI is not set +# end of tools packages + +# +# system packages +# + +# +# acceleration: Assembly language or algorithmic acceleration packages +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set +# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set +# CONFIG_PKG_USING_QFPLIB_M3 is not set +# end of acceleration: Assembly language or algorithmic acceleration packages + +# +# Micrium: Micrium software products porting for RT-Thread +# +# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set +# CONFIG_PKG_USING_UCOSII_WRAPPER is not set +# CONFIG_PKG_USING_UC_CRC is not set +# CONFIG_PKG_USING_UC_CLK is not set +# CONFIG_PKG_USING_UC_COMMON is not set +# CONFIG_PKG_USING_UC_MODBUS is not set +# end of Micrium: Micrium software products porting for RT-Thread + +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_PERSIMMON is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_FAL is not set +# CONFIG_PKG_USING_FLASHDB is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_LITTLEVGL2RTT is not set +# CONFIG_PKG_USING_CMSIS is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_DFS_JFFS2 is not set +# CONFIG_PKG_USING_DFS_UFFS is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_THREAD_POOL is not set +# CONFIG_PKG_USING_ROBOTS is not set +# CONFIG_PKG_USING_EV is not set +# CONFIG_PKG_USING_SYSWATCH is not set +# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set +# CONFIG_PKG_USING_PLCCORE is not set +# CONFIG_PKG_USING_RAMDISK is not set +# CONFIG_PKG_USING_MININI is not set +# CONFIG_PKG_USING_QBOOT is not set +# CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER is not set +# end of system packages + +# +# peripheral libraries and drivers +# +# CONFIG_PKG_USING_SENSORS_DRIVERS is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_U8G2 is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_LITTLED is not set +# CONFIG_PKG_USING_LKDGUI is not set +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_WM_LIBRARIES is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_AGILE_BUTTON is not set +# CONFIG_PKG_USING_AGILE_LED is not set +# CONFIG_PKG_USING_AT24CXX is not set +# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_TOUCH_DRIVERS is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_RPLIDAR is not set +# CONFIG_PKG_USING_AS608 is not set +# CONFIG_PKG_USING_RC522 is not set +# CONFIG_PKG_USING_WS2812B is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set +# CONFIG_PKG_USING_MAX7219 is not set +# CONFIG_PKG_USING_BEEP is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set +# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set +# CONFIG_PKG_USING_QLED is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_AGILE_CONSOLE is not set +# CONFIG_PKG_USING_LD3320 is not set +# CONFIG_PKG_USING_WK2124 is not set +# CONFIG_PKG_USING_LY68L6400 is not set +# CONFIG_PKG_USING_DM9051 is not set +# CONFIG_PKG_USING_SSD1306 is not set +# CONFIG_PKG_USING_QKEY is not set +# CONFIG_PKG_USING_RS485 is not set +# CONFIG_PKG_USING_NES is not set +# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set +# CONFIG_PKG_USING_VDEVICE is not set +# CONFIG_PKG_USING_SGM706 is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_RDA58XX is not set +# CONFIG_PKG_USING_LIBNFC is not set +# CONFIG_PKG_USING_MFOC is not set +# CONFIG_PKG_USING_TMC51XX is not set +# CONFIG_PKG_USING_TCA9534 is not set +# CONFIG_PKG_USING_KOBUKI is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_MICRO_ROS is not set +# end of peripheral libraries and drivers + +# +# AI packages +# +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_ONNX_BACKEND is not set +# CONFIG_PKG_USING_ONNX_PARSER is not set +# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_QUEST is not set +# CONFIG_PKG_USING_NAXOS is not set +# end of AI packages + +# +# miscellaneous packages +# +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_MINIZIP is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set +# end of samples: kernel and components samples + +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_KI is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_CRCLIB is not set + +# +# entertainment: terminal games and other interesting software packages +# +# CONFIG_PKG_USING_THREES is not set +# CONFIG_PKG_USING_2048 is not set +# CONFIG_PKG_USING_SNAKE is not set +# CONFIG_PKG_USING_TETRIS is not set +# CONFIG_PKG_USING_DONUT is not set +# CONFIG_PKG_USING_ACLOCK is not set +# end of entertainment: terminal games and other interesting software packages + +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_COWSAY is not set +# end of miscellaneous packages +# end of RT-Thread online packages + +CONFIG_SOC_FAMILY_STM32=y +CONFIG_SOC_SERIES_STM32F7=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_STM32F746ZG=y + +# +# Onboard Peripheral Drivers +# +CONFIG_BSP_USING_USB_TO_USART=y +# CONFIG_BSP_USING_ETH is not set +# end of Onboard Peripheral Drivers + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART3=y +# CONFIG_BSP_UART3_RX_USING_DMA is not set +# CONFIG_BSP_USING_UART5 is not set +# CONFIG_BSP_USING_SPI is not set +# CONFIG_BSP_USING_I2C1 is not set +# CONFIG_BSP_USING_TIM is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_ADC is not set +# CONFIG_BSP_USING_ONCHIP_RTC is not set +# CONFIG_BSP_USING_WDT is not set +# CONFIG_BSP_USING_SDIO is not set +# CONFIG_BSP_USING_CAN is not set +# CONFIG_BSP_USING_USBD is not set +# CONFIG_BSP_USING_CRC is not set +# CONFIG_BSP_USING_RNG is not set +# CONFIG_BSP_USING_UDID is not set +# end of On-chip Peripheral Drivers + +# +# Board extended module Drivers +# +# end of Hardware Drivers Config diff --git a/bsp/stm32/stm32f746-st-nucleo/Kconfig b/bsp/stm32/stm32f746-st-nucleo/Kconfig new file mode 100644 index 0000000000..8cbc7b71a8 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/Kconfig @@ -0,0 +1,21 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "../../.." + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "../libraries/Kconfig" +source "board/Kconfig" diff --git a/bsp/stm32/stm32f746-st-nucleo/README.md b/bsp/stm32/stm32f746-st-nucleo/README.md new file mode 100644 index 0000000000..cf99b63464 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/README.md @@ -0,0 +1,55 @@ +# STM32F746-Nucleo BSP Introduction + +[中文](README_zh.md) + +## MCU: STM32F746ZG @216MHz, 1MB FLASH, 320KB RAM + +he STM32 Nucleo-144 board provides an affordable and flexible way for users to try out new concepts and build prototypes by choosing from the various combinations of performance and power consumption features, provided by the STM32 microcontroller. For the compatible boards, the internal or external SMPS significantly reduces power consumption in Run mode. + +![board](figures/en.high-perf_nucleo-144_mbed.jpg) + +The ST Zio connector, which extends the ARDUINO® Uno V3 connectivity, and the ST morpho headers provide an easy means of expanding the functionality of the Nucleo open development platform with a wide choice of specialized shields. + + + +The STM32 Nucleo-144 board does not require any separate probe as it integrates the ST-LINK debugger/programmer. + + + +The STM32 Nucleo-144 board comes with the STM32 comprehensive free software libraries and examples available with the STM32Cube MCU Package. + +#### KEY FEATURES + +- Common features + - STM32 microcontroller in LQFP144 package + - 3 user LEDs + - 2 user and reset push-buttons + - 32.768 kHz crystal oscillator + - Board connectors:SWDST Zio expansion connector including ARDUINO® Uno V3ST morpho expansion connector + - Flexible power-supply options: ST-LINK, USB VBUS or external sources + - On-board ST-LINK debugger/programmer with USB re-enumeration capability: mass storage, Virtual COM port, and debug port + - Comprehensive free software libraries and examples available with the STM32Cube MCU Package + - Support of a wide choice of Integrated Development Environments (IDEs) including IAR™, Keil®, and STM32CubeIDE +- Board-specific features + - External or internal SMPS to generate Vcore logic supply + - Ethernet compliant with IEEE-802.3-2002 + - USB OTG full speed or device only + - Board connectors:USB with Micro-AB or USB Type-C™Ethernet RJ45 + - Arm® Mbed Enabled™ compliant + + + +## Maintained By + +[BruceOu](https://github.com/Ouxiaolong/) + + + +## Translated By +> ouxiaolong@bruceou.cn +> +> https://github.com/Ouxiaolong/ + + + + diff --git a/bsp/stm32/stm32f746-st-nucleo/README_zh.md b/bsp/stm32/stm32f746-st-nucleo/README_zh.md new file mode 100644 index 0000000000..4dcbfb2781 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/README_zh.md @@ -0,0 +1,110 @@ +# STM32F746 NUCLEO-F746ZG开发板 BSP 说明 +## 简介 + +本文档为 NUCLEO-F746ZG 开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +NUCLEO-F746ZG是st推出的一款基于 ARM Cortex-M7 内核的开发板,最高主频为 216Mhz,该开发板具有丰富的板载资源,可以充分发挥 STM32F746 的芯片性能。 + +开发板外观如下图所示: + +![board](figures/en.high-perf_nucleo-144_mbed.jpg) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32f746,主频 216MHz,1MB FLASH ,320KB RAM ,16K CACHE + +- 常用外设 + - LED :3个,LED1 (绿色,PB0),LED2(蓝色,PB7),LED3(红色,PB14) + - 按键:2个,B1(用户按键,PC13),B2(复位引脚) +- 常用接口:USB 转串口3、以太网接口 +- 调试接口:ST-LINK + +开发板更多详细信息请参考ST [NUCLEO-F746zg开发板介绍](https://www.st.com/en/evaluation-tools/nucleo-f746zg.html)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :-----------------| :----------: | :-------------------------------------| +| USB 转串口3 | 支持 | | +| 以太网 | 支持 | PHY 选项 LAN8720A(兼容 LAN8742A) | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | PA0, PA1... PK15 ---> PIN: 0, 1...144 | +| UART | 支持 | UART3 | +| **扩展模块** | **支持情况** | **备注** | +| 暂无 | 暂不支持 | 暂不支持 | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + + +### 快速上手 + +本 BSP 为开发者提供 MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 ST-LINK 仿真器下载程序,在通过 ST-LINK 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,LED 闪烁。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.0 build Jan 9 2021 + 2006 - 2021 Copyright by rt-thread team +msh > +``` +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口3 的功能,如果需使用 Ethernet 等更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +暂无 + +## 联系人信息 + +维护人: + +- [BruceOu](https://github.com/Ouxiaolong/), 邮箱: \ No newline at end of file diff --git a/bsp/stm32/stm32f746-st-nucleo/SConscript b/bsp/stm32/stm32f746-st-nucleo/SConscript new file mode 100644 index 0000000000..20f7689c53 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/SConscript @@ -0,0 +1,15 @@ +# for module compiling +import os +Import('RTT_ROOT') +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/stm32/stm32f746-st-nucleo/SConstruct b/bsp/stm32/stm32f746-st-nucleo/SConstruct new file mode 100644 index 0000000000..050835a35a --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/SConstruct @@ -0,0 +1,60 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS, + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM == 'iar': + env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rt-thread.map') + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') + +if os.path.exists(SDK_ROOT + '/libraries'): + libraries_path_prefix = SDK_ROOT + '/libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +stm32_library = 'STM32F7xx_HAL' +rtconfig.BSP_LIBRARY_TYPE = stm32_library + +# include libraries +objs.extend(SConscript(os.path.join(libraries_path_prefix, stm32_library, 'SConscript'))) + +# include drivers +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'))) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/stm32/stm32f746-st-nucleo/applications/SConscript b/bsp/stm32/stm32f746-st-nucleo/applications/SConscript new file mode 100644 index 0000000000..6f66f7ab73 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/applications/SConscript @@ -0,0 +1,12 @@ +import rtconfig +from building import * + +cwd = GetCurrentDir() +CPPPATH = [cwd, str(Dir('#'))] +src = Split(""" +main.c +""") + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/stm32f746-st-nucleo/applications/main.c b/bsp/stm32/stm32f746-st-nucleo/applications/main.c new file mode 100644 index 0000000000..27a423eda3 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/applications/main.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-06-14 BruceOu first version + */ + +#include +#include +#include + +/* defined the LED1 pin: PB0 */ +#define LED1_PIN GET_PIN(B, 0) + +int main(void) +{ + int count = 1; + /* set LED1 pin mode to output */ + rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(LED1_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED1_PIN, PIN_LOW); + rt_thread_mdelay(500); + } + + return RT_EOK; +} diff --git a/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/.mxproject b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/.mxproject new file mode 100644 index 0000000000..c93c7a2d81 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/.mxproject @@ -0,0 +1,19 @@ +[PreviousLibFiles] +LibFiles=Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_cortex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_eth.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_def.h;Drivers/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_spi.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_spi_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_spi.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_spi_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_cortex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_eth.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_flash_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_dma_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pwr_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_def.h;Drivers/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_spi.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_spi_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h;Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/stm32f7xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Include/system_stm32f7xx.h;Drivers/CMSIS/Device/ST/STM32F7xx/Source/Templates/system_stm32f7xx.c;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/cmsis_armclang.h;Drivers/CMSIS/Include/cmsis_compiler.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_iccarm.h;Drivers/CMSIS/Include/cmsis_version.h;Drivers/CMSIS/Include/core_armv8mbl.h;Drivers/CMSIS/Include/core_armv8mml.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/core_cm1.h;Drivers/CMSIS/Include/core_cm23.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/core_cm33.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/mpu_armv7.h;Drivers/CMSIS/Include/mpu_armv8.h;Drivers/CMSIS/Include/tz_context.h; + +[PreviousUsedMakefileFiles] +SourceFiles=Src\main.c;Src\stm32f7xx_it.c;Src\stm32f7xx_hal_msp.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_spi.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_spi_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c;Src/system_stm32f7xx.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_spi.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_spi_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c;Src/system_stm32f7xx.c;Drivers/CMSIS/Device/ST/STM32F7xx/Source/Templates/system_stm32f7xx.c;; +HeaderPath=Drivers\STM32F7xx_HAL_Driver\Inc;Drivers\STM32F7xx_HAL_Driver\Inc\Legacy;Drivers\CMSIS\Device\ST\STM32F7xx\Include;Drivers\CMSIS\Include;Inc; +CDefines=USE_HAL_DRIVER;STM32F746xx;USE_HAL_DRIVER;USE_HAL_DRIVER; + +[PreviousUsedIarFiles] +SourceFiles=..\Src\main.c;..\Src\stm32f7xx_it.c;..\Src\stm32f7xx_hal_msp.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_spi.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_spi_ex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c;..\\Src/system_stm32f7xx.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_cortex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_eth.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc_ex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_flash_ex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_dma_ex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pwr_ex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c_ex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_spi.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_spi_ex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c;..\Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c;..\\Src/system_stm32f7xx.c;..\Drivers/CMSIS/Device/ST/STM32F7xx/Source/Templates/system_stm32f7xx.c;; +HeaderPath=..\Drivers\STM32F7xx_HAL_Driver\Inc;..\Drivers\STM32F7xx_HAL_Driver\Inc\Legacy;..\Drivers\CMSIS\Device\ST\STM32F7xx\Include;..\Drivers\CMSIS\Include;..\Inc; +CDefines=USE_HAL_DRIVER;STM32F746xx;USE_HAL_DRIVER;USE_HAL_DRIVER; + +[PreviousGenFiles] +HeaderPath=D:/RT-ThreadStudio/workspace/Nucleo-F746ZG/board/CubeMX_Config/Inc +HeaderFiles=stm32f7xx_it.h;stm32f7xx_hal_conf.h;main.h; +SourcePath=D:/RT-ThreadStudio/workspace/Nucleo-F746ZG/board/CubeMX_Config/Src +SourceFiles=stm32f7xx_it.c;stm32f7xx_hal_msp.c;main.c; + diff --git a/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..51adeb8bda --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,218 @@ +#MicroXplorer Configuration settings - do not modify +ETH.IPParameters=MediaInterface +ETH.MediaInterface=ETH_MEDIA_INTERFACE_RMII +File.Version=6 +GPIO.groupedBy= +KeepUserPlacement=false +Mcu.Family=STM32F7 +Mcu.IP0=CORTEX_M7 +Mcu.IP1=ETH +Mcu.IP2=NVIC +Mcu.IP3=RCC +Mcu.IP4=SPI2 +Mcu.IP5=SYS +Mcu.IP6=UART5 +Mcu.IP7=USART3 +Mcu.IPNb=8 +Mcu.Name=STM32F746ZGTx +Mcu.Package=LQFP144 +Mcu.Pin0=PC13 +Mcu.Pin1=PC14/OSC32_IN +Mcu.Pin10=PA7 +Mcu.Pin11=PC4 +Mcu.Pin12=PC5 +Mcu.Pin13=PB10 +Mcu.Pin14=PB13 +Mcu.Pin15=PD8 +Mcu.Pin16=PD9 +Mcu.Pin17=PC12 +Mcu.Pin18=PD2 +Mcu.Pin19=PG11 +Mcu.Pin2=PC15/OSC32_OUT +Mcu.Pin20=PG13 +Mcu.Pin21=VP_SYS_VS_Systick +Mcu.Pin3=PH0/OSC_IN +Mcu.Pin4=PH1/OSC_OUT +Mcu.Pin5=PC1 +Mcu.Pin6=PC2 +Mcu.Pin7=PC3 +Mcu.Pin8=PA1 +Mcu.Pin9=PA2 +Mcu.PinsNb=22 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F746ZGTx +MxCube.Version=6.0.1 +MxDb.Version=DB.6.0.0 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false +PA1.Locked=true +PA1.Mode=RMII +PA1.Signal=ETH_REF_CLK +PA2.Locked=true +PA2.Mode=RMII +PA2.Signal=ETH_MDIO +PA7.Locked=true +PA7.Mode=RMII +PA7.Signal=ETH_CRS_DV +PB10.Mode=Full_Duplex_Master +PB10.Signal=SPI2_SCK +PB13.Locked=true +PB13.Mode=RMII +PB13.Signal=ETH_TXD1 +PC1.Locked=true +PC1.Mode=RMII +PC1.Signal=ETH_MDC +PC12.Mode=Asynchronous +PC12.Signal=UART5_TX +PC13.GPIOParameters=GPIO_Label +PC13.GPIO_Label=USER_Btn [B1] +PC13.Locked=true +PC13.Signal=GPXTI13 +PC14/OSC32_IN.Locked=true +PC14/OSC32_IN.Mode=LSE-External-Oscillator +PC14/OSC32_IN.Signal=RCC_OSC32_IN +PC15/OSC32_OUT.Locked=true +PC15/OSC32_OUT.Mode=LSE-External-Oscillator +PC15/OSC32_OUT.Signal=RCC_OSC32_OUT +PC2.Mode=Full_Duplex_Master +PC2.Signal=SPI2_MISO +PC3.Mode=Full_Duplex_Master +PC3.Signal=SPI2_MOSI +PC4.Locked=true +PC4.Mode=RMII +PC4.Signal=ETH_RXD0 +PC5.Locked=true +PC5.Mode=RMII +PC5.Signal=ETH_RXD1 +PD2.Mode=Asynchronous +PD2.Signal=UART5_RX +PD8.Locked=true +PD8.Mode=Asynchronous +PD8.Signal=USART3_TX +PD9.Locked=true +PD9.Mode=Asynchronous +PD9.Signal=USART3_RX +PG11.Locked=true +PG11.Mode=RMII +PG11.Signal=ETH_TX_EN +PG13.Locked=true +PG13.Mode=RMII +PG13.Signal=ETH_TXD0 +PH0/OSC_IN.GPIOParameters=GPIO_Label +PH0/OSC_IN.GPIO_Label=MCO [STM32F103CBT6_PA8] +PH0/OSC_IN.Locked=true +PH0/OSC_IN.Mode=HSE-External-Clock-Source +PH0/OSC_IN.Signal=RCC_OSC_IN +PH1/OSC_OUT.Locked=true +PH1/OSC_OUT.Mode=HSE-External-Clock-Source +PH1/OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=false +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=true +ProjectManager.DeviceId=STM32F746ZGTx +ProjectManager.FirmwarePackage=STM32Cube FW_F7 V1.16.1 +ProjectManager.FreePins=false +ProjectManager.HalAssertFull=false +ProjectManager.HeapSize=0x200 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=0 +ProjectManager.MainLocation=Src +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain= +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=CubeMX_Config.ioc +ProjectManager.ProjectName=CubeMX_Config +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x400 +ProjectManager.TargetToolchain=EWARM V8 +ProjectManager.ToolChainLocation= +ProjectManager.UnderRoot=false +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_SPI1_Init-SPI1-false-HAL-true,4-MX_USART3_UART_Init-USART3-false-HAL-true,5-MX_UART4_Init-UART4-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true +RCC.AHBFreq_Value=216000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV4 +RCC.APB1Freq_Value=54000000 +RCC.APB1TimFreq_Value=108000000 +RCC.APB2CLKDivider=RCC_HCLK_DIV2 +RCC.APB2Freq_Value=108000000 +RCC.APB2TimFreq_Value=216000000 +RCC.CECFreq_Value=32786.88524590164 +RCC.CortexFreq_Value=216000000 +RCC.EthernetFreq_Value=216000000 +RCC.FCLKCortexFreq_Value=216000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=216000000 +RCC.HSE_VALUE=8000000 +RCC.HSI_VALUE=16000000 +RCC.I2C1Freq_Value=54000000 +RCC.I2C2Freq_Value=54000000 +RCC.I2C3Freq_Value=54000000 +RCC.I2C4Freq_Value=54000000 +RCC.I2SFreq_Value=192000000 +RCC.IPParameters=AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CECFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,I2SFreq_Value,LCDTFToutputFreq_Value,LPTIM1Freq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLI2SPCLKFreq_Value,PLLI2SQCLKFreq_Value,PLLI2SRCLKFreq_Value,PLLI2SRoutputFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLQoutputFreq_Value,PLLSAIPCLKFreq_Value,PLLSAIQCLKFreq_Value,PLLSAIRCLKFreq_Value,PLLSAIoutputFreq_Value,PLLSourceVirtual,RNGFreq_Value,SAI1Freq_Value,SAI2Freq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,UART5Freq_Value,UART7Freq_Value,UART8Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USART6Freq_Value,USBFreq_Value,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value +RCC.LCDTFToutputFreq_Value=96000000 +RCC.LPTIM1Freq_Value=54000000 +RCC.LSI_VALUE=32000 +RCC.MCO2PinFreq_Value=216000000 +RCC.PLLCLKFreq_Value=216000000 +RCC.PLLI2SPCLKFreq_Value=192000000 +RCC.PLLI2SQCLKFreq_Value=192000000 +RCC.PLLI2SRCLKFreq_Value=192000000 +RCC.PLLI2SRoutputFreq_Value=192000000 +RCC.PLLM=4 +RCC.PLLN=216 +RCC.PLLQCLKFreq_Value=216000000 +RCC.PLLQoutputFreq_Value=216000000 +RCC.PLLSAIPCLKFreq_Value=192000000 +RCC.PLLSAIQCLKFreq_Value=192000000 +RCC.PLLSAIRCLKFreq_Value=192000000 +RCC.PLLSAIoutputFreq_Value=192000000 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.RNGFreq_Value=216000000 +RCC.SAI1Freq_Value=192000000 +RCC.SAI2Freq_Value=192000000 +RCC.SDMMCFreq_Value=216000000 +RCC.SPDIFRXFreq_Value=192000000 +RCC.SYSCLKFreq_VALUE=216000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.UART4Freq_Value=54000000 +RCC.UART5Freq_Value=54000000 +RCC.UART7Freq_Value=54000000 +RCC.UART8Freq_Value=54000000 +RCC.USART1Freq_Value=108000000 +RCC.USART2Freq_Value=54000000 +RCC.USART3Freq_Value=54000000 +RCC.USART6Freq_Value=108000000 +RCC.USBFreq_Value=216000000 +RCC.VCOI2SOutputFreq_Value=384000000 +RCC.VCOInputFreq_Value=2000000 +RCC.VCOOutputFreq_Value=432000000 +RCC.VCOSAIOutputFreq_Value=384000000 +SH.GPXTI13.0=GPIO_EXTI13 +SH.GPXTI13.ConfNb=1 +SPI2.CalculateBaudRate=27.0 MBits/s +SPI2.Direction=SPI_DIRECTION_2LINES +SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate +SPI2.Mode=SPI_MODE_MASTER +SPI2.VirtualType=VM_MASTER +USART3.IPParameters=VirtualMode-Asynchronous +USART3.VirtualMode-Asynchronous=VM_ASYNC +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=custom diff --git a/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..89b704b3a5 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,95 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.h + * @brief : Header for main.c file. + * This file contains the common defines of the application. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f7xx_hal.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void Error_Handler(void); + +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +/* Private defines -----------------------------------------------------------*/ +#define USER_Btn_Pin GPIO_PIN_13 +#define USER_Btn_GPIO_Port GPIOC +#define MCO_Pin GPIO_PIN_0 +#define MCO_GPIO_Port GPIOH +/* USER CODE BEGIN Private defines */ + +/* USER CODE END Private defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h new file mode 100644 index 0000000000..3400e38c5f --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h @@ -0,0 +1,483 @@ +/** + ****************************************************************************** + * @file stm32f7xx_hal_conf_template.h + * @author MCD Application Team + * @brief HAL configuration template file. + * This file should be copied to the application folder and renamed + * to stm32f7xx_hal_conf.h. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2017 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under BSD 3-Clause license, + * the "License"; You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F7xx_HAL_CONF_H +#define __STM32F7xx_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_CRYP_MODULE_ENABLED */ +/* #define HAL_CAN_MODULE_ENABLED */ +/* #define HAL_CEC_MODULE_ENABLED */ +/* #define HAL_CRC_MODULE_ENABLED */ +/* #define HAL_CRYP_MODULE_ENABLED */ +/* #define HAL_DAC_MODULE_ENABLED */ +/* #define HAL_DCMI_MODULE_ENABLED */ +/* #define HAL_DMA2D_MODULE_ENABLED */ +#define HAL_ETH_MODULE_ENABLED +/* #define HAL_NAND_MODULE_ENABLED */ +/* #define HAL_NOR_MODULE_ENABLED */ +/* #define HAL_SRAM_MODULE_ENABLED */ +/* #define HAL_SDRAM_MODULE_ENABLED */ +/* #define HAL_HASH_MODULE_ENABLED */ +/* #define HAL_I2S_MODULE_ENABLED */ +/* #define HAL_IWDG_MODULE_ENABLED */ +/* #define HAL_LPTIM_MODULE_ENABLED */ +/* #define HAL_LTDC_MODULE_ENABLED */ +/* #define HAL_QSPI_MODULE_ENABLED */ +/* #define HAL_RNG_MODULE_ENABLED */ +/* #define HAL_RTC_MODULE_ENABLED */ +/* #define HAL_SAI_MODULE_ENABLED */ +/* #define HAL_SD_MODULE_ENABLED */ +/* #define HAL_MMC_MODULE_ENABLED */ +/* #define HAL_SPDIFRX_MODULE_ENABLED */ +#define HAL_SPI_MODULE_ENABLED +/* #define HAL_TIM_MODULE_ENABLED */ +#define HAL_UART_MODULE_ENABLED +/* #define HAL_USART_MODULE_ENABLED */ +/* #define HAL_IRDA_MODULE_ENABLED */ +/* #define HAL_SMARTCARD_MODULE_ENABLED */ +/* #define HAL_WWDG_MODULE_ENABLED */ +/* #define HAL_PCD_MODULE_ENABLED */ +/* #define HAL_HCD_MODULE_ENABLED */ +/* #define HAL_DFSDM_MODULE_ENABLED */ +/* #define HAL_DSI_MODULE_ENABLED */ +/* #define HAL_JPEG_MODULE_ENABLED */ +/* #define HAL_MDIOS_MODULE_ENABLED */ +/* #define HAL_SMBUS_MODULE_ENABLED */ +/* #define HAL_EXTI_MODULE_ENABLED */ +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_I2C_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED + +/* ########################## HSE/HSI 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)8000000U) /*!< Value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSE_STARTUP_TIMEOUT) + #define HSE_STARTUP_TIMEOUT ((uint32_t)100U) /*!< Time out for HSE start up, in ms */ +#endif /* HSE_STARTUP_TIMEOUT */ + +/** + * @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)16000000U) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @brief Internal Low Speed oscillator (LSI) value. + */ +#if !defined (LSI_VALUE) + #define LSI_VALUE ((uint32_t)32000U) /*!< 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 Low Speed oscillator (LSE) value. + */ +#if !defined (LSE_VALUE) + #define LSE_VALUE ((uint32_t)32768U) /*!< Value of the External Low Speed oscillator in Hz */ +#endif /* LSE_VALUE */ + +#if !defined (LSE_STARTUP_TIMEOUT) + #define LSE_STARTUP_TIMEOUT ((uint32_t)5000U) /*!< Time out for LSE start up, in ms */ +#endif /* LSE_STARTUP_TIMEOUT */ + +/** + * @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 ((uint32_t)12288000U) /*!< Value of the Internal oscillator 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)3300U) /*!< Value of VDD in mv */ +#define TICK_INT_PRIORITY ((uint32_t)0U) /*!< tick interrupt priority */ +#define USE_RTOS 0U +#define PREFETCH_ENABLE 0U +#define ART_ACCLERATOR_ENABLE 0U /* To enable instruction cache and prefetch */ + +#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ +#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ +#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC 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_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ +#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD 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_IRDA_REGISTER_CALLBACKS 0U /* IRDA 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 /* MDIOS register callback disabled */ +#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC 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_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_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ +#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD 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_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_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 */ + +/* ########################## Assert Selection ############################## */ +/** + * @brief Uncomment the line below to expanse the "assert_param" macro in the + * HAL drivers code + */ +/* #define USE_FULL_ASSERT 1U */ + +/* ################## Ethernet peripheral configuration ##################### */ + +/* Section 1 : Ethernet peripheral configuration */ + +/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ +#define MAC_ADDR0 2U +#define MAC_ADDR1 0U +#define MAC_ADDR2 0U +#define MAC_ADDR3 0U +#define MAC_ADDR4 0U +#define MAC_ADDR5 0U + +/* Definition of the Ethernet driver buffers size and count */ +#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ +#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ +#define ETH_RXBUFNB ((uint32_t)4U) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ +#define ETH_TXBUFNB ((uint32_t)4U) /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ + +/* Section 2: PHY configuration section */ + +/* LAN8742A_PHY_ADDRESS Address*/ +#define LAN8742A_PHY_ADDRESS 1 +/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ +#define PHY_RESET_DELAY ((uint32_t)0x000000FFU) +/* PHY Configuration delay */ +#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFFU) + +#define PHY_READ_TO ((uint32_t)0x0000FFFFU) +#define PHY_WRITE_TO ((uint32_t)0x0000FFFFU) + +/* Section 3: Common PHY Registers */ + +#define PHY_BCR ((uint16_t)0x00U) /*!< Transceiver Basic Control Register */ +#define PHY_BSR ((uint16_t)0x01U) /*!< Transceiver Basic Status Register */ + +#define PHY_RESET ((uint16_t)0x8000U) /*!< PHY Reset */ +#define PHY_LOOPBACK ((uint16_t)0x4000U) /*!< Select loop-back mode */ +#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100U) /*!< Set the full-duplex mode at 100 Mb/s */ +#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000U) /*!< Set the half-duplex mode at 100 Mb/s */ +#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100U) /*!< Set the full-duplex mode at 10 Mb/s */ +#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000U) /*!< Set the half-duplex mode at 10 Mb/s */ +#define PHY_AUTONEGOTIATION ((uint16_t)0x1000U) /*!< Enable auto-negotiation function */ +#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200U) /*!< Restart auto-negotiation function */ +#define PHY_POWERDOWN ((uint16_t)0x0800U) /*!< Select the power down mode */ +#define PHY_ISOLATE ((uint16_t)0x0400U) /*!< Isolate PHY from MII */ + +#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020U) /*!< Auto-Negotiation process completed */ +#define PHY_LINKED_STATUS ((uint16_t)0x0004U) /*!< Valid link established */ +#define PHY_JABBER_DETECTION ((uint16_t)0x0002U) /*!< Jabber condition detected */ + +/* Section 4: Extended PHY Registers */ +#define PHY_SR ((uint16_t)0x1FU) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)0x0004U) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)0x0010U) /*!< PHY Duplex mask */ + +#define PHY_ISFR ((uint16_t)0x001DU) /*!< PHY Interrupt Source Flag register Offset */ +#define PHY_ISFR_INT4 ((uint16_t)0x000BU) /*!< PHY Link down inturrupt */ + +/* ################## SPI peripheral configuration ########################## */ + +/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver +* Activated: CRC code is present inside driver +* Deactivated: CRC code cleaned from driver +*/ + +#define USE_SPI_CRC 0U + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ + +#ifdef HAL_RCC_MODULE_ENABLED + #include "stm32f7xx_hal_rcc.h" +#endif /* HAL_RCC_MODULE_ENABLED */ + +#ifdef HAL_EXTI_MODULE_ENABLED + #include "stm32f7xx_hal_exti.h" +#endif /* HAL_EXTI_MODULE_ENABLED */ + +#ifdef HAL_GPIO_MODULE_ENABLED + #include "stm32f7xx_hal_gpio.h" +#endif /* HAL_GPIO_MODULE_ENABLED */ + +#ifdef HAL_DMA_MODULE_ENABLED + #include "stm32f7xx_hal_dma.h" +#endif /* HAL_DMA_MODULE_ENABLED */ + +#ifdef HAL_CORTEX_MODULE_ENABLED + #include "stm32f7xx_hal_cortex.h" +#endif /* HAL_CORTEX_MODULE_ENABLED */ + +#ifdef HAL_ADC_MODULE_ENABLED + #include "stm32f7xx_hal_adc.h" +#endif /* HAL_ADC_MODULE_ENABLED */ + +#ifdef HAL_CAN_MODULE_ENABLED + #include "stm32f7xx_hal_can.h" +#endif /* HAL_CAN_MODULE_ENABLED */ + +#ifdef HAL_CEC_MODULE_ENABLED + #include "stm32f7xx_hal_cec.h" +#endif /* HAL_CEC_MODULE_ENABLED */ + +#ifdef HAL_CRC_MODULE_ENABLED + #include "stm32f7xx_hal_crc.h" +#endif /* HAL_CRC_MODULE_ENABLED */ + +#ifdef HAL_CRYP_MODULE_ENABLED + #include "stm32f7xx_hal_cryp.h" +#endif /* HAL_CRYP_MODULE_ENABLED */ + +#ifdef HAL_DMA2D_MODULE_ENABLED + #include "stm32f7xx_hal_dma2d.h" +#endif /* HAL_DMA2D_MODULE_ENABLED */ + +#ifdef HAL_DAC_MODULE_ENABLED + #include "stm32f7xx_hal_dac.h" +#endif /* HAL_DAC_MODULE_ENABLED */ + +#ifdef HAL_DCMI_MODULE_ENABLED + #include "stm32f7xx_hal_dcmi.h" +#endif /* HAL_DCMI_MODULE_ENABLED */ + +#ifdef HAL_ETH_MODULE_ENABLED + #include "stm32f7xx_hal_eth.h" +#endif /* HAL_ETH_MODULE_ENABLED */ + +#ifdef HAL_FLASH_MODULE_ENABLED + #include "stm32f7xx_hal_flash.h" +#endif /* HAL_FLASH_MODULE_ENABLED */ + +#ifdef HAL_SRAM_MODULE_ENABLED + #include "stm32f7xx_hal_sram.h" +#endif /* HAL_SRAM_MODULE_ENABLED */ + +#ifdef HAL_NOR_MODULE_ENABLED + #include "stm32f7xx_hal_nor.h" +#endif /* HAL_NOR_MODULE_ENABLED */ + +#ifdef HAL_NAND_MODULE_ENABLED + #include "stm32f7xx_hal_nand.h" +#endif /* HAL_NAND_MODULE_ENABLED */ + +#ifdef HAL_SDRAM_MODULE_ENABLED + #include "stm32f7xx_hal_sdram.h" +#endif /* HAL_SDRAM_MODULE_ENABLED */ + +#ifdef HAL_HASH_MODULE_ENABLED + #include "stm32f7xx_hal_hash.h" +#endif /* HAL_HASH_MODULE_ENABLED */ + +#ifdef HAL_I2C_MODULE_ENABLED + #include "stm32f7xx_hal_i2c.h" +#endif /* HAL_I2C_MODULE_ENABLED */ + +#ifdef HAL_I2S_MODULE_ENABLED + #include "stm32f7xx_hal_i2s.h" +#endif /* HAL_I2S_MODULE_ENABLED */ + +#ifdef HAL_IWDG_MODULE_ENABLED + #include "stm32f7xx_hal_iwdg.h" +#endif /* HAL_IWDG_MODULE_ENABLED */ + +#ifdef HAL_LPTIM_MODULE_ENABLED + #include "stm32f7xx_hal_lptim.h" +#endif /* HAL_LPTIM_MODULE_ENABLED */ + +#ifdef HAL_LTDC_MODULE_ENABLED + #include "stm32f7xx_hal_ltdc.h" +#endif /* HAL_LTDC_MODULE_ENABLED */ + +#ifdef HAL_PWR_MODULE_ENABLED + #include "stm32f7xx_hal_pwr.h" +#endif /* HAL_PWR_MODULE_ENABLED */ + +#ifdef HAL_QSPI_MODULE_ENABLED + #include "stm32f7xx_hal_qspi.h" +#endif /* HAL_QSPI_MODULE_ENABLED */ + +#ifdef HAL_RNG_MODULE_ENABLED + #include "stm32f7xx_hal_rng.h" +#endif /* HAL_RNG_MODULE_ENABLED */ + +#ifdef HAL_RTC_MODULE_ENABLED + #include "stm32f7xx_hal_rtc.h" +#endif /* HAL_RTC_MODULE_ENABLED */ + +#ifdef HAL_SAI_MODULE_ENABLED + #include "stm32f7xx_hal_sai.h" +#endif /* HAL_SAI_MODULE_ENABLED */ + +#ifdef HAL_SD_MODULE_ENABLED + #include "stm32f7xx_hal_sd.h" +#endif /* HAL_SD_MODULE_ENABLED */ + +#ifdef HAL_MMC_MODULE_ENABLED + #include "stm32f7xx_hal_mmc.h" +#endif /* HAL_MMC_MODULE_ENABLED */ + +#ifdef HAL_SPDIFRX_MODULE_ENABLED + #include "stm32f7xx_hal_spdifrx.h" +#endif /* HAL_SPDIFRX_MODULE_ENABLED */ + +#ifdef HAL_SPI_MODULE_ENABLED + #include "stm32f7xx_hal_spi.h" +#endif /* HAL_SPI_MODULE_ENABLED */ + +#ifdef HAL_TIM_MODULE_ENABLED + #include "stm32f7xx_hal_tim.h" +#endif /* HAL_TIM_MODULE_ENABLED */ + +#ifdef HAL_UART_MODULE_ENABLED + #include "stm32f7xx_hal_uart.h" +#endif /* HAL_UART_MODULE_ENABLED */ + +#ifdef HAL_USART_MODULE_ENABLED + #include "stm32f7xx_hal_usart.h" +#endif /* HAL_USART_MODULE_ENABLED */ + +#ifdef HAL_IRDA_MODULE_ENABLED + #include "stm32f7xx_hal_irda.h" +#endif /* HAL_IRDA_MODULE_ENABLED */ + +#ifdef HAL_SMARTCARD_MODULE_ENABLED + #include "stm32f7xx_hal_smartcard.h" +#endif /* HAL_SMARTCARD_MODULE_ENABLED */ + +#ifdef HAL_WWDG_MODULE_ENABLED + #include "stm32f7xx_hal_wwdg.h" +#endif /* HAL_WWDG_MODULE_ENABLED */ + +#ifdef HAL_PCD_MODULE_ENABLED + #include "stm32f7xx_hal_pcd.h" +#endif /* HAL_PCD_MODULE_ENABLED */ + +#ifdef HAL_HCD_MODULE_ENABLED + #include "stm32f7xx_hal_hcd.h" +#endif /* HAL_HCD_MODULE_ENABLED */ + +#ifdef HAL_DFSDM_MODULE_ENABLED + #include "stm32f7xx_hal_dfsdm.h" +#endif /* HAL_DFSDM_MODULE_ENABLED */ + +#ifdef HAL_DSI_MODULE_ENABLED + #include "stm32f7xx_hal_dsi.h" +#endif /* HAL_DSI_MODULE_ENABLED */ + +#ifdef HAL_JPEG_MODULE_ENABLED + #include "stm32f7xx_hal_jpeg.h" +#endif /* HAL_JPEG_MODULE_ENABLED */ + +#ifdef HAL_MDIOS_MODULE_ENABLED + #include "stm32f7xx_hal_mdios.h" +#endif /* HAL_MDIOS_MODULE_ENABLED */ + +#ifdef HAL_SMBUS_MODULE_ENABLED + #include "stm32f7xx_hal_smbus.h" +#endif /* HAL_SMBUS_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 /* __STM32F7xx_HAL_CONF_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_it.h b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_it.h new file mode 100644 index 0000000000..a1a9645d98 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_it.h @@ -0,0 +1,84 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f7xx_it.h + * @brief This file contains the headers of the interrupt handlers. + ****************************************************************************** + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F7xx_IT_H +#define __STM32F7xx_IT_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Exported types ------------------------------------------------------------*/ +/* USER CODE BEGIN ET */ + +/* USER CODE END ET */ + +/* Exported constants --------------------------------------------------------*/ +/* USER CODE BEGIN EC */ + +/* USER CODE END EC */ + +/* Exported macro ------------------------------------------------------------*/ +/* USER CODE BEGIN EM */ + +/* USER CODE END EM */ + +/* Exported functions prototypes ---------------------------------------------*/ +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +/* USER CODE BEGIN EFP */ + +/* USER CODE END EFP */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STM32F7xx_IT_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..0fb797171c --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/main.c @@ -0,0 +1,409 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : main.c + * @brief : Main program body + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ + +ETH_HandleTypeDef heth; + +SPI_HandleTypeDef hspi2; + +UART_HandleTypeDef huart5; +UART_HandleTypeDef huart3; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_USART3_UART_Init(void); +static void MX_ETH_Init(void); +static void MX_SPI2_Init(void); +static void MX_UART5_Init(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + /* USER CODE BEGIN 1 */ + + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_USART3_UART_Init(); + MX_ETH_Init(); + MX_SPI2_Init(); + MX_UART5_Init(); + /* USER CODE BEGIN 2 */ + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + + /** Configure LSE Drive Capability + */ + HAL_PWR_EnableBkUpAccess(); + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + 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 = 4; + RCC_OscInitStruct.PLL.PLLN = 216; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 2; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Activate the Over-Drive mode + */ + if (HAL_PWREx_EnableOverDrive() != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |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; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART3|RCC_PERIPHCLK_UART5; + PeriphClkInitStruct.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1; + PeriphClkInitStruct.Uart5ClockSelection = RCC_UART5CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } +} + +/** + * @brief ETH Initialization Function + * @param None + * @retval None + */ +static void MX_ETH_Init(void) +{ + + /* USER CODE BEGIN ETH_Init 0 */ + + /* USER CODE END ETH_Init 0 */ + + /* USER CODE BEGIN ETH_Init 1 */ + + /* USER CODE END ETH_Init 1 */ + heth.Instance = ETH; + heth.Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE; + heth.Init.PhyAddress = LAN8742A_PHY_ADDRESS; + heth.Init.MACAddr[0] = 0x00; + heth.Init.MACAddr[1] = 0x80; + heth.Init.MACAddr[2] = 0xE1; + heth.Init.MACAddr[3] = 0x00; + heth.Init.MACAddr[4] = 0x00; + heth.Init.MACAddr[5] = 0x00; + heth.Init.RxMode = ETH_RXPOLLING_MODE; + heth.Init.ChecksumMode = ETH_CHECKSUM_BY_HARDWARE; + heth.Init.MediaInterface = ETH_MEDIA_INTERFACE_RMII; + + /* USER CODE BEGIN MACADDRESS */ + + /* USER CODE END MACADDRESS */ + + if (HAL_ETH_Init(&heth) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN ETH_Init 2 */ + + /* USER CODE END ETH_Init 2 */ + +} + +/** + * @brief SPI2 Initialization Function + * @param None + * @retval None + */ +static void MX_SPI2_Init(void) +{ + + /* USER CODE BEGIN SPI2_Init 0 */ + + /* USER CODE END SPI2_Init 0 */ + + /* USER CODE BEGIN SPI2_Init 1 */ + + /* USER CODE END SPI2_Init 1 */ + /* SPI2 parameter configuration*/ + hspi2.Instance = SPI2; + hspi2.Init.Mode = SPI_MODE_MASTER; + hspi2.Init.Direction = SPI_DIRECTION_2LINES; + hspi2.Init.DataSize = SPI_DATASIZE_4BIT; + hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi2.Init.NSS = SPI_NSS_SOFT; + hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; + hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi2.Init.TIMode = SPI_TIMODE_DISABLE; + hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi2.Init.CRCPolynomial = 7; + hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; + hspi2.Init.NSSPMode = SPI_NSS_PULSE_ENABLE; + if (HAL_SPI_Init(&hspi2) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN SPI2_Init 2 */ + + /* USER CODE END SPI2_Init 2 */ + +} + +/** + * @brief UART5 Initialization Function + * @param None + * @retval None + */ +static void MX_UART5_Init(void) +{ + + /* USER CODE BEGIN UART5_Init 0 */ + + /* USER CODE END UART5_Init 0 */ + + /* USER CODE BEGIN UART5_Init 1 */ + + /* USER CODE END UART5_Init 1 */ + huart5.Instance = UART5; + huart5.Init.BaudRate = 115200; + huart5.Init.WordLength = UART_WORDLENGTH_8B; + huart5.Init.StopBits = UART_STOPBITS_1; + huart5.Init.Parity = UART_PARITY_NONE; + huart5.Init.Mode = UART_MODE_TX_RX; + huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart5.Init.OverSampling = UART_OVERSAMPLING_16; + huart5.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart5.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart5) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN UART5_Init 2 */ + + /* USER CODE END UART5_Init 2 */ + +} + +/** + * @brief USART3 Initialization Function + * @param None + * @retval None + */ +static void MX_USART3_UART_Init(void) +{ + + /* USER CODE BEGIN USART3_Init 0 */ + + /* USER CODE END USART3_Init 0 */ + + /* USER CODE BEGIN USART3_Init 1 */ + + /* USER CODE END USART3_Init 1 */ + huart3.Instance = USART3; + huart3.Init.BaudRate = 115200; + huart3.Init.WordLength = UART_WORDLENGTH_8B; + huart3.Init.StopBits = UART_STOPBITS_1; + huart3.Init.Parity = UART_PARITY_NONE; + huart3.Init.Mode = UART_MODE_TX_RX; + huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart3.Init.OverSampling = UART_OVERSAMPLING_16; + huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; + huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; + if (HAL_UART_Init(&huart3) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART3_Init 2 */ + + /* USER CODE END USART3_Init 2 */ + +} + +/** + * @brief GPIO Initialization Function + * @param None + * @retval None + */ +static void MX_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + __HAL_RCC_GPIOG_CLK_ENABLE(); + + /*Configure GPIO pin : USER_Btn_Pin */ + GPIO_InitStruct.Pin = USER_Btn_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(USER_Btn_GPIO_Port, &GPIO_InitStruct); + +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + + /* USER CODE END Error_Handler_Debug */ +} + +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c new file mode 100644 index 0000000000..7826021b9a --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c @@ -0,0 +1,407 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * File Name : stm32f7xx_hal_msp.c + * Description : This file provides code for the MSP Initialization + * and de-Initialization codes. + ****************************************************************************** + ** This notice applies to any and all portions of this file + * that are not between comment pairs USER CODE BEGIN and + * USER CODE END. Other portions of this file, whether + * inserted by the user or by software development tools + * are owned by their respective copyright owners. + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN Define */ + +/* USER CODE END Define */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN Macro */ + +/* USER CODE END Macro */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* External functions --------------------------------------------------------*/ +/* USER CODE BEGIN ExternalFunctions */ + +/* USER CODE END ExternalFunctions */ + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_RCC_SYSCFG_CLK_ENABLE(); + + /* System interrupt init*/ + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + +/** +* @brief ETH MSP Initialization +* This function configures the hardware resources used in this example +* @param heth: ETH handle pointer +* @retval None +*/ +void HAL_ETH_MspInit(ETH_HandleTypeDef* heth) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(heth->Instance==ETH) + { + /* USER CODE BEGIN ETH_MspInit 0 */ + + /* USER CODE END ETH_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_ETH_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOG_CLK_ENABLE(); + /**ETH GPIO Configuration + PC1 ------> ETH_MDC + PA1 ------> ETH_REF_CLK + PA2 ------> ETH_MDIO + PA7 ------> ETH_CRS_DV + PC4 ------> ETH_RXD0 + PC5 ------> ETH_RXD1 + PB13 ------> ETH_TXD1 + PG11 ------> ETH_TX_EN + PG13 ------> ETH_TXD0 + */ + GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|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_AF11_ETH; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_13; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_13; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF11_ETH; + HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); + + /* USER CODE BEGIN ETH_MspInit 1 */ + + /* USER CODE END ETH_MspInit 1 */ + } + +} + +/** +* @brief ETH MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param heth: ETH handle pointer +* @retval None +*/ +void HAL_ETH_MspDeInit(ETH_HandleTypeDef* heth) +{ + if(heth->Instance==ETH) + { + /* USER CODE BEGIN ETH_MspDeInit 0 */ + + /* USER CODE END ETH_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_ETH_CLK_DISABLE(); + + /**ETH GPIO Configuration + PC1 ------> ETH_MDC + PA1 ------> ETH_REF_CLK + PA2 ------> ETH_MDIO + PA7 ------> ETH_CRS_DV + PC4 ------> ETH_RXD0 + PC5 ------> ETH_RXD1 + PB13 ------> ETH_TXD1 + PG11 ------> ETH_TX_EN + PG13 ------> ETH_TXD0 + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5); + + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_13); + + HAL_GPIO_DeInit(GPIOG, GPIO_PIN_11|GPIO_PIN_13); + + /* USER CODE BEGIN ETH_MspDeInit 1 */ + + /* USER CODE END ETH_MspDeInit 1 */ + } + +} + +/** +* @brief SPI MSP Initialization +* This function configures the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hspi->Instance==SPI2) + { + /* USER CODE BEGIN SPI2_MspInit 0 */ + + /* USER CODE END SPI2_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_SPI2_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**SPI2 GPIO Configuration + PC2 ------> SPI2_MISO + PC3 ------> SPI2_MOSI + PB10 ------> SPI2_SCK + */ + GPIO_InitStruct.Pin = GPIO_PIN_2|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_AF5_SPI2; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN SPI2_MspInit 1 */ + + /* USER CODE END SPI2_MspInit 1 */ + } + +} + +/** +* @brief SPI MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hspi: SPI handle pointer +* @retval None +*/ +void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) +{ + if(hspi->Instance==SPI2) + { + /* USER CODE BEGIN SPI2_MspDeInit 0 */ + + /* USER CODE END SPI2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_SPI2_CLK_DISABLE(); + + /**SPI2 GPIO Configuration + PC2 ------> SPI2_MISO + PC3 ------> SPI2_MOSI + PB10 ------> SPI2_SCK + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_2|GPIO_PIN_3); + + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10); + + /* USER CODE BEGIN SPI2_MspDeInit 1 */ + + /* USER CODE END SPI2_MspDeInit 1 */ + } + +} + +/** +* @brief UART MSP Initialization +* This function configures the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspInit(UART_HandleTypeDef* huart) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(huart->Instance==UART5) + { + /* USER CODE BEGIN UART5_MspInit 0 */ + + /* USER CODE END UART5_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_UART5_CLK_ENABLE(); + + __HAL_RCC_GPIOC_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**UART5 GPIO Configuration + PC12 ------> UART5_TX + PD2 ------> UART5_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_12; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF8_UART5; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_2; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF8_UART5; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN UART5_MspInit 1 */ + + /* USER CODE END UART5_MspInit 1 */ + } + else if(huart->Instance==USART3) + { + /* USER CODE BEGIN USART3_MspInit 0 */ + + /* USER CODE END USART3_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART3_CLK_ENABLE(); + + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**USART3 GPIO Configuration + PD8 ------> USART3_TX + PD9 ------> USART3_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART3; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN USART3_MspInit 1 */ + + /* USER CODE END USART3_MspInit 1 */ + } + +} + +/** +* @brief UART MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param huart: UART handle pointer +* @retval None +*/ +void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) +{ + if(huart->Instance==UART5) + { + /* USER CODE BEGIN UART5_MspDeInit 0 */ + + /* USER CODE END UART5_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_UART5_CLK_DISABLE(); + + /**UART5 GPIO Configuration + PC12 ------> UART5_TX + PD2 ------> UART5_RX + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_12); + + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2); + + /* USER CODE BEGIN UART5_MspDeInit 1 */ + + /* USER CODE END UART5_MspDeInit 1 */ + } + else if(huart->Instance==USART3) + { + /* USER CODE BEGIN USART3_MspDeInit 0 */ + + /* USER CODE END USART3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART3_CLK_DISABLE(); + + /**USART3 GPIO Configuration + PD8 ------> USART3_TX + PD9 ------> USART3_RX + */ + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_8|GPIO_PIN_9); + + /* USER CODE BEGIN USART3_MspDeInit 1 */ + + /* USER CODE END USART3_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_it.c b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_it.c new file mode 100644 index 0000000000..000e18671f --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_it.c @@ -0,0 +1,218 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file stm32f7xx_it.c + * @brief Interrupt Service Routines. + ****************************************************************************** + * + * COPYRIGHT(c) 2018 STMicroelectronics + * + * 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. + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "stm32f7xx_it.h" +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN TD */ + +/* USER CODE END TD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* External variables --------------------------------------------------------*/ + +/* USER CODE BEGIN EV */ + +/* USER CODE END EV */ + +/******************************************************************************/ +/* Cortex-M7 Processor Interruption and Exception Handlers */ +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ + + /* USER CODE END NonMaskableInt_IRQn 0 */ + /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ + + /* USER CODE END NonMaskableInt_IRQn 1 */ +} + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_HardFault_IRQn 0 */ + /* USER CODE END W1_HardFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ + /* USER CODE END W1_MemoryManagement_IRQn 0 */ + } +} + +/** + * @brief This function handles Pre-fetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_BusFault_IRQn 0 */ + /* USER CODE END W1_BusFault_IRQn 0 */ + } +} + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + { + /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ + /* USER CODE END W1_UsageFault_IRQn 0 */ + } +} + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + /* USER CODE BEGIN SVCall_IRQn 0 */ + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + /* USER CODE BEGIN DebugMonitor_IRQn 0 */ + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + /* USER CODE BEGIN PendSV_IRQn 0 */ + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + +/******************************************************************************/ +/* STM32F7xx Peripheral Interrupt Handlers */ +/* Add here the Interrupt Handlers for the used peripherals. */ +/* For the available peripheral interrupt handler names, */ +/* please refer to the startup file (startup_stm32f7xx.s). */ +/******************************************************************************/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/system_stm32f7xx.c b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/system_stm32f7xx.c new file mode 100644 index 0000000000..c07308121e --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/CubeMX_Config/Src/system_stm32f7xx.c @@ -0,0 +1,278 @@ +/** + ****************************************************************************** + * @file system_stm32f7xx.c + * @author MCD Application Team + * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File. + * + * This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f7xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2016 STMicroelectronics

+ * + * 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. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f7xx_system + * @{ + */ + +/** @addtogroup STM32F7xx_System_Private_Includes + * @{ + */ + +#include "stm32f7xx.h" + +#if !defined (HSE_VALUE) + #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */ +#endif /* HSE_VALUE */ + +#if !defined (HSI_VALUE) + #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/ +#endif /* HSI_VALUE */ + +/** + * @} + */ + +/** @addtogroup STM32F7xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F7xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +/******************************************************************************/ + +/** + * @} + */ + +/** @addtogroup STM32F7xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F7xx_System_Private_Variables + * @{ + */ + + /* This variable is updated in three ways: + 1) by calling CMSIS function SystemCoreClockUpdate() + 2) by calling HAL API function HAL_RCC_GetHCLKFreq() + 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency + Note: If you use this function to configure the system clock; then there + is no need to call the 2 first functions listed above, since SystemCoreClock + variable is updated automatically. + */ + uint32_t SystemCoreClock = 16000000; + const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; + +/** + * @} + */ + +/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F7xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* FPU settings ------------------------------------------------------------*/ + #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ + #endif + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f746-st-nucleo/board/Kconfig b/bsp/stm32/stm32f746-st-nucleo/board/Kconfig new file mode 100644 index 0000000000..16a55c51f8 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/Kconfig @@ -0,0 +1,253 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F746ZG + bool + select SOC_SERIES_STM32F7 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +menu "Onboard Peripheral Drivers" + + config BSP_USING_USB_TO_USART + bool "Enable USB TO USART (uart3)" + select BSP_USING_UART3 + default y + + config BSP_USING_ETH + bool "Enable Ethernet" + select RT_USING_LWIP + default n + + if BSP_USING_ETH + choice + prompt "On-board PHY chip" + default PHY_USING_LAN8742A + + config PHY_USING_LAN8720A + bool "LAN8720A" + + config PHY_USING_DM9161CEP + bool "DM9161CEP" + + config PHY_USING_LAN8742A + bool "LAN8742A" + endchoice + endif +endmenu + +menu "On-chip Peripheral Drivers" + + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default y + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + if BSP_USING_UART + + config BSP_USING_UART3 + bool "Enable UART3" + default n + + config BSP_UART3_RX_USING_DMA + bool "Enable UART3 RX DMA" + depends on BSP_USING_UART3 && RT_SERIAL_USING_DMA + default n + + config BSP_USING_UART5 + bool "Enable UART5" + default n + + config BSP_UART5_RX_USING_DMA + bool "Enable UART5 RX DMA" + depends on BSP_USING_UART5 && RT_SERIAL_USING_DMA + default n + endif + menuconfig BSP_USING_SPI + bool "Enable SPI BUS" + default n + select RT_USING_SPI + if BSP_USING_SPI + config BSP_USING_SPI1 + bool "Enable SPI1 BUS" + default n + + config BSP_SPI1_TX_USING_DMA + bool "Enable SPI1 TX DMA" + depends on BSP_USING_SPI1 + default n + + config BSP_SPI1_RX_USING_DMA + bool "Enable SPI1 RX DMA" + depends on BSP_USING_SPI1 + select BSP_SPI1_TX_USING_DMA + default n + + config BSP_USING_SPI2 + bool "Enable SPI2 BUS" + default n + + config BSP_SPI2_TX_USING_DMA + bool "Enable SPI2 TX DMA" + depends on BSP_USING_SPI2 + default n + + config BSP_SPI2_RX_USING_DMA + bool "Enable SPI2 RX DMA" + depends on BSP_USING_SPI2 + select BSP_SPI2_TX_USING_DMA + default n + + config BSP_USING_SPI3 + bool "Enable SPI3 BUS" + default n + + config BSP_SPI3_TX_USING_DMA + bool "Enable SPI3 TX DMA" + depends on BSP_USING_SPI3 + default n + + config BSP_SPI3_RX_USING_DMA + bool "Enable SPI3 RX DMA" + depends on BSP_USING_SPI3 + select BSP_SPI3_TX_USING_DMA + default n + endif + + menuconfig BSP_USING_I2C1 + bool "Enable I2C1 BUS (software simulation)" + default n + select RT_USING_I2C + select RT_USING_I2C_BITOPS + select RT_USING_PIN + if BSP_USING_I2C1 + config BSP_I2C1_SCL_PIN + int "i2c1 scl pin number" + range 0 175 + default 22 + config BSP_I2C1_SDA_PIN + int "I2C1 sda pin number" + range 0 175 + default 23 + endif + + menuconfig BSP_USING_TIM + bool "Enable timer" + default n + select RT_USING_HWTIMER + if BSP_USING_TIM + config BSP_USING_TIM2 + bool "Enable TIM2" + default n + + config BSP_USING_TIM3 + bool "Enable TIM3" + default n + + config BSP_USING_TIM4 + bool "Enable TIM4" + default n + + config BSP_USING_TIM5 + bool "Enable TIM5" + default n + endif + + menuconfig BSP_USING_PWM + bool "Enable pwm" + default n + select RT_USING_PWM + if BSP_USING_PWM + menuconfig BSP_USING_PWM3 + bool "Enable timer3 output pwm" + default n + if BSP_USING_PWM3 + config BSP_USING_PWM3_CH2 + bool "Enable PWM3 channel2" + default n + + config BSP_USING_PWM3_CH3 + bool "Enable PWM3 channel3" + default n + + config BSP_USING_PWM3_CH4 + bool "Enable PWM3 channel4" + default n + endif + endif + + menuconfig BSP_USING_ADC + bool "Enable ADC" + default n + select RT_USING_ADC + if BSP_USING_ADC + config BSP_USING_ADC1 + bool "Enable ADC1" + default n + endif + + menuconfig BSP_USING_ONCHIP_RTC + bool "Enable RTC" + select RT_USING_RTC + select RT_USING_LIBC + default n + if BSP_USING_ONCHIP_RTC + choice + prompt "Select clock source" + default BSP_RTC_USING_LSE + + config BSP_RTC_USING_LSE + bool "RTC USING LSE" + + config BSP_RTC_USING_LSI + bool "RTC USING LSI" + endchoice + endif + + config BSP_USING_WDT + bool "Enable Watchdog Timer" + select RT_USING_WDT + default n + + config BSP_USING_SDIO + bool "Enable SDIO" + select RT_USING_SDIO + select RT_USING_DFS + default n + + menuconfig BSP_USING_CAN + bool "Enable CAN" + default n + select RT_USING_CAN + if BSP_USING_CAN + config BSP_USING_CAN1 + bool "using CAN1" + default n + endif + + config BSP_USING_USBD + bool "Enable USB device" + select RT_USING_USB_DEVICE + default n + if BSP_USING_USBD + config BSP_USB_CONNECT_PIN + int "USB connect pin" + default 67 + + config BSP_USB_PULL_UP_STATUS + int "USB PULL UP STATUS" + default 0 + endif + source "libraries/HAL_Drivers/Kconfig" + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f746-st-nucleo/board/SConscript b/bsp/stm32/stm32f746-st-nucleo/board/SConscript new file mode 100644 index 0000000000..3c6a939c99 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/SConscript @@ -0,0 +1,35 @@ +import os +import rtconfig +from building import * + +Import('SDK_LIB') + +cwd = GetCurrentDir() + +# add the general drivers. +src = Glob('board.c') +src += Glob('CubeMX_Config/Src/stm32f7xx_hal_msp.c') + +if GetDepend(['BSP_USING_ETH']): + src += Glob('ports/phy_reset.c') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] +path += [cwd + '/ports'] + +startup_path_prefix = SDK_LIB + +if rtconfig.CROSS_TOOL == 'gcc': + src += [startup_path_prefix + '/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/gcc/startup_stm32f746xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [startup_path_prefix + '/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/arm/startup_stm32f746xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [startup_path_prefix + '/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/iar/startup_stm32f746xx.s'] + +# STM32F756xx || STM32F746xx || STM32F745xx || STM32F767xx || +# STM32F769xx || STM32F777xx || STM32F779xx || STM32F722xx || +# STM32F723xx || STM32F732xx || STM32F733xx || STM32F730xx || STM32F750xx +# You can select chips from the list above +CPPDEFINES = ['STM32F746xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) +Return('group') diff --git a/bsp/stm32/stm32f746-st-nucleo/board/board.c b/bsp/stm32/stm32f746-st-nucleo/board/board.c new file mode 100644 index 0000000000..fb1e614bc7 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/board.c @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-06-14 BruceOu first version + */ + +#include "board.h" + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + + /** Configure LSE Drive Capability + */ + HAL_PWR_EnableBkUpAccess(); + /** Configure the main internal regulator output voltage + */ + __HAL_RCC_PWR_CLK_ENABLE(); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + 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 = 4; + RCC_OscInitStruct.PLL.PLLN = 216; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 2; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + /** Activate the Over-Drive mode + */ + if (HAL_PWREx_EnableOverDrive() != HAL_OK) + { + Error_Handler(); + } + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |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; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART3; + PeriphClkInitStruct.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } +} diff --git a/bsp/stm32/stm32f746-st-nucleo/board/board.h b/bsp/stm32/stm32f746-st-nucleo/board/board.h new file mode 100644 index 0000000000..3b37641ec9 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/board.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-06-14 BruceOu first version + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include +#include "drv_common.h" +#include "drv_gpio.h" + +#define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) +#define STM32_FLASH_SIZE (1024 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +#define STM32_SRAM_SIZE (256) +#define STM32_SRAM_END (0x20010000 + STM32_SRAM_SIZE * 1024) + +#if defined(__CC_ARM) || defined(__CLANG_ARM) +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="CSTACK" +#define HEAP_BEGIN (__segment_end("CSTACK")) +#else +extern int __bss_end; +#define HEAP_BEGIN (&__bss_end) +#endif + +#define HEAP_END STM32_SRAM_END + +void SystemClock_Config(void); + +#endif diff --git a/bsp/stm32/stm32f746-st-nucleo/board/linker_scripts/link.icf b/bsp/stm32/stm32f746-st-nucleo/board/linker_scripts/link.icf new file mode 100644 index 0000000000..33fb05402c --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/linker_scripts/link.icf @@ -0,0 +1,28 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x081FFFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2007FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x0400; +define symbol __ICFEDIT_size_heap__ = 0x0000; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, last block CSTACK}; diff --git a/bsp/stm32/stm32f746-st-nucleo/board/linker_scripts/link.lds b/bsp/stm32/stm32f746-st-nucleo/board/linker_scripts/link.lds new file mode 100644 index 0000000000..09cdaa3a09 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/linker_scripts/link.lds @@ -0,0 +1,157 @@ +/* + * linker script for STM32F7xx with GNU ld + * jinsheng 2019-01-06 + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 1024KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 320k /* 320 K sram */ +} +ENTRY(Reset_Handler) +_system_stack_size = 0x200; + +SECTIONS +{ + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) /* Startup code */ + + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + + PROVIDE(__ctors_start__ = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE(__ctors_end__ = .); + + . = ALIGN(4); + + _etext = .; + } > ROM = 0 + + /* .ARM.exidx is sorted, so has to go in its own output section. */ + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > ROM + __exidx_end = .; + + /* .data section which is used for initialized data */ + + .data : AT (_sidata) + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + PROVIDE(__dtors_start__ = .); + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end__ = .); + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } >RAM + + .stack : + { + . = ALIGN(4); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >RAM + + __bss_start = .; + .bss : + { + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + + *(.bss.init) + } > RAM + __bss_end = .; + + _end = .; + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/stm32/stm32f746-st-nucleo/board/linker_scripts/link.sct b/bsp/stm32/stm32f746-st-nucleo/board/linker_scripts/link.sct new file mode 100644 index 0000000000..7a2a883cd3 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/linker_scripts/link.sct @@ -0,0 +1,15 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00200000 { ; load region size_region + ER_IROM1 0x08000000 0x00200000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + RW_IRAM1 0x20020000 0x00080000 { ; RW data + .ANY (+RW +ZI) + } +} + diff --git a/bsp/stm32/stm32f746-st-nucleo/board/ports/phy_reset.c b/bsp/stm32/stm32f746-st-nucleo/board/ports/phy_reset.c new file mode 100644 index 0000000000..79b8fecc16 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/board/ports/phy_reset.c @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-06-27 luhuadong first version + */ + +#include + +void phy_reset(void) +{ + /* + * The PHY reset pin of NUCLEO-F767ZI is connected to the MCU reset pin, + * so no additional reset is required. + */ + + return ; +} diff --git a/bsp/stm32/stm32f746-st-nucleo/figures/en.high-perf_nucleo-144_mbed.jpg b/bsp/stm32/stm32f746-st-nucleo/figures/en.high-perf_nucleo-144_mbed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e016b56aac22d4a263af0fa6050b9838f26198f GIT binary patch literal 73924 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%0D@a0^bU|0)%`F>mv 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 + + 3 + + rt-thread + + ARM + + 1 + + C-SPY + 2 + + 30 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 1 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 1 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 1 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 30 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + CADI_ID + 2 + + 0 + 1 + 0 + + + + + + + + + CMSISDAP_ID + 2 + + 4 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IJET_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + NULINK_ID + 2 + + 0 + 1 + 0 + + + + + + + PEMICRO_ID + 2 + + 3 + 1 + 0 + + + + + + + + STLINK_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + TIFET_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + XDS100_ID + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8BE.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + diff --git a/bsp/stm32/stm32f746-st-nucleo/project.ewp b/bsp/stm32/stm32f746-st-nucleo/project.ewp new file mode 100644 index 0000000000..893b8818f4 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/project.ewp @@ -0,0 +1,2422 @@ + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Applications + + $PROJ_DIR$\applications\main.c + + + + cpu + + $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\cpu_cache.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\context_iar.S + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\misc\pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\serial.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\completion.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\src\workqueue.c + + + + dlib + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\environ.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\libc.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\rmtx.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\stdio.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_close.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_lseek.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_mem.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_open.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_read.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_remove.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_write.c + + + + Drivers + + $PROJ_DIR$\board\board.c + + + $PROJ_DIR$\board\CubeMX_Config\Src\stm32f7xx_hal_msp.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\iar\startup_stm32f746xx.s + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_gpio.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_usart.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c + + + + Filesystem + + $PROJ_DIR$\..\..\..\components\dfs\src\dfs.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\dfs_file.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\dfs_fs.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\dfs_posix.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\poll.c + + + $PROJ_DIR$\..\..\..\components\dfs\src\select.c + + + $PROJ_DIR$\..\..\..\components\dfs\filesystems\devfs\devfs.c + + + + finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_file.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_compiler.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_error.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_heap.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_init.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_node.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_ops.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_parser.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_var.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_vm.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_token.c + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\device.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\scheduler.c + + + $PROJ_DIR$\..\..\..\src\signal.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + libc + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\time.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\unistd.c + + + + STM32_HAL + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart_ex.c + + + $PROJ_DIR$\..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + + + diff --git a/bsp/stm32/stm32f746-st-nucleo/project.eww b/bsp/stm32/stm32f746-st-nucleo/project.eww new file mode 100644 index 0000000000..faa93f37cd --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f746-st-nucleo/project.uvoptx b/bsp/stm32/stm32f746-st-nucleo/project.uvoptx new file mode 100644 index 0000000000..1f71708a8b --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/project.uvoptx @@ -0,0 +1,1336 @@ + + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD20010000 -FF0STM32F7x_1024 -FF1STM32F7xTCM_1024 -FL0100000 -FL1100000 -FS08000000 -FS1200000 -FP0($$Device:STM32F746ZGTx$CMSIS\Flash\STM32F7x_1024.FLM) -FP1($$Device:STM32F746ZGTx$CMSIS\Flash\STM32F7xTCM_1024.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD20010000 -FF0STM32F7x_1024 -FF1STM32F7xTCM_1024 -FL0100000 -FL1100000 -FS08000000 -FS1200000 -FP0($$Device:STM32F746ZGTx$CMSIS\Flash\STM32F7x_1024.FLM) -FP1($$Device:STM32F746ZGTx$CMSIS\Flash\STM32F7xTCM_1024.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Applications + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + CPU + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + rt-thread\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + rt-thread\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + rt-thread\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 2 + 5 + 2 + 0 + 0 + 0 + rt-thread\libcpu\arm\cortex-m7\context_rvds.S + context_rvds.S + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + rt-thread\libcpu\arm\cortex-m7\cpuport.c + cpuport.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + rt-thread\libcpu\arm\cortex-m7\cpu_cache.c + cpu_cache.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 3 + 8 + 1 + 0 + 0 + 0 + rt-thread\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + rt-thread\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + rt-thread\components\drivers\spi\spi_core.c + spi_core.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + rt-thread\components\drivers\spi\spi_dev.c + spi_dev.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + rt-thread\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + rt-thread\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + rt-thread\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + rt-thread\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + rt-thread\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + rt-thread\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + rt-thread\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 4 + 19 + 2 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\arm\startup_stm32f746xx.s + startup_stm32f746xx.s + 0 + 0 + + + 4 + 20 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32f7xx_hal_msp.c + stm32f7xx_hal_msp.c + 0 + 0 + + + 4 + 21 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 4 + 22 + 1 + 0 + 0 + 0 + libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 4 + 23 + 1 + 0 + 0 + 0 + libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 0 + 0 + libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + libraries\HAL_Drivers\drv_spi.c + drv_spi.c + 0 + 0 + + + + + Filesystem + 0 + 0 + 0 + 0 + + 5 + 26 + 1 + 0 + 0 + 0 + rt-thread\components\dfs\src\dfs_posix.c + dfs_posix.c + 0 + 0 + + + 5 + 27 + 1 + 0 + 0 + 0 + rt-thread\components\dfs\src\dfs_file.c + dfs_file.c + 0 + 0 + + + 5 + 28 + 1 + 0 + 0 + 0 + rt-thread\components\dfs\src\select.c + select.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + rt-thread\components\dfs\src\dfs.c + dfs.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + rt-thread\components\dfs\src\poll.c + poll.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + rt-thread\components\dfs\src\dfs_fs.c + dfs_fs.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 0 + 0 + rt-thread\components\dfs\filesystems\devfs\devfs.c + devfs.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 6 + 33 + 1 + 0 + 0 + 0 + rt-thread\components\finsh\finsh_node.c + finsh_node.c + 0 + 0 + + + 6 + 34 + 1 + 0 + 0 + 0 + rt-thread\components\finsh\finsh_parser.c + finsh_parser.c + 0 + 0 + + + 6 + 35 + 1 + 0 + 0 + 0 + rt-thread\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 6 + 36 + 1 + 0 + 0 + 0 + rt-thread\components\finsh\finsh_vm.c + finsh_vm.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + rt-thread\components\finsh\msh_file.c + msh_file.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + rt-thread\components\finsh\shell.c + shell.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + rt-thread\components\finsh\msh.c + msh.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + rt-thread\components\finsh\finsh_var.c + finsh_var.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 0 + 0 + rt-thread\components\finsh\finsh_compiler.c + finsh_compiler.c + 0 + 0 + + + 6 + 42 + 1 + 0 + 0 + 0 + rt-thread\components\finsh\finsh_heap.c + finsh_heap.c + 0 + 0 + + + 6 + 43 + 1 + 0 + 0 + 0 + rt-thread\components\finsh\finsh_ops.c + finsh_ops.c + 0 + 0 + + + 6 + 44 + 1 + 0 + 0 + 0 + rt-thread\components\finsh\finsh_error.c + finsh_error.c + 0 + 0 + + + 6 + 45 + 1 + 0 + 0 + 0 + rt-thread\components\finsh\finsh_token.c + finsh_token.c + 0 + 0 + + + 6 + 46 + 1 + 0 + 0 + 0 + rt-thread\components\finsh\finsh_init.c + finsh_init.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 7 + 47 + 1 + 0 + 0 + 0 + rt-thread\src\object.c + object.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + rt-thread\src\idle.c + idle.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + rt-thread\src\device.c + device.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + rt-thread\src\components.c + components.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + rt-thread\src\thread.c + thread.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + rt-thread\src\timer.c + timer.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + rt-thread\src\scheduler.c + scheduler.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + rt-thread\src\mem.c + mem.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + rt-thread\src\irq.c + irq.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + rt-thread\src\kservice.c + kservice.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 0 + 0 + rt-thread\src\ipc.c + ipc.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 0 + 0 + rt-thread\src\mempool.c + mempool.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 0 + 0 + rt-thread\src\clock.c + clock.c + 0 + 0 + + + + + libc + 0 + 0 + 0 + 0 + + 8 + 60 + 1 + 0 + 0 + 0 + rt-thread\components\libc\compilers\armlibc\stdio.c + stdio.c + 0 + 0 + + + 8 + 61 + 1 + 0 + 0 + 0 + rt-thread\components\libc\compilers\armlibc\libc.c + libc.c + 0 + 0 + + + 8 + 62 + 1 + 0 + 0 + 0 + rt-thread\components\libc\compilers\armlibc\syscalls.c + syscalls.c + 0 + 0 + + + 8 + 63 + 1 + 0 + 0 + 0 + rt-thread\components\libc\compilers\armlibc\mem_std.c + mem_std.c + 0 + 0 + + + 8 + 64 + 1 + 0 + 0 + 0 + rt-thread\components\libc\compilers\common\stdlib.c + stdlib.c + 0 + 0 + + + 8 + 65 + 1 + 0 + 0 + 0 + rt-thread\components\libc\compilers\common\time.c + time.c + 0 + 0 + + + 8 + 66 + 1 + 0 + 0 + 0 + rt-thread\components\libc\compilers\common\unistd.c + unistd.c + 0 + 0 + + + + + Libraries + 0 + 0 + 0 + 0 + + 9 + 67 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + stm32f7xx_hal.c + 0 + 0 + + + 9 + 68 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart_ex.c + stm32f7xx_hal_uart_ex.c + 0 + 0 + + + 9 + 69 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + stm32f7xx_hal_pwr.c + 0 + 0 + + + 9 + 70 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + stm32f7xx_hal_sram.c + 0 + 0 + + + 9 + 71 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + stm32f7xx_hal_rcc_ex.c + 0 + 0 + + + 9 + 72 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + stm32f7xx_hal_crc.c + 0 + 0 + + + 9 + 73 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spi_ex.c + stm32f7xx_hal_spi_ex.c + 0 + 0 + + + 9 + 74 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + stm32f7xx_hal_usart.c + 0 + 0 + + + 9 + 75 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + stm32f7xx_hal_rcc.c + 0 + 0 + + + 9 + 76 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + stm32f7xx_hal_cec.c + 0 + 0 + + + 9 + 77 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + stm32f7xx_hal_cryp.c + 0 + 0 + + + 9 + 78 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + stm32f7xx_hal_gpio.c + 0 + 0 + + + 9 + 79 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c + stm32f7xx_hal_exti.c + 0 + 0 + + + 9 + 80 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + stm32f7xx_hal_cryp_ex.c + 0 + 0 + + + 9 + 81 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + stm32f7xx_hal_dma_ex.c + 0 + 0 + + + 9 + 82 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c + stm32f7xx_hal_qspi.c + 0 + 0 + + + 9 + 83 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + stm32f7xx_hal_cortex.c + 0 + 0 + + + 9 + 84 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + stm32f7xx_hal_dma.c + 0 + 0 + + + 9 + 85 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spi.c + stm32f7xx_hal_spi.c + 0 + 0 + + + 9 + 86 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + system_stm32f7xx.c + 0 + 0 + + + 9 + 87 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + stm32f7xx_hal_uart.c + 0 + 0 + + + 9 + 88 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + stm32f7xx_hal_pwr_ex.c + 0 + 0 + + + 9 + 89 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + stm32f7xx_hal_rng.c + 0 + 0 + + + 9 + 90 + 1 + 0 + 0 + 0 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c + stm32f7xx_hal_crc_ex.c + 0 + 0 + + + + diff --git a/bsp/stm32/stm32f746-st-nucleo/project.uvprojx b/bsp/stm32/stm32f746-st-nucleo/project.uvprojx new file mode 100644 index 0000000000..d28ac766fd --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/project.uvprojx @@ -0,0 +1,972 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + STM32F746ZGTx + STMicroelectronics + Keil.STM32F7xx_DFP.2.14.0 + http://www.keil.com/pack/ + IRAM(0x20010000,0x40000) IRAM2(0x20000000,0x10000) IROM(0x08000000,0x100000) IROM2(0x00200000,0x100000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20010000 -FC1000 -FN2 -FF0STM32F7x_1024 -FS08000000 -FL0100000 -FF1STM32F7xTCM_1024 -FS1200000 -FL1100000 -FP0($$Device:STM32F746ZGTx$CMSIS\Flash\STM32F7x_1024.FLM) -FP1($$Device:STM32F746ZGTx$CMSIS\Flash\STM32F7xTCM_1024.FLM)) + 0 + $$Device:STM32F746ZGTx$Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h + + + + + + + + + + $$Device:STM32F746ZGTx$CMSIS\SVD\STM32F746.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 1 + 1 + 8 + 0 + 0 + 0 + 0 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20010000 + 0x40000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x200000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20010000 + 0x40000 + + + 0 + 0x20000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + RT_USING_ARM_LIBC, USE_HAL_DRIVER, STM32F746xx, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND + + applications;.;rt-thread\libcpu\arm\common;rt-thread\libcpu\arm\cortex-m7;rt-thread\components\drivers\include;rt-thread\components\drivers\include;rt-thread\components\drivers\spi;rt-thread\components\drivers\include;rt-thread\components\drivers\include;board;board\CubeMX_Config\Inc;board\ports;libraries\HAL_Drivers;libraries\HAL_Drivers\config;rt-thread\components\dfs\include;rt-thread\components\dfs\filesystems\devfs;rt-thread\components\finsh;.;rt-thread\include;rt-thread\components\libc\compilers\armlibc;rt-thread\components\libc\compilers\common;libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Inc;libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Include;libraries\STM32F7xx_HAL\CMSIS\Include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + CPU + + + backtrace.c + 1 + rt-thread\libcpu\arm\common\backtrace.c + + + showmem.c + 1 + rt-thread\libcpu\arm\common\showmem.c + + + div0.c + 1 + rt-thread\libcpu\arm\common\div0.c + + + context_rvds.S + 2 + rt-thread\libcpu\arm\cortex-m7\context_rvds.S + + + cpuport.c + 1 + rt-thread\libcpu\arm\cortex-m7\cpuport.c + + + cpu_cache.c + 1 + rt-thread\libcpu\arm\cortex-m7\cpu_cache.c + + + + + DeviceDrivers + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 0 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + + + + + + + + + + + + pin.c + 1 + rt-thread\components\drivers\misc\pin.c + + + serial.c + 1 + rt-thread\components\drivers\serial\serial.c + + + spi_core.c + 1 + rt-thread\components\drivers\spi\spi_core.c + + + spi_dev.c + 1 + rt-thread\components\drivers\spi\spi_dev.c + + + ringbuffer.c + 1 + rt-thread\components\drivers\src\ringbuffer.c + + + completion.c + 1 + rt-thread\components\drivers\src\completion.c + + + workqueue.c + 1 + rt-thread\components\drivers\src\workqueue.c + + + dataqueue.c + 1 + rt-thread\components\drivers\src\dataqueue.c + + + ringblk_buf.c + 1 + rt-thread\components\drivers\src\ringblk_buf.c + + + pipe.c + 1 + rt-thread\components\drivers\src\pipe.c + + + waitqueue.c + 1 + rt-thread\components\drivers\src\waitqueue.c + + + + + Drivers + + + startup_stm32f746xx.s + 2 + libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\arm\startup_stm32f746xx.s + + + stm32f7xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f7xx_hal_msp.c + + + board.c + 1 + board\board.c + + + drv_gpio.c + 1 + libraries\HAL_Drivers\drv_gpio.c + + + drv_usart.c + 1 + libraries\HAL_Drivers\drv_usart.c + + + drv_common.c + 1 + libraries\HAL_Drivers\drv_common.c + + + drv_spi.c + 1 + libraries\HAL_Drivers\drv_spi.c + + + + + Filesystem + + + dfs_posix.c + 1 + rt-thread\components\dfs\src\dfs_posix.c + + + dfs_file.c + 1 + rt-thread\components\dfs\src\dfs_file.c + + + select.c + 1 + rt-thread\components\dfs\src\select.c + + + dfs.c + 1 + rt-thread\components\dfs\src\dfs.c + + + poll.c + 1 + rt-thread\components\dfs\src\poll.c + + + dfs_fs.c + 1 + rt-thread\components\dfs\src\dfs_fs.c + + + devfs.c + 1 + rt-thread\components\dfs\filesystems\devfs\devfs.c + + + + + finsh + + + finsh_node.c + 1 + rt-thread\components\finsh\finsh_node.c + + + finsh_parser.c + 1 + rt-thread\components\finsh\finsh_parser.c + + + cmd.c + 1 + rt-thread\components\finsh\cmd.c + + + finsh_vm.c + 1 + rt-thread\components\finsh\finsh_vm.c + + + msh_file.c + 1 + rt-thread\components\finsh\msh_file.c + + + shell.c + 1 + rt-thread\components\finsh\shell.c + + + msh.c + 1 + rt-thread\components\finsh\msh.c + + + finsh_var.c + 1 + rt-thread\components\finsh\finsh_var.c + + + finsh_compiler.c + 1 + rt-thread\components\finsh\finsh_compiler.c + + + finsh_heap.c + 1 + rt-thread\components\finsh\finsh_heap.c + + + finsh_ops.c + 1 + rt-thread\components\finsh\finsh_ops.c + + + finsh_error.c + 1 + rt-thread\components\finsh\finsh_error.c + + + finsh_token.c + 1 + rt-thread\components\finsh\finsh_token.c + + + finsh_init.c + 1 + rt-thread\components\finsh\finsh_init.c + + + + + Kernel + + + object.c + 1 + rt-thread\src\object.c + + + idle.c + 1 + rt-thread\src\idle.c + + + device.c + 1 + rt-thread\src\device.c + + + components.c + 1 + rt-thread\src\components.c + + + thread.c + 1 + rt-thread\src\thread.c + + + timer.c + 1 + rt-thread\src\timer.c + + + scheduler.c + 1 + rt-thread\src\scheduler.c + + + mem.c + 1 + rt-thread\src\mem.c + + + irq.c + 1 + rt-thread\src\irq.c + + + kservice.c + 1 + rt-thread\src\kservice.c + + + ipc.c + 1 + rt-thread\src\ipc.c + + + mempool.c + 1 + rt-thread\src\mempool.c + + + clock.c + 1 + rt-thread\src\clock.c + + + + + libc + + + stdio.c + 1 + rt-thread\components\libc\compilers\armlibc\stdio.c + + + libc.c + 1 + rt-thread\components\libc\compilers\armlibc\libc.c + + + syscalls.c + 1 + rt-thread\components\libc\compilers\armlibc\syscalls.c + + + mem_std.c + 1 + rt-thread\components\libc\compilers\armlibc\mem_std.c + + + stdlib.c + 1 + rt-thread\components\libc\compilers\common\stdlib.c + + + time.c + 1 + rt-thread\components\libc\compilers\common\time.c + + + unistd.c + 1 + rt-thread\components\libc\compilers\common\unistd.c + + + + + Libraries + + + stm32f7xx_hal.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + + + stm32f7xx_hal_uart_ex.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart_ex.c + + + stm32f7xx_hal_pwr.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + + + stm32f7xx_hal_sram.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + + + stm32f7xx_hal_rcc_ex.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + + + stm32f7xx_hal_crc.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + + + stm32f7xx_hal_spi_ex.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spi_ex.c + + + stm32f7xx_hal_usart.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + + + stm32f7xx_hal_rcc.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + + + stm32f7xx_hal_cec.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + + + stm32f7xx_hal_cryp.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + + + stm32f7xx_hal_gpio.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + + + stm32f7xx_hal_exti.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c + + + stm32f7xx_hal_cryp_ex.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + + + stm32f7xx_hal_dma_ex.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + + + stm32f7xx_hal_qspi.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c + + + stm32f7xx_hal_cortex.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + + + stm32f7xx_hal_dma.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + + + stm32f7xx_hal_spi.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spi.c + + + system_stm32f7xx.c + 1 + libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + + + stm32f7xx_hal_uart.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + + + stm32f7xx_hal_pwr_ex.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + + + stm32f7xx_hal_rng.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + + + stm32f7xx_hal_crc_ex.c + 1 + libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/bsp/stm32/stm32f746-st-nucleo/rtconfig.h b/bsp/stm32/stm32f746-st-nucleo/rtconfig.h new file mode 100644 index 0000000000..67ccd7cd22 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/rtconfig.h @@ -0,0 +1,282 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib) */ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 4 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 100 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 +#define RT_USING_TIMER_SOFT +#define RT_TIMER_THREAD_PRIO 4 +#define RT_TIMER_THREAD_STACK_SIZE 512 + +/* kservice optimization */ + +/* end of kservice optimization */ +#define RT_DEBUG +#define RT_DEBUG_COLOR + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE +/* end of Inter-Thread communication */ + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_HEAP +/* end of Memory Management */ + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 256 +#define RT_CONSOLE_DEVICE_NAME "uart3" +/* end of Kernel Device Object */ +#define RT_VER_NUM 0x40004 +/* end of RT-Thread Kernel */ +#define ARCH_ARM +#define RT_USING_CPU_FFS +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M7 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 + +/* C++ features */ + +/* end of C++ features */ + +/* Command shell */ + +#define RT_USING_FINSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_USING_DESCRIPTION +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_CMD_SIZE 80 +#define FINSH_USING_MSH +#define FINSH_USING_MSH_DEFAULT +#define FINSH_ARG_MAX 10 +/* end of Command shell */ + +/* Device virtual file system */ + +#define RT_USING_DFS +#define DFS_USING_WORKDIR +#define DFS_FILESYSTEMS_MAX 2 +#define DFS_FILESYSTEM_TYPES_MAX 2 +#define DFS_FD_MAX 16 +#define RT_USING_DFS_DEVFS +/* end of Device virtual file system */ + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_USING_DMA +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_PIN +#define RT_USING_RTC +#define RT_USING_SOFT_RTC +#define RT_USING_SPI + +/* Using USB */ + +/* end of Using USB */ +/* end of Device Drivers */ + +/* POSIX layer and C standard library */ + +#define RT_USING_LIBC +#define RT_USING_POSIX +#define RT_LIBC_DEFAULT_TIMEZONE 8 +/* end of POSIX layer and C standard library */ + +/* Network */ + +/* Socket abstraction layer */ + +/* end of Socket abstraction layer */ + +/* Network interface device */ + +#define NETDEV_USING_PING +/* end of Network interface device */ + +/* light weight TCP/IP stack */ + +#define RT_USING_LWIP +#define RT_USING_LWIP212 +#define RT_LWIP_MEM_ALIGNMENT 4 +#define RT_LWIP_IGMP +#define RT_LWIP_ICMP +#define RT_LWIP_DNS +#define RT_LWIP_DHCP +#define IP_SOF_BROADCAST 1 +#define IP_SOF_BROADCAST_RECV 1 + +/* Static IPv4 Address */ + +#define RT_LWIP_IPADDR "192.168.1.30" +#define RT_LWIP_GWADDR "192.168.1.1" +#define RT_LWIP_MSKADDR "255.255.255.0" +/* end of Static IPv4 Address */ +#define RT_LWIP_UDP +#define RT_LWIP_TCP +#define RT_LWIP_RAW +#define RT_MEMP_NUM_NETCONN 8 +#define RT_LWIP_PBUF_NUM 16 +#define RT_LWIP_RAW_PCB_NUM 4 +#define RT_LWIP_UDP_PCB_NUM 4 +#define RT_LWIP_TCP_PCB_NUM 4 +#define RT_LWIP_TCP_SEG_NUM 40 +#define RT_LWIP_TCP_SND_BUF 8196 +#define RT_LWIP_TCP_WND 8196 +#define RT_LWIP_TCPTHREAD_PRIORITY 10 +#define RT_LWIP_TCPTHREAD_MBOX_SIZE 8 +#define RT_LWIP_TCPTHREAD_STACKSIZE 1024 +#define RT_LWIP_ETHTHREAD_PRIORITY 12 +#define RT_LWIP_ETHTHREAD_STACKSIZE 1024 +#define RT_LWIP_ETHTHREAD_MBOX_SIZE 8 +#define LWIP_NETIF_STATUS_CALLBACK 1 +#define LWIP_NETIF_LINK_CALLBACK 1 +#define SO_REUSE 1 +#define LWIP_SO_RCVTIMEO 1 +#define LWIP_SO_SNDTIMEO 1 +#define LWIP_SO_RCVBUF 1 +#define LWIP_SO_LINGER 0 +#define LWIP_NETIF_LOOPBACK 0 +#define RT_LWIP_USING_PING +/* end of light weight TCP/IP stack */ + +/* AT commands */ + +/* end of AT commands */ +/* end of Network */ + +/* VBUS(Virtual Software BUS) */ + +/* end of VBUS(Virtual Software BUS) */ + +/* Utilities */ + +/* end of Utilities */ +/* end of RT-Thread Components */ + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + +/* end of Marvell WiFi */ + +/* Wiced WiFi */ + +/* end of Wiced WiFi */ +/* end of Wi-Fi */ + +/* IoT Cloud */ + +/* end of IoT Cloud */ +/* end of IoT - internet of things */ + +/* security packages */ + +/* end of security packages */ + +/* language packages */ + +/* end of language packages */ + +/* multimedia packages */ + +/* end of multimedia packages */ + +/* tools packages */ + +/* end of tools packages */ + +/* system packages */ + +/* acceleration: Assembly language or algorithmic acceleration packages */ + +/* end of acceleration: Assembly language or algorithmic acceleration packages */ + +/* Micrium: Micrium software products porting for RT-Thread */ + +/* end of Micrium: Micrium software products porting for RT-Thread */ +/* end of system packages */ + +/* peripheral libraries and drivers */ + +/* end of peripheral libraries and drivers */ + +/* AI packages */ + +/* end of AI packages */ + +/* miscellaneous packages */ + + +/* samples: kernel and components samples */ + +/* end of samples: kernel and components samples */ + +/* entertainment: terminal games and other interesting software packages */ + +/* end of entertainment: terminal games and other interesting software packages */ +/* end of miscellaneous packages */ +/* end of RT-Thread online packages */ +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F7 + +/* Hardware Drivers Config */ + +#define SOC_STM32F746ZG + +/* Onboard Peripheral Drivers */ + +#define BSP_USING_USB_TO_USART +/* end of Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART3 +/* end of On-chip Peripheral Drivers */ + +/* Board extended module Drivers */ + +/* end of Hardware Drivers Config */ + +#endif diff --git a/bsp/stm32/stm32f746-st-nucleo/rtconfig.py b/bsp/stm32/stm32f746-st-nucleo/rtconfig.py new file mode 100644 index 0000000000..7402431d44 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/rtconfig.py @@ -0,0 +1,157 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m7' +CROSS_TOOL='gcc' + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'/usr/local/Cellar/arm-none-eabi-gcc/7-2017-q4-major/gcc/bin/' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iar' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + CXX = PREFIX + 'g++' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + STRIP = PREFIX + 'strip' + + DEVICE = ' -mcpu=' + CPU + ' -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -g -Wall' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2 -Os' + + CXXFLAGS = CFLAGS + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + + # module setting + CXXFLAGS = ' -Woverloaded-virtual -fno-exceptions -fno-rtti ' + M_CFLAGS = CFLAGS + ' -mlong-calls -fPIC ' + M_CXXFLAGS = CXXFLAGS + ' -mlong-calls -fPIC' + M_LFLAGS = DEVICE + CXXFLAGS + ' -Wl,--gc-sections,-z,max-page-size=0x4' +\ + ' -shared -fPIC -nostartfiles -static-libgcc' + M_POST_ACTION = STRIP + ' -R .hash $TARGET\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + CXX = 'armcc' + CXX = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M7.fp.sp --fpu=FPv4-SP' + CFLAGS = DEVICE + ' --apcs=interwork ' + AFLAGS = DEVICE + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rtthread.map --scatter rtthread.sct' + + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/INC' + LFLAGS += ' --libpath "' + EXEC_PATH + '/ARM/ARMCC/lib"' + + EXEC_PATH += '/arm/bin40/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2 -Otime' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = 'iccarm' + CXX = 'iccarm' + CXX = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --debug' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M7' + CFLAGS += ' -e' + CFLAGS += ' --fpu=None' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' -Ol' + CFLAGS += ' --use_c++_inline' + CFLAGS += ' --silent' + + AFLAGS = '' + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-M7' + AFLAGS += ' --fpu None' + AFLAGS += ' -S' + + LFLAGS = ' --config rtthread.icf' + LFLAGS += ' --redirect _Printf=_PrintfTiny' + LFLAGS += ' --redirect _Scanf=_ScanfSmall' + LFLAGS += ' --entry __iar_program_start' + LFLAGS += ' --silent' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = '' + +def dist_handle(BSP_ROOT, dist_dir): + import sys + cwd_path = os.getcwd() + sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools')) + from sdk_dist import dist_do_building + dist_do_building(BSP_ROOT, dist_dir) diff --git a/bsp/stm32/stm32f746-st-nucleo/rtconfig_preinc.h b/bsp/stm32/stm32f746-st-nucleo/rtconfig_preinc.h new file mode 100644 index 0000000000..5e99c383c0 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/rtconfig_preinc.h @@ -0,0 +1,14 @@ + +#ifndef RTCONFIG_PREINC_H__ +#define RTCONFIG_PREINC_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread pre-include file */ + +#define HAVE_CCONFIG_H +#define RT_USING_NEWLIB +#define STM32F746xx +#define USE_HAL_DRIVER +#define __RTTHREAD__ + +#endif /*RTCONFIG_PREINC_H__*/ diff --git a/bsp/stm32/stm32f746-st-nucleo/template.ewp b/bsp/stm32/stm32f746-st-nucleo/template.ewp new file mode 100644 index 0000000000..06c31aca44 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/template.ewp @@ -0,0 +1,2074 @@ + + + 3 + + rt-thread + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/stm32/stm32f746-st-nucleo/template.eww b/bsp/stm32/stm32f746-st-nucleo/template.eww new file mode 100644 index 0000000000..c62178f07a --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32f746-st-nucleo/template.uvoptx b/bsp/stm32/stm32f746-st-nucleo/template.uvoptx new file mode 100644 index 0000000000..a0e01e59f9 --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/template.uvoptx @@ -0,0 +1,192 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\keil\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD20010000 -FF0STM32F7x_1024 -FF1STM32F7xTCM_1024 -FL0100000 -FL1100000 -FS08000000 -FS1200000 -FP0($$Device:STM32F746ZGTx$CMSIS\Flash\STM32F7x_1024.FLM) -FP1($$Device:STM32F746ZGTx$CMSIS\Flash\STM32F7xTCM_1024.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD20010000 -FF0STM32F7x_1024 -FF1STM32F7xTCM_1024 -FL0100000 -FL1100000 -FS08000000 -FS1200000 -FP0($$Device:STM32F746ZGTx$CMSIS\Flash\STM32F7x_1024.FLM) -FP1($$Device:STM32F746ZGTx$CMSIS\Flash\STM32F7xTCM_1024.FLM) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
diff --git a/bsp/stm32/stm32f746-st-nucleo/template.uvprojx b/bsp/stm32/stm32f746-st-nucleo/template.uvprojx new file mode 100644 index 0000000000..6eca7bfbde --- /dev/null +++ b/bsp/stm32/stm32f746-st-nucleo/template.uvprojx @@ -0,0 +1,411 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F746ZGTx + STMicroelectronics + Keil.STM32F7xx_DFP.2.14.0 + http://www.keil.com/pack/ + IRAM(0x20010000,0x40000) IRAM2(0x20000000,0x10000) IROM(0x08000000,0x100000) IROM2(0x00200000,0x100000) CPUTYPE("Cortex-M7") FPU3(SFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20010000 -FC1000 -FN2 -FF0STM32F7x_1024 -FS08000000 -FL0100000 -FF1STM32F7xTCM_1024 -FS1200000 -FL1100000 -FP0($$Device:STM32F746ZGTx$CMSIS\Flash\STM32F7x_1024.FLM) -FP1($$Device:STM32F746ZGTx$CMSIS\Flash\STM32F7xTCM_1024.FLM)) + 0 + $$Device:STM32F746ZGTx$Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h + + + + + + + + + + $$Device:STM32F746ZGTx$CMSIS\SVD\STM32F746.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\keil\List\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 1 + 1 + 8 + 0 + 0 + 0 + 0 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20010000 + 0x40000 + + + 1 + 0x8000000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x200000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20010000 + 0x40000 + + + 0 + 0x20000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Source Group 1 + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +