Skip to content

Commit 08b10bc

Browse files
committed
init SDK
1 parent 3c78b7c commit 08b10bc

File tree

2,752 files changed

+1468429
-2
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,752 files changed

+1468429
-2
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
*.pyc
2+
*.o
3+
language.settings.xml

README.md

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,61 @@
1-
# sdk-bsp-stm32f407-spark
2-
sdk-bsp-stm32f407-spark
1+
## 简介
2+
3+
“星火一号”,一款专为工程师和高校学生设计的嵌入式 RTOS 开发学习板。在这个科技飞速发展的时代,嵌入式系统已经成为了现代工业、交通、通信等众多领域的核心驱动力。而 RTOS 实时操作系统作为嵌入式领域的基石,更是工程师们必须熟练掌握的核心技术。作为业界主流的 RTOS 实时操作系统 RT-Thread,我们有义务帮助更多开发者掌握这项技术。为此,我们精心打造了一款专为工程师和高校学生设计的嵌入式开发学习板。
4+
5+
星火一号主控选用了目前行业中比较常用且学习门槛较低的 STM32F407,性能强劲、功能丰富,完全能够满足嵌入式入门的需求。此开发板不仅具有众多的板载资源(Flash 存储、WIFI 通信、多个传感器),还支持丰富的扩展接口,让您轻松实现各种复杂的应用场景。通过使用这款开发学习板,您将能够深入了解 RTOS/RT-Thread 的工作原理,提升自己的技能水平,为当前以及未来的职业生涯做好充分准备。
6+
7+
![board-small](docs/images/board-small.jpg)
8+
9+
## 目录结构
10+
11+
```
12+
|-- README.md
13+
|-- docs
14+
| |-- SCH_LearnBoard_IoT_V0_0.pdf
15+
| `-- images
16+
|-- libraries
17+
| |-- Board_Drivers
18+
| |-- HAL_Drivers
19+
| `-- STM32F4xx_HAL
20+
|-- projects
21+
| |-- 01_basic_led_blink
22+
| |-- 02_basic_rgb_led
23+
| |-- 03_basic_key
24+
| |-- 04_basic_beep_led
25+
| |-- 05_basic_ir
26+
| |-- 06_driver_lcd
27+
| |-- 07_driver_temp_humi
28+
| |-- 08_driver_als_ps
29+
| |-- 09_driver_axis
30+
| |-- 10_component_usb_mouse
31+
| `-- README.md
32+
|-- rt-thread
33+
`-- sdk-bsp-rt-spark.yaml
34+
```
35+
36+
- sdk-bsp-rt-spark.yaml:描述 星火 1 号 的硬件信息
37+
- libraries:板级移植文件、通用外接驱动程序、STM32F4 固件库
38+
- projects:示例项目文件夹,包括各种示例代码
39+
- rt-thread:rt-thread 源代码
40+
41+
## 使用
42+
43+
sdk-bsp-stm32f407-spark 支持 RT-Thread Studio 和 MDK 开发。
44+
45+
### RT-Thread Studio 开发
46+
47+
1. 打开 RT-Thread Studio 的包管理器,安装 ` 星火一号开发板 ` 资源包
48+
2. 安装完成后,选择基于 BSP 创建工程即可
49+
50+
### MDK 开发
51+
52+
为了避免 SDK 在持续更新中,每一个 `projects` 都创建一份 `rt-thread` 文件夹 和 `libraries` 文件夹导致的 SDK 越来越臃肿,所以这些通用文件夹被单独提取了出来。这样就会导致直接打开 `MDK` 的工程编译会提示缺少上述两个文件夹的文件,我们使用如下步骤解决这个问题:
53+
54+
1. 双击某个 `project` 目录下的 `mklinks.bat` 文件,或者使用 [Env](https://club.rt-thread.org/ask/question/5699.html) 工具执行 mklink 命令,分别为 `rt-thread``libraries` 文件创建符号链接。
55+
2. 查看目录下是否有 `rt-thread``libraries` 的文件夹图标。
56+
3. 使用 [Env](https://club.rt-thread.org/ask/question/5699.html) 工具执行 scons --target=mdk5 更新 MDK5 工程文件。
57+
58+
## 交流平台
59+
60+
对 星火一号 感兴趣的小伙伴可以加入 QQ 群 - RT-Thread 星火学习板 群号: 839583041、852752783。
61+

docs/images/board-small.jpg

156 KB
Loading

docs/images/board.jpg

346 KB
Loading

libraries/Board_Drivers/SConscript

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import os
2+
import rtconfig
3+
from building import *
4+
5+
Import('SDK_LIB')
6+
7+
cwd = GetCurrentDir()
8+
9+
# add general drivers
10+
src = []
11+
path = [cwd]
12+
13+
if GetDepend(['BSP_USING_ETH']):
14+
src += Glob('phy_reset.c')
15+
16+
if GetDepend(['BSP_USING_RS485']):
17+
src += Glob('drv_rs485.c')
18+
19+
if GetDepend(['BSP_USING_SOFT_SPI_FLASH']):
20+
src += Glob('soft_spi_flash_init.c')
21+
22+
if GetDepend(['BSP_USING_SPI_FLASH']):
23+
src += Glob('spi_flash_init.c')
24+
25+
if GetDepend(['BSP_USING_FS']):
26+
src += Glob('drv_filesystem.c')
27+
28+
if GetDepend(['BSP_USING_FAL']):
29+
src += Glob('fal/fal_spi_flash_sfud_port.c')
30+
path += [cwd + '/fal']
31+
32+
if GetDepend(['BSP_USING_SRAM']):
33+
src += Glob('drv_sram.c')
34+
35+
if GetDepend(['BSP_USING_ONBOARD_LCD']):
36+
src += Glob('lcd/drv_lcd.c')
37+
path += [cwd + '/lcd']
38+
39+
if GetDepend(['BSP_USING_ONBOARD_LED_MATRIX']):
40+
src += Glob('led_matrix/drv_matrix_led.c')
41+
path += [cwd + '/led_matrix']
42+
43+
44+
if GetDepend(['BSP_USING_EASYFLASH']):
45+
src += Glob('ef_fal_port.c')
46+
47+
if GetDepend(['BSP_USING_ENC28j60']):
48+
src += Glob('drv_enc28j60.c')
49+
50+
51+
52+
53+
CPPDEFINES = ['STM32F407xx']
54+
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES)
55+
56+
list = os.listdir(cwd)
57+
for item in list:
58+
if os.path.isfile(os.path.join(cwd, item, 'SConscript')):
59+
group = group + SConscript(os.path.join(item, 'SConscript'))
60+
61+
Return('group')
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright (c) 2006-2018, RT-Thread Development Team
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*
6+
* Change Logs:
7+
* Date Author Notes
8+
* 2018-08-27 ZYLX the first version
9+
*/
10+
11+
#include <drivers/pin.h>
12+
#include <enc28j60.h>
13+
#include "drv_spi.h"
14+
#include "board.h"
15+
16+
#define PIN_NRF_IRQ GET_PIN(E,2)
17+
18+
19+
int enc28j60_init(void)
20+
{
21+
__HAL_RCC_GPIOD_CLK_ENABLE();
22+
rt_hw_spi_device_attach("spi1", "spi11", GPIOA, GPIO_PIN_4);
23+
24+
/* attach enc28j60 to spi. spi11 cs - PA4 */
25+
enc28j60_attach("spi11");
26+
27+
/* init interrupt pin */
28+
rt_pin_mode(PIN_NRF_IRQ, PIN_MODE_INPUT_PULLUP);
29+
rt_pin_attach_irq(PIN_NRF_IRQ, PIN_IRQ_MODE_FALLING, (void(*)(void*))enc28j60_isr, RT_NULL);
30+
rt_pin_irq_enable(PIN_NRF_IRQ, PIN_IRQ_ENABLE);
31+
32+
return 0;
33+
}
34+
INIT_COMPONENT_EXPORT(enc28j60_init);
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
/*
2+
* Copyright (c) 2006-2021, RT-Thread Development Team
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*
6+
* Change Logs:
7+
* Date Author Notes
8+
* 2018-12-13 balanceTWK add sdcard port file
9+
* 2021-05-10 Meco Man fix a bug that cannot use fatfs in the main thread at starting up
10+
* 2021-07-28 Meco Man implement romfs as the root filesystem
11+
*/
12+
13+
#include <rtthread.h>
14+
#include <dfs_romfs.h>
15+
#include <dfs_fs.h>
16+
#include <dfs_file.h>
17+
18+
#if DFS_FILESYSTEMS_MAX < 4
19+
#error "Please define DFS_FILESYSTEMS_MAX more than 4"
20+
#endif
21+
#if DFS_FILESYSTEM_TYPES_MAX < 4
22+
#error "Please define DFS_FILESYSTEM_TYPES_MAX more than 4"
23+
#endif
24+
25+
#define DBG_TAG "app.filesystem"
26+
#define DBG_LVL DBG_INFO
27+
#include <rtdbg.h>
28+
29+
#ifdef BSP_USING_FS_AUTO_MOUNT
30+
#ifdef BSP_USING_SDCARD_FATFS
31+
static int onboard_sdcard_mount(void)
32+
{
33+
if (dfs_mount("sd0", "/sdcard", "elm", 0, 0) == RT_EOK)
34+
{
35+
LOG_I("SD card mount to '/sdcard'");
36+
}
37+
else
38+
{
39+
LOG_E("SD card mount to '/sdcard' failed!");
40+
}
41+
42+
return RT_EOK;
43+
}
44+
#endif /* BSP_USING_SDCARD_FATFS */
45+
#endif /* BSP_USING_FS_AUTO_MOUNT */
46+
47+
#ifdef BSP_USING_FLASH_FS_AUTO_MOUNT
48+
#ifdef BSP_USING_FLASH_FATFS
49+
#define FS_PARTITION_NAME "filesystem"
50+
51+
static int onboard_fal_mount(void)
52+
{
53+
/* 初始化 fal 功能 */
54+
extern int fal_init(void);
55+
extern struct rt_device *fal_blk_device_create(const char *parition_name);
56+
fal_init();
57+
/* 在 spi flash 中名为 "filesystem" 的分区上创建一个块设备 */
58+
struct rt_device *flash_dev = fal_blk_device_create(FS_PARTITION_NAME);
59+
if (flash_dev == NULL)
60+
{
61+
LOG_E("Can't create a block device on '%s' partition.", FS_PARTITION_NAME);
62+
}
63+
else
64+
{
65+
LOG_D("Create a block device on the %s partition of flash successful.", FS_PARTITION_NAME);
66+
}
67+
68+
/* 挂载 spi flash 中名为 "filesystem" 的分区上的文件系统 */
69+
if (dfs_mount(flash_dev->parent.name, "/fal", "elm", 0, 0) == 0)
70+
{
71+
LOG_I("Filesystem initialized!");
72+
}
73+
else
74+
{
75+
LOG_E("Failed to initialize filesystem!");
76+
LOG_D("You should create a filesystem on the block device first!");
77+
}
78+
79+
return RT_EOK;
80+
}
81+
#endif /*BSP_USING_FLASH_FATFS*/
82+
#endif /*BSP_USING_FLASH_FS_AUTO_MOUNT*/
83+
84+
85+
const struct romfs_dirent _romfs_root[] =
86+
{
87+
#ifdef BSP_USING_SDCARD_FATFS
88+
{ROMFS_DIRENT_DIR, "sdcard", RT_NULL, 0},
89+
#endif
90+
91+
#ifdef BSP_USING_FLASH_FATFS
92+
{ROMFS_DIRENT_DIR, "fal", RT_NULL, 0},
93+
#endif
94+
};
95+
96+
const struct romfs_dirent romfs_root =
97+
{
98+
ROMFS_DIRENT_DIR, "/", (rt_uint8_t *)_romfs_root, sizeof(_romfs_root) / sizeof(_romfs_root[0])
99+
};
100+
101+
static int filesystem_mount(void)
102+
{
103+
104+
#ifdef BSP_USING_FS
105+
if (dfs_mount(RT_NULL, "/", "rom", 0, &(romfs_root)) != 0)
106+
{
107+
LOG_E("rom mount to '/' failed!");
108+
}
109+
110+
/* 确保块设备注册成功之后再挂载文件系统 */
111+
rt_thread_delay(500);
112+
#endif
113+
#ifdef BSP_USING_FS_AUTO_MOUNT
114+
onboard_sdcard_mount();
115+
#endif /* BSP_USING_FS_AUTO_MOUNT */
116+
117+
#ifdef BSP_USING_FLASH_FS_AUTO_MOUNT
118+
onboard_fal_mount();
119+
#endif
120+
121+
return RT_EOK;
122+
}
123+
INIT_APP_EXPORT(filesystem_mount);

0 commit comments

Comments
 (0)