一,前言
要過年了,我就玩會吧~GUI之前學習過了guilite源碼,那么我就調用它的API自己做個小游戲玩玩。步驟是先在vs上完成調試,然后移植到stm32F4開發板上。主要也想多用用新買的并口LCD屏,因為之前的ili9325并口8bit連camera不能用DMA,我又買了個ili9431并口16bit屏幕(連接camera方便DMA直接采集賦值),因為8bit的話,16bit需要先傳高bit再傳低bit給LCD。而camera DMA是4個字節按低地址到高地址寫到LCD,這樣就導致8bit LCD無法通過DMA連接camera了。跑題了,我順便述說我的新屏幕,哈哈~先看下游戲效果圖吧!其實可以理解為一個超級瑪麗小游戲。
image.png
二,vs調試遇到的問題
我是官網的example基礎上,借用它圖及走路,跳躍的邏輯代碼,然后改成了按鍵可以觸發的小游戲。想想容易,結果過程中也遇到了些坎坷。
1. 文字更新,無法消去之前的。--已解決
rect在surface創建的時候范圍需要填寫正確。然后通過調用s_surface->show_layer來顯示level0層的內容,進行恢復。
2. 如何設計重玩。--已解決
做了些標志位,然后重玩需要調用reset函數來重置位置。
3. 背景圖片移動不知道用哪個API或設計方案。--未解決
現在也沒找到解決方法,guilite庫好像不支持圖片移動的API。它的移動物體要么是重繪,要么就是要預先準備好一張張圖片。這個我去之后有機會再看看其它GUI源碼是如何做的。否則三維立方體確實是有移動的,但是這個移動只是幾條線段的移動。我這個背景圖片數組很大,難道也要通過矩陣變換數學公式來實現移動?
三,STM32GUI調試問題
1. cpp函數中按鈕按下后的回調函數總是找不到。導致編譯不通過。
原因是UIcode.cpp是cpp文件不是c文件,所以c要引用c++的函數需要添加extern c。主要是忘記了它是cpp文件,哈哈~
2. 代碼一運行就進入了while循環。
因為有2層,在底層set_surface的時候到calloc出現assert error進入while死循環。查了下我設置了2403202=150K,而STM32F407雖然有192Kram,但是其中64K不是連續的。于是我縮小了尺寸,挑選要更新的界面區域。大概為48K吧,但是依然calloc出錯?
于是思考了下calloc申請堆空間出錯只有一種原因,就是內存不過,但是現在48K為什么會不夠呢!想起來HEAP段的大小可以設置的,估計設置小了,查了map文件果然,HEAP默認只分配了512字節。
HEAP 0x20001b58 Section 512 startup_stm32f40_41xxx.o(HEAP)
Heap_Mem 0x20001b58 Data 512 startup_stm32f40_41xxx.o(HEAP)
STACK 0x20001d58 Section 1024 startup_stm32f40_41xxx.o(STACK)
Stack_Mem 0x20001d58 Data 1024 startup_stm32f40_41xxx.o(STACK)
作者:applecai
鏈接:https://www.jianshu.com/p/15c7d503cda8
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
原因找到了,那么就修改Heap段配置大小,修改startup_stm32f40_41xxx.s
Heap_Size EQU 0x00000200改成Heap_Size EQU 0x00010000
3. object走路速度快。
也就是刷屏變換比vs2017工程中快,所以把delay50變100。這樣調試下速度差不多。
4. 跳一下后,key數值每次加2
防抖動從5改成10.估計我一次按下抖動了2次,所以認為按下2次。修改為10后,按一次key,跳一次數值加1。一切如預期。
四,總結
Every thing under control. What a wonderful day!
游戲使用方法
開機
按一下key0,游戲開始,主人公出現。
在游戲過程中按key0,主人公跳起,必要碰到4個障礙物。
跳過4個障礙物后,顯示win結束游戲,按一次key0又可以重來。
過程中若遇到障礙物,則顯示GO。游戲結束,按一次key0又可以重來。
游戲錄制效果
2.gif
上一篇:Mac搭建STM32環境(基于M1 PRO)報錯問題(No such file or directory))
下一篇:STM32開發環境搭建
推薦閱讀最新更新時間:2025-06-21 21:52



設計資源 培訓 開發板 精華推薦
- 智能車原理圖111
- NCP59749MN2ADJTBGEVB,帶偏置軌評估板的超低壓差 LDO
- ardEEG:低成本腦機接口,支持8通道EEG,EMG和ECG生物信號測量
- STEVAL-GLA001V1,雙向可控硅和交流開關絕緣控制評估板
- Si5320-EVB,用于 SONET 的 622.08MHz 時鐘發生器的評估板
- AM1DR-2407SH30Z 7.2V 1 瓦 DC-DC 轉換器的典型應用
- ADR291GRZ 2.5V便攜式設備穩壓器典型應用電路
- XCEL-NOIX0SE045KBG-GEVK:X-Celerator XGS 45000 彩色顯影劑套件
- Tda7265、25 +25W 立體聲放大器的分離電源中的典型應用電路,帶靜音/待機
- 使用 Analog Devices 的 LT6204 的參考設計