From 9b88b4c04c4ffc5a45dcbbaeb5660528e4d2da59 Mon Sep 17 00:00:00 2001 From: e31207077 <46383712+e31207077@users.noreply.github.com> Date: Wed, 16 Jan 2019 12:31:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20ST=20=E5=AE=98=E6=96=B9=20?= =?UTF-8?q?stm32f767-nucleo=20=E5=BC=80=E5=8F=91=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/stm32/stm32f767-st-nucleo/Kconfig | 21 + bsp/stm32/stm32f767-st-nucleo/README.md | 110 + bsp/stm32/stm32f767-st-nucleo/SConscript | 14 + bsp/stm32/stm32f767-st-nucleo/SConstruct | 47 + .../applications/SConscript | 12 + .../stm32f767-st-nucleo/applications/main.c | 35 + .../board/CubeMX_Config/CubeMX_Config.ioc | 324 ++ .../board/CubeMX_Config/Inc/main.h | 141 + .../CubeMX_Config/Inc/stm32f7xx_hal_conf.h | 458 +++ .../board/CubeMX_Config/Inc/stm32f7xx_it.h | 84 + .../board/CubeMX_Config/Src/main.c | 396 +++ .../CubeMX_Config/Src/stm32f7xx_hal_msp.c | 364 ++ .../board/CubeMX_Config/Src/stm32f7xx_it.c | 217 ++ .../CubeMX_Config/Src/system_stm32f7xx.c | 278 ++ bsp/stm32/stm32f767-st-nucleo/board/Kconfig | 46 + .../stm32f767-st-nucleo/board/SConscript | 26 + bsp/stm32/stm32f767-st-nucleo/board/board.c | 72 + bsp/stm32/stm32f767-st-nucleo/board/board.h | 41 + .../board/linker_scripts/link.icf | 28 + .../board/linker_scripts/link.lds | 144 + .../board/linker_scripts/link.sct | 15 + .../figures/en.high-perf_nucleo-144_mbed.jpg | Bin 0 -> 217664 bytes bsp/stm32/stm32f767-st-nucleo/project.ewd | 2966 +++++++++++++++++ bsp/stm32/stm32f767-st-nucleo/project.ewp | 2419 ++++++++++++++ bsp/stm32/stm32f767-st-nucleo/project.eww | 10 + bsp/stm32/stm32f767-st-nucleo/project.uvoptx | 1256 +++++++ bsp/stm32/stm32f767-st-nucleo/project.uvprojx | 851 +++++ bsp/stm32/stm32f767-st-nucleo/rtconfig.h | 186 ++ bsp/stm32/stm32f767-st-nucleo/rtconfig.py | 144 + bsp/stm32/stm32f767-st-nucleo/template.ewp | 2074 ++++++++++++ bsp/stm32/stm32f767-st-nucleo/template.eww | 10 + bsp/stm32/stm32f767-st-nucleo/template.uvoptx | 196 ++ .../stm32f767-st-nucleo/template.uvprojx | 394 +++ 33 files changed, 13379 insertions(+) create mode 100644 bsp/stm32/stm32f767-st-nucleo/Kconfig create mode 100644 bsp/stm32/stm32f767-st-nucleo/README.md create mode 100644 bsp/stm32/stm32f767-st-nucleo/SConscript create mode 100644 bsp/stm32/stm32f767-st-nucleo/SConstruct create mode 100644 bsp/stm32/stm32f767-st-nucleo/applications/SConscript create mode 100644 bsp/stm32/stm32f767-st-nucleo/applications/main.c create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/main.h create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_it.h create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/main.c create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_it.c create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/system_stm32f7xx.c create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/Kconfig create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/SConscript create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/board.c create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/board.h create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.icf create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.lds create mode 100644 bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.sct create mode 100644 bsp/stm32/stm32f767-st-nucleo/figures/en.high-perf_nucleo-144_mbed.jpg create mode 100644 bsp/stm32/stm32f767-st-nucleo/project.ewd create mode 100644 bsp/stm32/stm32f767-st-nucleo/project.ewp create mode 100644 bsp/stm32/stm32f767-st-nucleo/project.eww create mode 100644 bsp/stm32/stm32f767-st-nucleo/project.uvoptx create mode 100644 bsp/stm32/stm32f767-st-nucleo/project.uvprojx create mode 100644 bsp/stm32/stm32f767-st-nucleo/rtconfig.h create mode 100644 bsp/stm32/stm32f767-st-nucleo/rtconfig.py create mode 100644 bsp/stm32/stm32f767-st-nucleo/template.ewp create mode 100644 bsp/stm32/stm32f767-st-nucleo/template.eww create mode 100644 bsp/stm32/stm32f767-st-nucleo/template.uvoptx create mode 100644 bsp/stm32/stm32f767-st-nucleo/template.uvprojx diff --git a/bsp/stm32/stm32f767-st-nucleo/Kconfig b/bsp/stm32/stm32f767-st-nucleo/Kconfig new file mode 100644 index 0000000000..768b68bb13 --- /dev/null +++ b/bsp/stm32/stm32f767-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/stm32f767-st-nucleo/README.md b/bsp/stm32/stm32f767-st-nucleo/README.md new file mode 100644 index 0000000000..04ea43cdd3 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/README.md @@ -0,0 +1,110 @@ +# STM32F767 NUCLEO-F767ZI开发板 BSP 说明 +## 简介 + +本文档为 NUCLEO-F767ZI 开发板的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +NUCLEO-F767ZI 是st推出的一款基于 ARM Cortex-M7 内核的开发板,最高主频为 216Mhz,该开发板具有丰富的板载资源,可以充分发挥 STM32F767 的芯片性能。 + +开发板外观如下图所示: + +![board](figures/en.high-perf_nucleo-144_mbed.jpg) + +该开发板常用 **板载资源** 如下: + +- MCU:STM32f767,主频 216MHz,2MB FLASH ,512KB RAM ,16K CACHE + +- 常用外设 + - LED :3个,LED1 (绿色,PB0),LED2(蓝色,PB7),LED3(红色,PB14) + - 按键:2个,B1(用户按键,PC13),B2(复位引脚) +- 常用接口:USB 转串口3、以太网接口 +- 调试接口:ST-LINK + +开发板更多详细信息请参考ST [NUCLEO-F767ZI开发板介绍](https://www.st.com/en/evaluation-tools/nucleo-f767zi.html)。 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :-----------------| :----------: | :-------------------------------------| +| USB 转串口3 | 支持 | | +| 以太网 | 暂不支持 | 即将支持 | +| **片上外设** | **支持情况** | **备注** | +| 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 2019 + 2006 - 2018 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)。 + +## 注意事项 + +暂无 + +## 联系人信息 + +维护人: + +- [e31207077](https://github.com/e31207077), 邮箱: \ No newline at end of file diff --git a/bsp/stm32/stm32f767-st-nucleo/SConscript b/bsp/stm32/stm32f767-st-nucleo/SConscript new file mode 100644 index 0000000000..a425264923 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/SConscript @@ -0,0 +1,14 @@ +# for module compiling +import os +Import('RTT_ROOT') + +cwd = str(Dir('#')) +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/stm32f767-st-nucleo/SConstruct b/bsp/stm32/stm32f767-st-nucleo/SConstruct new file mode 100644 index 0000000000..c84dbe3bdd --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/SConstruct @@ -0,0 +1,47 @@ +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 + +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + 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 = ['$LINK $SOURCES $LINKFLAGS -o $TARGET --map rt-thread.map']) + +Export('RTT_ROOT') +Export('rtconfig') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +SDK_ROOT = os.path.abspath('./') + +# include drivers +objs.extend(SConscript(os.path.dirname(SDK_ROOT) + '/libraries/STM32F7xx_HAL/SConscript')) + +# include libraries +objs.extend(SConscript(os.path.dirname(SDK_ROOT) + '/libraries/HAL_Drivers/SConscript')) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/stm32/stm32f767-st-nucleo/applications/SConscript b/bsp/stm32/stm32f767-st-nucleo/applications/SConscript new file mode 100644 index 0000000000..25102afc7e --- /dev/null +++ b/bsp/stm32/stm32f767-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/stm32f767-st-nucleo/applications/main.c b/bsp/stm32/stm32f767-st-nucleo/applications/main.c new file mode 100644 index 0000000000..b627e5440c --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/applications/main.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift change to new framework + * 2019-1-10 e31207077 change to new framework + */ + +#include +#include +#include +#include "drv_gpio.h" + +/* 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/stm32f767-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc new file mode 100644 index 0000000000..1283dfa88f --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/CubeMX_Config.ioc @@ -0,0 +1,324 @@ +#MicroXplorer Configuration settings - do not modify +ETH.IPParameters=MediaInterface,PHY_Name,PHY_Value,PhyAddress +ETH.MediaInterface=ETH_MEDIA_INTERFACE_RMII +ETH.PHY_Name=LAN8742A_PHY_ADDRESS +ETH.PHY_Value=0 +ETH.PhyAddress=0 +File.Version=6 +KeepUserPlacement=true +Mcu.Family=STM32F7 +Mcu.IP0=CORTEX_M7 +Mcu.IP1=ETH +Mcu.IP2=NVIC +Mcu.IP3=RCC +Mcu.IP4=SYS +Mcu.IP5=USART3 +Mcu.IP6=USB_OTG_FS +Mcu.IPNb=7 +Mcu.Name=STM32F767ZITx +Mcu.Package=LQFP144 +Mcu.Pin0=PC13 +Mcu.Pin1=PC14/OSC32_IN +Mcu.Pin10=PC5 +Mcu.Pin11=PB13 +Mcu.Pin12=PB14 +Mcu.Pin13=PD8 +Mcu.Pin14=PD9 +Mcu.Pin15=PG6 +Mcu.Pin16=PG7 +Mcu.Pin17=PA8 +Mcu.Pin18=PA9 +Mcu.Pin19=PA10 +Mcu.Pin2=PC15/OSC32_OUT +Mcu.Pin20=PA11 +Mcu.Pin21=PA12 +Mcu.Pin22=PA13 +Mcu.Pin23=PA14 +Mcu.Pin24=PG11 +Mcu.Pin25=PG13 +Mcu.Pin26=PB3 +Mcu.Pin27=PB7 +Mcu.Pin28=VP_SYS_VS_Systick +Mcu.Pin3=PH0/OSC_IN +Mcu.Pin4=PH1/OSC_OUT +Mcu.Pin5=PC1 +Mcu.Pin6=PA1 +Mcu.Pin7=PA2 +Mcu.Pin8=PA7 +Mcu.Pin9=PC4 +Mcu.PinsNb=29 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F767ZITx +MxCube.Version=5.0.1 +MxDb.Version=DB.5.0.1 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:true +PA1.GPIOParameters=GPIO_Label +PA1.GPIO_Label=RMII_REF_CLK [LAN8742A-CZ-TR_REFCLK0] +PA1.Locked=true +PA1.Mode=RMII +PA1.Signal=ETH_REF_CLK +PA10.GPIOParameters=GPIO_Label +PA10.GPIO_Label=USB_ID +PA10.Locked=true +PA10.Signal=USB_OTG_FS_ID +PA11.GPIOParameters=GPIO_Label +PA11.GPIO_Label=USB_DM +PA11.Locked=true +PA11.Mode=Device_Only +PA11.Signal=USB_OTG_FS_DM +PA12.GPIOParameters=GPIO_Label +PA12.GPIO_Label=USB_DP +PA12.Locked=true +PA12.Mode=Device_Only +PA12.Signal=USB_OTG_FS_DP +PA13.GPIOParameters=GPIO_Label +PA13.GPIO_Label=TMS +PA13.Locked=true +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.GPIOParameters=GPIO_Label +PA14.GPIO_Label=TCK +PA14.Locked=true +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PA2.GPIOParameters=GPIO_Label +PA2.GPIO_Label=RMII_MDIO [LAN8742A-CZ-TR_MDIO] +PA2.Locked=true +PA2.Mode=RMII +PA2.Signal=ETH_MDIO +PA7.GPIOParameters=GPIO_Label +PA7.GPIO_Label=RMII_CRS_DV [LAN8742A-CZ-TR_CRS_DV] +PA7.Locked=true +PA7.Mode=RMII +PA7.Signal=ETH_CRS_DV +PA8.GPIOParameters=GPIO_Label +PA8.GPIO_Label=USB_SOF [TP1] +PA8.Locked=true +PA8.Mode=Activate_SOF_FS +PA8.Signal=USB_OTG_FS_SOF +PA9.GPIOParameters=GPIO_Label +PA9.GPIO_Label=USB_VBUS +PA9.Locked=true +PA9.Mode=Activate_VBUS +PA9.Signal=USB_OTG_FS_VBUS +PB13.GPIOParameters=GPIO_Label +PB13.GPIO_Label=RMII_TXD1 [LAN8742A-CZ-TR_TXD1] +PB13.Locked=true +PB13.Mode=RMII +PB13.Signal=ETH_TXD1 +PB14.GPIOParameters=GPIO_Label +PB14.GPIO_Label=LD3 [Red] +PB14.Locked=true +PB14.Signal=GPIO_Output +PB3.GPIOParameters=GPIO_Label +PB3.GPIO_Label=SWO +PB3.Locked=true +PB3.Signal=SYS_JTDO-SWO +PB7.GPIOParameters=GPIO_Label +PB7.GPIO_Label=LD2 [Blue] +PB7.Locked=true +PB7.Signal=GPIO_Output +PC1.GPIOParameters=GPIO_Label +PC1.GPIO_Label=RMII_MDC [LAN8742A-CZ-TR_MDC] +PC1.Locked=true +PC1.Mode=RMII +PC1.Signal=ETH_MDC +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 +PC4.GPIOParameters=GPIO_Label +PC4.GPIO_Label=RMII_RXD0 [LAN8742A-CZ-TR_RXD0] +PC4.Locked=true +PC4.Mode=RMII +PC4.Signal=ETH_RXD0 +PC5.GPIOParameters=GPIO_Label +PC5.GPIO_Label=RMII_RXD1 [LAN8742A-CZ-TR_RXD1] +PC5.Locked=true +PC5.Mode=RMII +PC5.Signal=ETH_RXD1 +PCC.Checker=false +PCC.Line=STM32F7x7 +PCC.MCU=STM32F767ZITx +PCC.PartNumber=STM32F767ZITx +PCC.Seq0=0 +PCC.Series=STM32F7 +PCC.Temperature=25 +PCC.Vdd=3.6 +PD8.GPIOParameters=GPIO_Label +PD8.GPIO_Label=STLK_RX [STM32F103CBT6_PA3] +PD8.Locked=true +PD8.Mode=Asynchronous +PD8.Signal=USART3_TX +PD9.GPIOParameters=GPIO_Label +PD9.GPIO_Label=STLK_TX [STM32F103CBT6_PA2] +PD9.Locked=true +PD9.Mode=Asynchronous +PD9.Signal=USART3_RX +PG11.GPIOParameters=GPIO_Label +PG11.GPIO_Label=RMII_TX_EN [LAN8742A-CZ-TR_TXEN] +PG11.Locked=true +PG11.Mode=RMII +PG11.Signal=ETH_TX_EN +PG13.GPIOParameters=GPIO_Label +PG13.GPIO_Label=RMII_TXD0 [LAN8742A-CZ-TR_TXD0] +PG13.Locked=true +PG13.Mode=RMII +PG13.Signal=ETH_TXD0 +PG6.GPIOParameters=GPIO_Label +PG6.GPIO_Label=USB_PowerSwitchOn [STMPS2151STR_EN] +PG6.Locked=true +PG6.Signal=GPIO_Output +PG7.GPIOParameters=GPIO_Label +PG7.GPIO_Label=USB_OverCurrent [STMPS2151STR_FAULT] +PG7.Locked=true +PG7.Signal=GPIO_Input +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=STM32F767ZITx +ProjectManager.FirmwarePackage=STM32Cube FW_F7 V1.14.0 +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.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_CORTEX_M7_Init-CORTEX_M7-false-HAL-true,4-MX_ETH_Init-ETH-false-HAL-true,5-MX_USART3_UART_Init-USART3-false-HAL-true,6-MX_USB_OTG_FS_PCD_Init-USB_OTG_FS-false-HAL-true +RCC.48MHZClocksFreq_Value=24000000 +RCC.ADC12outputFreq_Value=72000000 +RCC.ADC34outputFreq_Value=72000000 +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.DFSDMAudioFreq_Value=96000000 +RCC.DFSDMFreq_Value=108000000 +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.I2SClocksFreq_Value=48000000 +RCC.I2SFreq_Value=96000000 +RCC.IPParameters=48MHZClocksFreq_Value,ADC12outputFreq_Value,ADC34outputFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CECFreq_Value,CortexFreq_Value,DFSDMAudioFreq_Value,DFSDMFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2C4Freq_Value,I2SClocksFreq_Value,I2SFreq_Value,LCDTFTFreq_Value,LCDTFToutputFreq_Value,LPTIM1Freq_Value,LSI_VALUE,MCO1PinFreq_Value,MCO2PinFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLI2SPCLKFreq_Value,PLLI2SQCLKFreq_Value,PLLI2SRCLKFreq_Value,PLLI2SRoutputFreq_Value,PLLM,PLLMCOFreq_Value,PLLMUL,PLLN,PLLQ,PLLQCLKFreq_Value,PLLQoutputFreq_Value,PLLRFreq_Value,PLLSAIPCLKFreq_Value,PLLSAIQCLKFreq_Value,PLLSAIRCLKFreq_Value,PLLSAIoutputFreq_Value,PRESCALERUSB,RNGFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SAI1Freq_Value,SAI2Freq_Value,SDMMC2Freq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,SYSCLKSourceVirtual,TIM15Freq_Value,TIM16Freq_Value,TIM17Freq_Value,TIM1Freq_Value,TIM20Freq_Value,TIM2Freq_Value,TIM3Freq_Value,TIM8Freq_Value,UART4Freq_Value,UART5Freq_Value,UART7Freq_Value,UART8Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USART6Freq_Value,USBFreq_Value,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutput2Freq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VcooutputI2S,WatchDogFreq_Value +RCC.LCDTFTFreq_Value=48000000 +RCC.LCDTFToutputFreq_Value=96000000 +RCC.LPTIM1Freq_Value=54000000 +RCC.LSI_VALUE=32000 +RCC.MCO1PinFreq_Value=16000000 +RCC.MCO2PinFreq_Value=216000000 +RCC.MCOFreq_Value=72000000 +RCC.PLLCLKFreq_Value=216000000 +RCC.PLLI2SPCLKFreq_Value=96000000 +RCC.PLLI2SQCLKFreq_Value=96000000 +RCC.PLLI2SRCLKFreq_Value=96000000 +RCC.PLLI2SRoutputFreq_Value=96000000 +RCC.PLLM=8 +RCC.PLLMCOFreq_Value=72000000 +RCC.PLLMUL=RCC_PLL_MUL9 +RCC.PLLN=432 +RCC.PLLQ=9 +RCC.PLLQCLKFreq_Value=48000000 +RCC.PLLQoutputFreq_Value=48000000 +RCC.PLLRFreq_Value=216000000 +RCC.PLLSAIPCLKFreq_Value=96000000 +RCC.PLLSAIQCLKFreq_Value=96000000 +RCC.PLLSAIRCLKFreq_Value=96000000 +RCC.PLLSAIoutputFreq_Value=96000000 +RCC.PRESCALERUSB=RCC_USBCLKSOURCE_PLL_DIV1_5 +RCC.RNGFreq_Value=48000000 +RCC.RTCFreq_Value=32000 +RCC.RTCHSEDivFreq_Value=4000000 +RCC.SAI1Freq_Value=96000000 +RCC.SAI2Freq_Value=96000000 +RCC.SDMMC2Freq_Value=216000000 +RCC.SDMMCFreq_Value=216000000 +RCC.SPDIFRXFreq_Value=96000000 +RCC.SYSCLKFreq_VALUE=216000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.SYSCLKSourceVirtual=RCC_SYSCLKSOURCE_PLLCLK +RCC.TIM15Freq_Value=72000000 +RCC.TIM16Freq_Value=72000000 +RCC.TIM17Freq_Value=72000000 +RCC.TIM1Freq_Value=72000000 +RCC.TIM20Freq_Value=72000000 +RCC.TIM2Freq_Value=72000000 +RCC.TIM3Freq_Value=72000000 +RCC.TIM8Freq_Value=72000000 +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=48000000 +RCC.VCOI2SOutputFreq_Value=192000000 +RCC.VCOInputFreq_Value=1000000 +RCC.VCOOutput2Freq_Value=8000000 +RCC.VCOOutputFreq_Value=432000000 +RCC.VCOSAIOutputFreq_Value=192000000 +RCC.VcooutputI2S=48000000 +RCC.WatchDogFreq_Value=32000 +SH.GPXTI13.0=GPIO_EXTI13 +SH.GPXTI13.ConfNb=1 +USART3.IPParameters=VirtualMode-Asynchronous +USART3.VirtualMode-Asynchronous=VM_ASYNC +USB_OTG_FS.IPParameters=VirtualMode +USB_OTG_FS.VirtualMode=Device_Only +VP_SYS_VS_Systick.Mode=SysTick +VP_SYS_VS_Systick.Signal=SYS_VS_Systick +board=NUCLEO-F767ZI +boardIOC=true diff --git a/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/main.h new file mode 100644 index 0000000000..1165a7bf80 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/main.h @@ -0,0 +1,141 @@ +/* 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 +#define RMII_MDC_Pin GPIO_PIN_1 +#define RMII_MDC_GPIO_Port GPIOC +#define RMII_REF_CLK_Pin GPIO_PIN_1 +#define RMII_REF_CLK_GPIO_Port GPIOA +#define RMII_MDIO_Pin GPIO_PIN_2 +#define RMII_MDIO_GPIO_Port GPIOA +#define RMII_CRS_DV_Pin GPIO_PIN_7 +#define RMII_CRS_DV_GPIO_Port GPIOA +#define RMII_RXD0_Pin GPIO_PIN_4 +#define RMII_RXD0_GPIO_Port GPIOC +#define RMII_RXD1_Pin GPIO_PIN_5 +#define RMII_RXD1_GPIO_Port GPIOC +#define RMII_TXD1_Pin GPIO_PIN_13 +#define RMII_TXD1_GPIO_Port GPIOB +#define LD3_Pin GPIO_PIN_14 +#define LD3_GPIO_Port GPIOB +#define STLK_RX_Pin GPIO_PIN_8 +#define STLK_RX_GPIO_Port GPIOD +#define STLK_TX_Pin GPIO_PIN_9 +#define STLK_TX_GPIO_Port GPIOD +#define USB_PowerSwitchOn_Pin GPIO_PIN_6 +#define USB_PowerSwitchOn_GPIO_Port GPIOG +#define USB_OverCurrent_Pin GPIO_PIN_7 +#define USB_OverCurrent_GPIO_Port GPIOG +#define USB_SOF_Pin GPIO_PIN_8 +#define USB_SOF_GPIO_Port GPIOA +#define USB_VBUS_Pin GPIO_PIN_9 +#define USB_VBUS_GPIO_Port GPIOA +#define USB_ID_Pin GPIO_PIN_10 +#define USB_ID_GPIO_Port GPIOA +#define USB_DM_Pin GPIO_PIN_11 +#define USB_DM_GPIO_Port GPIOA +#define USB_DP_Pin GPIO_PIN_12 +#define USB_DP_GPIO_Port GPIOA +#define TMS_Pin GPIO_PIN_13 +#define TMS_GPIO_Port GPIOA +#define TCK_Pin GPIO_PIN_14 +#define TCK_GPIO_Port GPIOA +#define RMII_TX_EN_Pin GPIO_PIN_11 +#define RMII_TX_EN_GPIO_Port GPIOG +#define RMII_TXD0_Pin GPIO_PIN_13 +#define RMII_TXD0_GPIO_Port GPIOG +#define SWO_Pin GPIO_PIN_3 +#define SWO_GPIO_Port GPIOB +#define LD2_Pin GPIO_PIN_7 +#define LD2_GPIO_Port GPIOB +/* 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/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h new file mode 100644 index 0000000000..378b819dd7 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_hal_conf.h @@ -0,0 +1,458 @@ +/** + ****************************************************************************** + * @file stm32f7xx_hal_conf.h + * @brief HAL configuration file. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2019 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. + * + ****************************************************************************** + */ + +/* 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_MMC_MODULE_ENABLED */ +/* #define HAL_EXTI_MODULE_ENABLED */ +#define HAL_GPIO_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 */ + +/* ########################## 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 0 +/* 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)0x10U) /*!< PHY status register Offset */ + +#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ +#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ + +#define PHY_ISFR ((uint16_t)0x000BU) /*!< 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/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_it.h b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Inc/stm32f7xx_it.h new file mode 100644 index 0000000000..4a24ec5be5 --- /dev/null +++ b/bsp/stm32/stm32f767-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/stm32f767-st-nucleo/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/main.c new file mode 100644 index 0000000000..a7c557876c --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/main.c @@ -0,0 +1,396 @@ +/* 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; + +UART_HandleTypeDef huart3; + +PCD_HandleTypeDef hpcd_USB_OTG_FS; + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +static void MX_GPIO_Init(void); +static void MX_ETH_Init(void); +static void MX_USART3_UART_Init(void); +static void MX_USB_OTG_FS_PCD_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_ETH_Init(); + MX_USART3_UART_Init(); + MX_USB_OTG_FS_PCD_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 CPU, AHB and APB busses clocks + */ + 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 = 8; + RCC_OscInitStruct.PLL.PLLN = 432; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 9; + 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 busses 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_CLK48; + PeriphClkInitStruct.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1; + PeriphClkInitStruct.Clk48ClockSelection = RCC_CLK48SOURCE_PLL; + 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 */ + + uint8_t MACAddr[6] ; + + /* 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; + MACAddr[0] = 0x00; + MACAddr[1] = 0x80; + MACAddr[2] = 0xE1; + MACAddr[3] = 0x00; + MACAddr[4] = 0x00; + MACAddr[5] = 0x00; + heth.Init.MACAddr = &MACAddr[0]; + 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 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 USB_OTG_FS Initialization Function + * @param None + * @retval None + */ +static void MX_USB_OTG_FS_PCD_Init(void) +{ + + /* USER CODE BEGIN USB_OTG_FS_Init 0 */ + + /* USER CODE END USB_OTG_FS_Init 0 */ + + /* USER CODE BEGIN USB_OTG_FS_Init 1 */ + + /* USER CODE END USB_OTG_FS_Init 1 */ + hpcd_USB_OTG_FS.Instance = USB_OTG_FS; + hpcd_USB_OTG_FS.Init.dev_endpoints = 6; + hpcd_USB_OTG_FS.Init.speed = PCD_SPEED_FULL; + hpcd_USB_OTG_FS.Init.dma_enable = DISABLE; + hpcd_USB_OTG_FS.Init.ep0_mps = DEP0CTL_MPS_64; + hpcd_USB_OTG_FS.Init.phy_itface = PCD_PHY_EMBEDDED; + hpcd_USB_OTG_FS.Init.Sof_enable = ENABLE; + hpcd_USB_OTG_FS.Init.low_power_enable = DISABLE; + hpcd_USB_OTG_FS.Init.lpm_enable = DISABLE; + hpcd_USB_OTG_FS.Init.vbus_sensing_enable = ENABLE; + hpcd_USB_OTG_FS.Init.use_dedicated_ep1 = DISABLE; + if (HAL_PCD_Init(&hpcd_USB_OTG_FS) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USB_OTG_FS_Init 2 */ + + /* USER CODE END USB_OTG_FS_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 Output Level */ + HAL_GPIO_WritePin(GPIOB, LD3_Pin|LD2_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(USB_PowerSwitchOn_GPIO_Port, USB_PowerSwitchOn_Pin, GPIO_PIN_RESET); + + /*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); + + /*Configure GPIO pins : LD3_Pin LD2_Pin */ + GPIO_InitStruct.Pin = LD3_Pin|LD2_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /*Configure GPIO pin : USB_PowerSwitchOn_Pin */ + GPIO_InitStruct.Pin = USB_PowerSwitchOn_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(USB_PowerSwitchOn_GPIO_Port, &GPIO_InitStruct); + + /*Configure GPIO pin : USB_OverCurrent_Pin */ + GPIO_InitStruct.Pin = USB_OverCurrent_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(USB_OverCurrent_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/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c new file mode 100644 index 0000000000..7786126b0a --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_hal_msp.c @@ -0,0 +1,364 @@ +/* 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 = RMII_MDC_Pin|RMII_RXD0_Pin|RMII_RXD1_Pin; + 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 = RMII_REF_CLK_Pin|RMII_MDIO_Pin|RMII_CRS_DV_Pin; + 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 = RMII_TXD1_Pin; + 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(RMII_TXD1_GPIO_Port, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = RMII_TX_EN_Pin|RMII_TXD0_Pin; + 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, RMII_MDC_Pin|RMII_RXD0_Pin|RMII_RXD1_Pin); + + HAL_GPIO_DeInit(GPIOA, RMII_REF_CLK_Pin|RMII_MDIO_Pin|RMII_CRS_DV_Pin); + + HAL_GPIO_DeInit(RMII_TXD1_GPIO_Port, RMII_TXD1_Pin); + + HAL_GPIO_DeInit(GPIOG, RMII_TX_EN_Pin|RMII_TXD0_Pin); + + /* USER CODE BEGIN ETH_MspDeInit 1 */ + + /* USER CODE END ETH_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==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 = STLK_RX_Pin|STLK_TX_Pin; + 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==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, STLK_RX_Pin|STLK_TX_Pin); + + /* USER CODE BEGIN USART3_MspDeInit 1 */ + + /* USER CODE END USART3_MspDeInit 1 */ + } + +} + +/** +* @brief PCD MSP Initialization +* This function configures the hardware resources used in this example +* @param hpcd: PCD handle pointer +* @retval None +*/ +void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd) +{ + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(hpcd->Instance==USB_OTG_FS) + { + /* USER CODE BEGIN USB_OTG_FS_MspInit 0 */ + + /* USER CODE END USB_OTG_FS_MspInit 0 */ + + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**USB_OTG_FS GPIO Configuration + PA8 ------> USB_OTG_FS_SOF + PA9 ------> USB_OTG_FS_VBUS + PA10 ------> USB_OTG_FS_ID + PA11 ------> USB_OTG_FS_DM + PA12 ------> USB_OTG_FS_DP + */ + GPIO_InitStruct.Pin = USB_SOF_Pin|USB_ID_Pin|USB_DM_Pin|USB_DP_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = USB_VBUS_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(USB_VBUS_GPIO_Port, &GPIO_InitStruct); + + /* Peripheral clock enable */ + __HAL_RCC_USB_OTG_FS_CLK_ENABLE(); + /* USER CODE BEGIN USB_OTG_FS_MspInit 1 */ + + /* USER CODE END USB_OTG_FS_MspInit 1 */ + } + +} + +/** +* @brief PCD MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param hpcd: PCD handle pointer +* @retval None +*/ + +void HAL_PCD_MspDeInit(PCD_HandleTypeDef* hpcd) +{ + + if(hpcd->Instance==USB_OTG_FS) + { + /* USER CODE BEGIN USB_OTG_FS_MspDeInit 0 */ + + /* USER CODE END USB_OTG_FS_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USB_OTG_FS_CLK_DISABLE(); + + /**USB_OTG_FS GPIO Configuration + PA8 ------> USB_OTG_FS_SOF + PA9 ------> USB_OTG_FS_VBUS + PA10 ------> USB_OTG_FS_ID + PA11 ------> USB_OTG_FS_DM + PA12 ------> USB_OTG_FS_DP + */ + HAL_GPIO_DeInit(GPIOA, USB_SOF_Pin|USB_VBUS_Pin|USB_ID_Pin|USB_DM_Pin + |USB_DP_Pin); + + /* USER CODE BEGIN USB_OTG_FS_MspDeInit 1 */ + + /* USER CODE END USB_OTG_FS_MspDeInit 1 */ + } + +} + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_it.c b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_it.c new file mode 100644 index 0000000000..ea6a0c5cbb --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/stm32f7xx_it.c @@ -0,0 +1,217 @@ +/* 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/stm32f767-st-nucleo/board/CubeMX_Config/Src/system_stm32f7xx.c b/bsp/stm32/stm32f767-st-nucleo/board/CubeMX_Config/Src/system_stm32f7xx.c new file mode 100644 index 0000000000..1a362bdf61 --- /dev/null +++ b/bsp/stm32/stm32f767-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/stm32f767-st-nucleo/board/Kconfig b/bsp/stm32/stm32f767-st-nucleo/board/Kconfig new file mode 100644 index 0000000000..cc3f71fb5d --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/Kconfig @@ -0,0 +1,46 @@ +menu "Hardware Drivers Config" + +config SOC_STM32F767ZI + bool + select SOC_SERIES_STM32F7 + default y + +menu "Onboard Peripheral Drivers" + + config BSP_USING_USB_TO_USART + bool "Enable USB TO USART (uart3)" + select BSP_USING_UART3 + default y + + +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 UART3" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART3 + bool "Enable UART3" + default y + + config BSP_UART3_RX_USING_DMA + bool "Enable UART3 RX DMA" + depends on BSP_USING_UART3 && RT_SERIAL_USING_DMA + default n + endif + +endmenu + +menu "Board extended module Drivers" + +endmenu + +endmenu diff --git a/bsp/stm32/stm32f767-st-nucleo/board/SConscript b/bsp/stm32/stm32f767-st-nucleo/board/SConscript new file mode 100644 index 0000000000..77deba2ad2 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/SConscript @@ -0,0 +1,26 @@ +import rtconfig +from building import * + +cwd = GetCurrentDir() + +# add the general drivers. +src = Glob('board.c') +src += Glob('CubeMX_Config/Src/stm32f7xx_hal_msp.c') + +path = [cwd] +path += [cwd + '/CubeMX_Config/Inc'] + +if rtconfig.CROSS_TOOL == 'gcc': + src += [cwd + '/../../libraries/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/gcc/startup_stm32f767xx.s'] +elif rtconfig.CROSS_TOOL == 'keil': + src += [cwd + '/../../libraries/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/arm/startup_stm32f767xx.s'] +elif rtconfig.CROSS_TOOL == 'iar': + src += [cwd + '/../../libraries/STM32F7xx_HAL/CMSIS/Device/ST/STM32F7xx/Source/Templates/iar/startup_stm32f767xx.s'] + +# STM32F756xx || STM32F746xx || STM32F745xx || STM32F767xx || +# STM32F769xx || STM32F777xx || STM32F779xx || STM32F722xx || +# STM32F723xx || STM32F732xx || STM32F733xx || STM32F730xx || STM32F750xx +# You can select chips from the list above +CPPDEFINES = ['STM32F767xx'] +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) +Return('group') diff --git a/bsp/stm32/stm32f767-st-nucleo/board/board.c b/bsp/stm32/stm32f767-st-nucleo/board/board.c new file mode 100644 index 0000000000..e5a5d7b32c --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/board.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift change to new framework + * 2019-1-10 e31207077 change to new framework + */ + +#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 CPU, AHB and APB busses clocks + */ + 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 = 8; + RCC_OscInitStruct.PLL.PLLN = 432; + RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; + RCC_OscInitStruct.PLL.PLLQ = 9; + 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 busses 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_CLK48; + PeriphClkInitStruct.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1; + PeriphClkInitStruct.Clk48ClockSelection = RCC_CLK48SOURCE_PLL; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } +} + diff --git a/bsp/stm32/stm32f767-st-nucleo/board/board.h b/bsp/stm32/stm32f767-st-nucleo/board/board.h new file mode 100644 index 0000000000..6ac957bc8d --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/board.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-5 SummerGift change to new framework + * 2019-1-10 e31207077 change to new framework + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include +#include "drv_common.h" + +#define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) +#define STM32_FLASH_SIZE (2048 * 1024) +#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) + +#define STM32_SRAM_SIZE (512) +#define STM32_SRAM_END (0x20000000 + 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/stm32f767-st-nucleo/board/linker_scripts/link.icf b/bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.icf new file mode 100644 index 0000000000..438cd8eab3 --- /dev/null +++ b/bsp/stm32/stm32f767-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/stm32f767-st-nucleo/board/linker_scripts/link.lds b/bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.lds new file mode 100644 index 0000000000..f3b6fd534b --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.lds @@ -0,0 +1,144 @@ +/* + * linker script for STM32F4xx with GNU ld + * bernard.xiong 2009-10-14 + */ + +/* Program Entry, set to mark it as "used" and avoid gc */ +MEMORY +{ + ROM (rx) : ORIGIN = 0x08000000, LENGTH = 2048k /* 2048KB flash */ + RAM (rw) : ORIGIN = 0x20000000, LENGTH = 512k /* 512K 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); + _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*) + + . = 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/stm32f767-st-nucleo/board/linker_scripts/link.sct b/bsp/stm32/stm32f767-st-nucleo/board/linker_scripts/link.sct new file mode 100644 index 0000000000..e4ae202302 --- /dev/null +++ b/bsp/stm32/stm32f767-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/stm32f767-st-nucleo/figures/en.high-perf_nucleo-144_mbed.jpg b/bsp/stm32/stm32f767-st-nucleo/figures/en.high-perf_nucleo-144_mbed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f2f9b3e72d5e8cbd625f226341e104865a812e0 GIT binary patch literal 217664 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
(to+0kvFLi46hU1cVxFh66?3}2)(*Ay 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

  • D;?oOR=^wxla~v^l#5dh)d)8G$JSHYR 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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/stm32f767-st-nucleo/project.ewp b/bsp/stm32/stm32f767-st-nucleo/project.ewp new file mode 100644 index 0000000000..14af8ab58f --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/project.ewp @@ -0,0 +1,2419 @@ + + 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 + + + + 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_stm32f767xx.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 + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\cpu.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 + + + + CORTEX-M7 + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\backtrace.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.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 + + + + 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 + + + + finsh + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\symbol.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh_cmd.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 + + + + libc + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\gmtime_r.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 + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\time.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_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_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_usart.c + + + diff --git a/bsp/stm32/stm32f767-st-nucleo/project.eww b/bsp/stm32/stm32f767-st-nucleo/project.eww new file mode 100644 index 0000000000..c2cb02eb1e --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/stm32/stm32f767-st-nucleo/project.uvoptx b/bsp/stm32/stm32f767-st-nucleo/project.uvoptx new file mode 100644 index 0000000000..78f59e4f8f --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/project.uvoptx @@ -0,0 +1,1256 @@ + + + + 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 + ST-LINKIII-KEIL_SWO + -U066FFF544852707267192022 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20020000 -FC1000 -FN2 -FF0STM32F7x_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7x_2048.FLM) -FF1STM32F7xTCM_2048.FLM -FS1200000 -FL1200000 -FP1($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7xTCM_2048.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD20020000 -FF0STM32F7x_2048 -FF1STM32F7xTCM_2048 -FL0200000 -FL1200000 -FS08000000 -FS1200000 -FP0($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7x_2048.FLM) -FP1($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7xTCM_2048.FLM) + + + 0 + JL2CM3 + -U59400616 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407ZGTx$CMSIS\Flash\STM32F4xx_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 + 2 + 10000000 + + + + + + Applications + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + board\CubeMX_Config\Src\stm32f7xx_hal_msp.c + stm32f7xx_hal_msp.c + 0 + 0 + + + 2 + 4 + 2 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\arm\startup_stm32f767xx.s + startup_stm32f767xx.s + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart.c + drv_usart.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\src\cpu.c + cpu.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\src\device.c + device.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler.c + scheduler.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\src\signal.c + signal.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + CORTEX-M7 + 0 + 0 + 0 + 0 + + 4 + 23 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\cpuport.c + cpuport.c + 0 + 0 + + + 4 + 24 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + context_rvds.S + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 4 + 27 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + + + Filesystem + 0 + 0 + 0 + 0 + + 5 + 28 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\dfs.c + dfs.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\dfs_file.c + dfs_file.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\dfs_fs.c + dfs_fs.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\dfs_posix.c + dfs_posix.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\poll.c + poll.c + 0 + 0 + + + 5 + 33 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\src\select.c + select.c + 0 + 0 + + + 5 + 34 + 1 + 0 + 0 + 0 + ..\..\..\components\dfs\filesystems\devfs\devfs.c + devfs.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\misc\pin.c + pin.c + 0 + 0 + + + 6 + 36 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\serial.c + serial.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\completion.c + completion.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\pipe.c + pipe.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 6 + 42 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 6 + 43 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c + 0 + 0 + + + + + finsh + 0 + 0 + 0 + 0 + + 7 + 44 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 7 + 45 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\symbol.c + symbol.c + 0 + 0 + + + 7 + 46 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 7 + 47 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_cmd.c + msh_cmd.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_file.c + msh_file.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_compiler.c + finsh_compiler.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_error.c + finsh_error.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_heap.c + finsh_heap.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_init.c + finsh_init.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_node.c + finsh_node.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_ops.c + finsh_ops.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_parser.c + finsh_parser.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_var.c + finsh_var.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_vm.c + finsh_vm.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\finsh_token.c + finsh_token.c + 0 + 0 + + + + + libc + 0 + 0 + 0 + 0 + + 8 + 60 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\libc.c + libc.c + 0 + 0 + + + 8 + 61 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\mem_std.c + mem_std.c + 0 + 0 + + + 8 + 62 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\stdio.c + stdio.c + 0 + 0 + + + 8 + 63 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\stubs.c + stubs.c + 0 + 0 + + + 8 + 64 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\time.c + time.c + 0 + 0 + + + 8 + 65 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\gmtime_r.c + gmtime_r.c + 0 + 0 + + + + + STM32_HAL + 0 + 0 + 0 + 0 + + 9 + 66 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + system_stm32f7xx.c + 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_cec.c + stm32f7xx_hal_cec.c + 0 + 0 + + + 9 + 69 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + stm32f7xx_hal_cortex.c + 0 + 0 + + + 9 + 70 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + stm32f7xx_hal_crc.c + 0 + 0 + + + 9 + 71 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + stm32f7xx_hal_cryp.c + 0 + 0 + + + 9 + 72 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + stm32f7xx_hal_cryp_ex.c + 0 + 0 + + + 9 + 73 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + stm32f7xx_hal_dma.c + 0 + 0 + + + 9 + 74 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + stm32f7xx_hal_dma_ex.c + 0 + 0 + + + 9 + 75 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + stm32f7xx_hal_pwr.c + 0 + 0 + + + 9 + 76 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + stm32f7xx_hal_pwr_ex.c + 0 + 0 + + + 9 + 77 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + stm32f7xx_hal_rcc.c + 0 + 0 + + + 9 + 78 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + stm32f7xx_hal_rcc_ex.c + 0 + 0 + + + 9 + 79 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + stm32f7xx_hal_rng.c + 0 + 0 + + + 9 + 80 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + stm32f7xx_hal_sram.c + 0 + 0 + + + 9 + 81 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + stm32f7xx_hal_gpio.c + 0 + 0 + + + 9 + 82 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + stm32f7xx_hal_uart.c + 0 + 0 + + + 9 + 83 + 1 + 0 + 0 + 0 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + stm32f7xx_hal_usart.c + 0 + 0 + + + +
    diff --git a/bsp/stm32/stm32f767-st-nucleo/project.uvprojx b/bsp/stm32/stm32f767-st-nucleo/project.uvprojx new file mode 100644 index 0000000000..8db03bc8a2 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/project.uvprojx @@ -0,0 +1,851 @@ + + + + 2.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F767ZITx + STMicroelectronics + Keil.STM32F7xx_DFP.2.11.0 + http://www.keil.com/pack + IRAM(0x20020000,0x60000) IRAM2(0x20000000,0x20000) IROM(0x08000000,0x200000) IROM2(0x00200000,0x200000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20020000 -FC1000 -FN2 -FF0STM32F7x_2048 -FS08000000 -FL0200000 -FF1STM32F7xTCM_2048 -FS1200000 -FL1200000 -FP0($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7x_2048.FLM) -FP1($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7xTCM_2048.FLM)) + 0 + $$Device:STM32F767ZITx$Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h + + + + + + + + + + $$Device:STM32F767ZITx$CMSIS\SVD\STM32F7x7_v1r2.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 1 + .\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 + 3 + 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 + 0x20020000 + 0x60000 + + + 1 + 0x8000000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x200000 + + + 1 + 0x200000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20020000 + 0x60000 + + + 0 + 0x20000000 + 0x20000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + STM32F767xx, USE_HAL_DRIVER, RT_USING_ARM_LIBC + + applications;.;board;board\CubeMX_Config\Inc;..\libraries\HAL_Drivers;..\libraries\HAL_Drivers\config;..\..\..\include;..\..\..\libcpu\arm\cortex-m7;..\..\..\libcpu\arm\common;..\..\..\components\dfs\include;..\..\..\components\dfs\filesystems\devfs;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\..\..\components\libc\compilers\armlibc;..\..\..\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 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + --keep *.o(.rti_fn.*) --keep *.o(FSymTab) --keep *.o(VSymTab) + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + + + Drivers + + + board.c + 1 + board\board.c + + + stm32f7xx_hal_msp.c + 1 + board\CubeMX_Config\Src\stm32f7xx_hal_msp.c + + + startup_stm32f767xx.s + 2 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\arm\startup_stm32f767xx.s + + + 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 + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + components.c + 1 + ..\..\..\src\components.c + + + cpu.c + 1 + ..\..\..\src\cpu.c + + + device.c + 1 + ..\..\..\src\device.c + + + idle.c + 1 + ..\..\..\src\idle.c + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + irq.c + 1 + ..\..\..\src\irq.c + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + mem.c + 1 + ..\..\..\src\mem.c + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + object.c + 1 + ..\..\..\src\object.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + signal.c + 1 + ..\..\..\src\signal.c + + + thread.c + 1 + ..\..\..\src\thread.c + + + timer.c + 1 + ..\..\..\src\timer.c + + + + + CORTEX-M7 + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m7\cpuport.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + + + backtrace.c + 1 + ..\..\..\libcpu\arm\common\backtrace.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + + + Filesystem + + + dfs.c + 1 + ..\..\..\components\dfs\src\dfs.c + + + dfs_file.c + 1 + ..\..\..\components\dfs\src\dfs_file.c + + + dfs_fs.c + 1 + ..\..\..\components\dfs\src\dfs_fs.c + + + dfs_posix.c + 1 + ..\..\..\components\dfs\src\dfs_posix.c + + + poll.c + 1 + ..\..\..\components\dfs\src\poll.c + + + select.c + 1 + ..\..\..\components\dfs\src\select.c + + + devfs.c + 1 + ..\..\..\components\dfs\filesystems\devfs\devfs.c + + + + + DeviceDrivers + + + pin.c + 1 + ..\..\..\components\drivers\misc\pin.c + + + serial.c + 1 + ..\..\..\components\drivers\serial\serial.c + + + completion.c + 1 + ..\..\..\components\drivers\src\completion.c + + + dataqueue.c + 1 + ..\..\..\components\drivers\src\dataqueue.c + + + pipe.c + 1 + ..\..\..\components\drivers\src\pipe.c + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\src\ringblk_buf.c + + + ringbuffer.c + 1 + ..\..\..\components\drivers\src\ringbuffer.c + + + waitqueue.c + 1 + ..\..\..\components\drivers\src\waitqueue.c + + + workqueue.c + 1 + ..\..\..\components\drivers\src\workqueue.c + + + + + finsh + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + symbol.c + 1 + ..\..\..\components\finsh\symbol.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + msh_cmd.c + 1 + ..\..\..\components\finsh\msh_cmd.c + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + finsh_compiler.c + 1 + ..\..\..\components\finsh\finsh_compiler.c + + + finsh_error.c + 1 + ..\..\..\components\finsh\finsh_error.c + + + finsh_heap.c + 1 + ..\..\..\components\finsh\finsh_heap.c + + + finsh_init.c + 1 + ..\..\..\components\finsh\finsh_init.c + + + finsh_node.c + 1 + ..\..\..\components\finsh\finsh_node.c + + + finsh_ops.c + 1 + ..\..\..\components\finsh\finsh_ops.c + + + finsh_parser.c + 1 + ..\..\..\components\finsh\finsh_parser.c + + + finsh_var.c + 1 + ..\..\..\components\finsh\finsh_var.c + + + finsh_vm.c + 1 + ..\..\..\components\finsh\finsh_vm.c + + + finsh_token.c + 1 + ..\..\..\components\finsh\finsh_token.c + + + + + libc + + + libc.c + 1 + ..\..\..\components\libc\compilers\armlibc\libc.c + + + mem_std.c + 1 + ..\..\..\components\libc\compilers\armlibc\mem_std.c + + + stdio.c + 1 + ..\..\..\components\libc\compilers\armlibc\stdio.c + + + stubs.c + 1 + ..\..\..\components\libc\compilers\armlibc\stubs.c + + + time.c + 1 + ..\..\..\components\libc\compilers\armlibc\time.c + + + gmtime_r.c + 1 + ..\..\..\components\libc\compilers\common\gmtime_r.c + + + + + STM32_HAL + + + system_stm32f7xx.c + 1 + ..\libraries\STM32F7xx_HAL\CMSIS\Device\ST\STM32F7xx\Source\Templates\system_stm32f7xx.c + + + stm32f7xx_hal.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c + + + stm32f7xx_hal_cec.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c + + + stm32f7xx_hal_cortex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c + + + stm32f7xx_hal_crc.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c + + + stm32f7xx_hal_cryp.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c + + + stm32f7xx_hal_cryp_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c + + + stm32f7xx_hal_dma.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c + + + stm32f7xx_hal_dma_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c + + + stm32f7xx_hal_pwr.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c + + + stm32f7xx_hal_pwr_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c + + + stm32f7xx_hal_rcc.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c + + + stm32f7xx_hal_rcc_ex.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c + + + stm32f7xx_hal_rng.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c + + + stm32f7xx_hal_sram.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c + + + stm32f7xx_hal_gpio.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c + + + stm32f7xx_hal_uart.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c + + + stm32f7xx_hal_usart.c + 1 + ..\libraries\STM32F7xx_HAL\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c + + + + + + + + + + + + + +
    diff --git a/bsp/stm32/stm32f767-st-nucleo/rtconfig.h b/bsp/stm32/stm32f767-st-nucleo/rtconfig.h new file mode 100644 index 0000000000..d560f27b6d --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/rtconfig.h @@ -0,0 +1,186 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* Automatically generated file; DO NOT EDIT. */ +/* RT-Thread Configuration */ + +/* 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_IDEL_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 +#define RT_DEBUG + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_HEAP + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart3" +#define RT_VER_NUM 0x40000 +#define ARCH_ARM +#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 */ + + +/* 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 + +/* 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 + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_PIPE_BUFSZ 512 +#define RT_USING_SERIAL +#define RT_SERIAL_USING_DMA +#define RT_USING_PIN + +/* Using WiFi */ + + +/* Using USB */ + + +/* POSIX layer and C standard library */ + +#define RT_USING_LIBC +#define RT_USING_POSIX + +/* Network */ + +/* Socket abstraction layer */ + + +/* light weight TCP/IP stack */ + + +/* Modbus master and slave stack */ + + +/* AT commands */ + + +/* VBUS(Virtual Software BUS) */ + + +/* Utilities */ + + +/* ARM CMSIS */ + + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + + +/* Wiced WiFi */ + + +/* IoT Cloud */ + + +/* security packages */ + + +/* language packages */ + + +/* multimedia packages */ + + +/* tools packages */ + + +/* system packages */ + + +/* peripheral libraries and drivers */ + + +/* miscellaneous packages */ + + +/* sample package */ + +/* samples: kernel and components samples */ + + +/* example package: hello */ + +#define SOC_FAMILY_STM32 +#define SOC_SERIES_STM32F7 + +/* Hardware Drivers Config */ + +#define SOC_STM32F767ZI + +/* Onboard Peripheral Drivers */ + +#define BSP_USING_USB_TO_USART + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART3 + +/* Board extended module Drivers */ + + +#endif diff --git a/bsp/stm32/stm32f767-st-nucleo/rtconfig.py b/bsp/stm32/stm32f767-st-nucleo/rtconfig.py new file mode 100644 index 0000000000..0f98bde4bd --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/rtconfig.py @@ -0,0 +1,144 @@ +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 = '/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 + ' -std=c99 -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' + + 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' + 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 + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iar': + # toolchains + CC = '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 = '' diff --git a/bsp/stm32/stm32f767-st-nucleo/template.ewp b/bsp/stm32/stm32f767-st-nucleo/template.ewp new file mode 100644 index 0000000000..30ef393336 --- /dev/null +++ b/bsp/stm32/stm32f767-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/stm32f767-st-nucleo/template.eww b/bsp/stm32/stm32f767-st-nucleo/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/stm32/stm32f767-st-nucleo/template.uvoptx b/bsp/stm32/stm32f767-st-nucleo/template.uvoptx new file mode 100644 index 0000000000..3a69aeeb1d --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/template.uvoptx @@ -0,0 +1,196 @@ + + + + 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 + ST-LINKIII-KEIL_SWO + -U066FFF544852707267192022 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(5BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20020000 -FC1000 -FN2 -FF0STM32F7x_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7x_2048.FLM) -FF1STM32F7xTCM_2048.FLM -FS1200000 -FL1200000 -FP1($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7xTCM_2048.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC1000 -FD20020000 -FF0STM32F7x_2048 -FF1STM32F7xTCM_2048 -FL0200000 -FL1200000 -FS08000000 -FS1200000 -FP0($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7x_2048.FLM) -FP1($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7xTCM_2048.FLM) + + + 0 + JL2CM3 + -U59400616 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407ZGTx$CMSIS\Flash\STM32F4xx_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 + 2 + 10000000 + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + +
    diff --git a/bsp/stm32/stm32f767-st-nucleo/template.uvprojx b/bsp/stm32/stm32f767-st-nucleo/template.uvprojx new file mode 100644 index 0000000000..d6426c3ad7 --- /dev/null +++ b/bsp/stm32/stm32f767-st-nucleo/template.uvprojx @@ -0,0 +1,394 @@ + + + + 2.1 + +
    ### uVision Project, (C) Keil Software
    + + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32F767ZITx + STMicroelectronics + Keil.STM32F7xx_DFP.2.11.0 + http://www.keil.com/pack + IRAM(0x20020000,0x60000) IRAM2(0x20000000,0x20000) IROM(0x08000000,0x200000) IROM2(0x00200000,0x200000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20020000 -FC1000 -FN2 -FF0STM32F7x_2048 -FS08000000 -FL0200000 -FF1STM32F7xTCM_2048 -FS1200000 -FL1200000 -FP0($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7x_2048.FLM) -FP1($$Device:STM32F767ZITx$CMSIS\Flash\STM32F7xTCM_2048.FLM)) + 0 + $$Device:STM32F767ZITx$Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h + + + + + + + + + + $$Device:STM32F767ZITx$CMSIS\SVD\STM32F7x7_v1r2.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\keil\Obj\ + rt-thread + 1 + 0 + 0 + 1 + 1 + .\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 + 3 + 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 + 0x20020000 + 0x60000 + + + 1 + 0x8000000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x200000 + + + 1 + 0x200000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20020000 + 0x60000 + + + 0 + 0x20000000 + 0x20000 + + + + + + 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 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Source Group 1 + + + + + + + + + + + +