国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

在STM32F1片上 Flash 保存第一人稱 3D 射擊游戲

發布時間:2020-5-15 17:27    發布者:嵌入式人生17
STM32F1片上 Flash 保存第一人稱 3D 射擊游戲
文章來源于RTThread物聯網操作系統 ,作者wuhanstudio
每當提到 3D 第一人稱射擊游戲,大家很自然就會聯想到高性能獨顯,以及幾個G甚至幾十G的硬盤存儲空間,那么有沒有可能在 STM32F103RC 這樣一塊只有 256KB Flash 的小板子上保存一個大型第一人稱射擊游戲呢?
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml6616\wps29.png
當我們用 USB 線把這塊開發板連接到電腦上,就可以看到出現了一個只有100多KB的U盤,這就是 STM32 的片上 Flash 了。
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml6616\wps30.png
然后可以看到U盤里有一個 90KB 的游戲。
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml6616\wps31.png
如果我們雙擊它就啟動了一個 STM32 上的第一人稱射擊游戲。
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml6616\wps32.png

這是完整的演示視頻:
如果你也有興趣把這個游戲保存在 STM32 上,可以跟著后面的教程,或者也可以在這個項目里直接找到編譯好的固件、游戲和項目源碼。
鏈接地址:https://github.com/wuhanstudio/stm32-ufun-3d-game
1. 運行 RT-Thread
RT-Thread 在 Github 上是開源的,源碼可以在這里(鏈接:https://github.com/rt-Thread/rt-thread/)找到,官網文檔也很豐富這里就不重復了,總結一下需要的工具:
· Git Bash
· 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
2. 片上 Flash 文件系統
準備好第一步里面的工具后,首先我們需要把 STM32 的片上 flash 掛載為文件系統,首先需要在 CubeMX 里使能 USB。
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml6616\wps33.png
打開 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/),依次選中下面幾個選項:
1. Hardware Drivers Config --> Enable on-chip Flash
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml6616\wps34.png
1.
RT-thread Components --> Device Drivers --> Using MTD Nor Flash device drivers
2.
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml6616\wps35.png
1. RT-Thread online packages --> system packages 選中 fal 和 Littlefs
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml6616\wps36.png
1. RT-Thread Components --> Device virtual file system
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml6616\wps37.png
保存配置退出,在 env 里面輸入命令就可以自動生成 Keil 項目了:
1pkgs --update
2scons --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
2#include
3#include
4#include
5#include
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 應當就可以看到分區表了:
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml6616\wps38.png
Linux 下常用的命令 lscatmkdircd 也都是支持的,這樣我們就把 stm32 的片上 flash 掛載為文件系統了, 下一步就是讓它識別為 U盤。
3. 掛載片上 Flash 為 U盤
同樣的,我們在 env 的配置目錄里面依次選中:
1. Hardware Drivers Config --> On-chip Peripheral Drivers
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml6616\wps39.png
1. RT-Thread Components --> Device Drivers --> Using USB
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml6616\wps40.png
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml6616\wps41.png
這樣保存配置,在 env 下生成項目文件:
1scons --target=mdk5 -s
編譯上傳到板子上,接上 USB 到電腦,例如 STM32F103 的 USB 引腳是 PA11 和 PA12,就可以看到電腦識別到一個新的 U盤了,第一次使用可能需要先格式化。
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml6616\wps42.png
最后其實就只是把高壓的游戲復制進去,就把它裝進 STM32 的片上 flash 了,其實還是挺簡單的。完整的項目地址在這里:https://github.com/wuhanstudio/stm32-ufun-3d-game

本文地址:http://m.qingdxww.cn/thread-588882-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
傲琪電子 發表于 2020-5-18 08:40:41
謝謝樓主分享
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 利用SAM E54 Xplained Pro評估工具包演示CAN轉USB橋接器以及基于CAN的主機和自舉程序應用程序
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产极品白嫩超清在线观看 | 国产一二三区精品 | 免费高清欧美大片在线观看 | 精品国产中文一级毛片在线看 | 久久久窝窝午夜精品 | 亚洲免费网 | 国产麻豆精品高清在线播放 | 欧美精品v国产精品v | 精品日韩一区二区三区视频 | 黄色免费观看网站 | 最新欧美精品一区二区三区不卡 | 国产精品黄色大片 | 日韩欧美成人免费中文字幕 | 亚洲一级片在线播放 | 久久精品一本到99热免费 | 亚洲第一成年免费网站 | 国内精品自产拍在线观看91 | 羞羞网站在线看 | 91精品综合久久久久久五月天 | 99精品一区二区三区 | 日韩在线视屏 | 亚洲精品男人天堂 | 永久免费观看午夜视频在线 | 奇米精品一区二区三区在线观看 | 91视频高清| 欧美高清另类 | 亚洲香蕉视频 | 欧美日韩极品 | 免费在线观看毛片 | 亚州中文 | 好爽毛片一区二区三区四 | 亚洲成在人天堂在线 | 四虎影视库永久在线地址 | 亚洲国产日韩欧美 | 亚洲国产一成人久久精品 | 高清成年美女黄网站色大 | 国产成人亚洲综合在线 | 色丁香婷婷 | 午夜视频在线免费看 | 国产一区二区三区在线观看精品 | 国产精品国产三级国产专不∫ |