完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
每当提到 3D 第一人称射击游戏,大家很自然就会联想到高性能独显,以及几个G甚至几十G的硬盘存储空间,那么有没有可能在 STM32F103RC 这样一块只有 256KB Flash 的小板子上保存一个大型第一人称射击游戏呢?
当我们用 USB 线把这块开发板连接到电脑上,就可以看到出现了一个只有100多KB的U盘,这就是 STM32 的片上 Flash 了。 然后可以看到U盘里有一个 90KB 的游戏。 如果我们双击它就启动了一个 STM32 上的第一人称射击游戏。 |
|
|
|
运行RT-Thread
RT-Thread在Github上是开源的,源码可以在这里(链接:https://github.com/rt-Thread/rt-thread/)找到,官网文档也很丰富这里就不重复了,总结一下需要的工具: GitBash Keil开发环境 stm32开发板 RT-Thread源码 env工具 如果觉得从github上面下载rt-thread源码比较慢,可以先从gitee上面下载,然后修改项目地址。 向????滑动查看全部 1git clone https://gitee.com/rtthread/rt-thread 2cd rt-thread 3git remote rm origin 4git remote add origin https://github.com/RT-Thread/rt-thread 5git pull origin master |
|
|
|
片上 Flash 文件系统
准备好第一步里面的工具后,首先我们需要把 stm32 的片上 flash 挂载为文件系统,首先需要在 CubeMX 里使能 USB。 打开 USB 后在时钟配置里确认外部晶振和板子上的晶振是一致的,并且 USB 的时钟是 48MHz,就可以点击生成代码了。由于我们修改了时钟,需要把 board/CubeMX_Config/Src/main.c 里面的 void SystemClock_Config(void) 函数复制到 board/board.c 里面替换。 接下来修改 bsp 下 board 目录里的 Kconfig 文件。 向????滑动查看全部 1config BSP_USING_ON_CHIP_FLASH 2 bool “Enable on-chip FLASH” 3 default n 4 5config BSP_USING_USBD_FS 6 bool “Enable USBD as USB device” 7 select RT_USING_USB_DEVICE 8 default n 这样再在 bsp 目录下右键 ConEmu Here 就可以看到配置界面 (Env 教程:https://www.rt-thread.org/document/site/tutorial/env-video/),依次选中下面几个选项: Hardware Drivers Config --》 Enable on-chip Flash RT-thread Components --》 Device Drivers --》 Using MTD Nor Flash device drivers RT-Thread online packages --》 system packages 选中 fal 和 Littlefs RT-Thread Components --》 Device virtual file system 保存配置退出,在 env 里面输入命令就可以自动生成 Keil 项目了: 1pkgs --update2scons --target=mdk5 -s 我们需要先对 flash 进行规划,STM32F103RC 一共有 256KB,可以把最后的 128KB 作为文件系统使用,于是新建一个 fal_cfg.h: 向????滑动查看全部 1extern const struct fal_flash_dev stm32_onchip_flash; 2 3#define FAL_FLASH_DEV_TABLE 4{ 5 &stm32_onchip_flash, 6} 7 8#define FAL_PART_TABLE 9{ 10 {FAL_PART_MAGIC_WROD, “app”, “onchip_flash”, 0, 128*1024, 0}, 11 {FAL_PART_MAGIC_WROD, “flash0”, “onchip_flash”, 128*1024, 128*1024, 0}, 12} 再修改 main.c 挂载文件系统: 1#include 《rtthread.h》 2#include 《rtdevice.h》 3#include 《board.h》 4#include 《fal.h》 5#include 《dfs_posix.h》 6 7/* defined the LED0 pin: PC13 */ 8#define LED0_PIN GET_PIN(C, 13) 9 10#define FS_PARTITION_NAME “flash0” 11 12int main(void) 13{ 14 int count = 1; 15 /* set LED0 pin mode to output */ 16 rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); 17 18 fal_init(); 19 20#ifdef RT_USB_DEVICE_MSTORAGE 21 struct rt_device *flash_dev = fal_blk_device_create(FS_PARTITION_NAME); 22#else 23 struct rt_device *flash_dev = fal_mtd_nor_device_create(FS_PARTITION_NAME); 24#endif 25 26 if (flash_dev == NULL) 27 { 28 rt_kprintf(“Can‘t create a block device on ’%s‘ partition.n”, FS_PARTITION_NAME); 29 } 30 else 31 { 32 rt_kprintf(“Create a block device on the %s partition of flash successful.n”, FS_PARTITION_NAME); 33 } 34 35 while (count++) 36 { 37#ifndef RT_USB_DEVICE_MSTORAGE 38 if(rt_device_find(FS_PARTITION_NAME) != RT_NULL) 39 { 40 dfs_mkfs(“lfs”, FS_PARTITION_NAME); 41 42 if (dfs_mount(FS_PARTITION_NAME, “/”, “lfs”, 0, 0) == RT_EOK) 43 { 44 rt_kprintf(“sd card mount to ’/‘n”); 45 break; 46 } 47 else 48 { 49 rt_kprintf(“sd card mount to ’/‘ failed!n”); 50 } 51 } 52#endif 53 rt_pin_write(LED0_PIN, PIN_HIGH); 54 rt_thread_mdelay(500); 55 rt_pin_write(LED0_PIN, PIN_LOW); 56 rt_thread_mdelay(500); 57 } 58 59 return RT_EOK; 60} 项目编译下载到板子上,串口连接上去在 msh 里输入 fal probe 应当就可以看到分区表了: Linux 下常用的命令 ls ,cat,mkdir,cd 也都是支持的,这样我们就把 stm32 的片上 flash 挂载为文件系统了, 下一步就是让它识别为 U盘。 |
|
|
|
挂载片上 Flash 为 U盘
同样的,我们在 env 的配置目录里面依次选中: Hardware Drivers Config --》 On-chip Peripheral Drivers RT-Thread Components --》 Device Drivers --》 Using USB 这样保存配置,在 env 下生成项目文件: 1scons --target=mdk5 -s 编译上传到板子上,接上 USB 到电脑,例如 stm32f103 的 USB 引脚是 PA11 和 PA12,就可以看到电脑识别到一个新的 U盘了,第一次使用可能需要先格式化。 最后其实就只是把高压的游戏复制进去,就把它装进 STM32 的片上 flash 了,其实还是挺简单的。 |
|
|
|
只有小组成员才能发言,加入小组>>
793 浏览 0 评论
1152 浏览 1 评论
2528 浏览 5 评论
2861 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2711 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1073浏览 3评论
195浏览 2评论
457浏览 2评论
370浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
455浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 08:39 , Processed in 0.922234 second(s), Total 81, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号