娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM32自制GUI小游戲--Apple的學習筆記

發布者:快樂的成長最新更新時間:2025-01-22 來源: jianshu關鍵字:STM32  學習筆記 手機看文章 掃描二維碼
隨時隨地手機看文章

一,前言

要過年了,我就玩會吧~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!
游戲使用方法

  1. 開機

  2. 按一下key0,游戲開始,主人公出現。

  3. 在游戲過程中按key0,主人公跳起,必要碰到4個障礙物。

  4. 跳過4個障礙物后,顯示win結束游戲,按一次key0又可以重來。

  5. 過程中若遇到障礙物,則顯示GO。游戲結束,按一次key0又可以重來。

游戲錄制效果

2.gif


關鍵字:STM32  學習筆記 引用地址:STM32自制GUI小游戲--Apple的學習筆記

上一篇:Mac搭建STM32環境(基于M1 PRO)報錯問題(No such file or directory))
下一篇:STM32開發環境搭建

推薦閱讀最新更新時間:2025-06-21 21:52

STM32入門學習筆記之EEPROM存儲實驗2
16.3 STM32內部IIC協議相關寄存器 16.3.1 控制寄存器1:I2Cx_CR1 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 SWRST - ALERT PEC POS ACK STOP START NOSTRETCH ENGC ENPEC ENAPR SMBTYPE - SMBUS PE Bit 15:軟件復位 0:I2C模塊不處于復位 1:I2C模塊處于復位 Bit 13:SMBus提醒:軟件可以設置或清除該位,當PE=0時,由硬件清除 0:釋放SMBAlert引腳使其變高,提醒響應地址頭緊跟在NACK信號后面 1:驅動SMBAlert引腳使其變低,提醒響應地址頭緊跟在AC
[單片機]
STM32入門學習筆記之EEPROM存儲實驗4
(2)創建at24cxx.c文件,并輸入以下代碼。 /********************************************************************************************************* EEPROM 驅 動 程 序 *********************************************************************************************************/ #include at24cxx.h #include delay.h /***********
[單片機]
STM32學習筆記--------時鐘體系
stm32的時鐘體系參考(轉自正點原子,僅用于學習交流): 一、時鐘是什么? 時鐘:給單片機提供一個時鐘信號(某個頻率),協調單片機內部組件同步工作,實現與外部設備通信的同步。(串口的波特率同步)相當于我們的心臟,是核心的部分。 二、時鐘源 STM32103的5個時鐘源 HSE 高速外部時鐘 RC振蕩器 頻率為8MHz HSI 高速內部時鐘 外接時鐘4MHz~16MHz LSI 低速內部時鐘 RC振蕩器頻率為40KHz 供WDG看門狗 LSE 低速外部時鐘 32.768MHz 供給RTC PLL 鎖相環倍頻輸出(范圍2~16倍)最大不超過72MHz 系統時鐘來源SYSCLK HSI HSE PLL 時鐘
[單片機]
<font color='red'>STM32</font><font color='red'>學習</font><font color='red'>筆記</font>--------時鐘體系
STM32學習筆記(一)之存儲器的地址分配
首先我們需要知道存儲器地址映射定義:ARM Cortex-M3系列的處理器,采用存儲器與I/O設備(外設)統一編址的方式,將部分存儲器地址范圍用于外設,這種通過存儲器地址訪問外設的方式,稱之為存儲器地址映射 對于32位處理器,可尋址范圍是2的32次,即4GB尋址范圍;ARM將這4G空間從低地址到高地址依次劃分為代碼區( Code)、 片上SRAM區( SRAM)、片上外設( Peripheral) 、片外RAM( External RAM)、片外外設( External Device)和系統級( System level) ARM公司只是大概的規定了存儲器空間的映射,允許各芯片廠商在指定范圍內自行定義和使用這些存儲空間,未
[單片機]
<font color='red'>STM32</font><font color='red'>學習</font><font color='red'>筆記</font>(一)之存儲器的地址分配
STM32學習筆記(二)---GPIO
GPIO功能框圖 GPIO功能描述 輸入功能 (浮空/上拉/下拉) a. 輸出被禁止,施密特觸發器打開,可以通過輸入數據寄存器GPIOx_IDR讀取I/O狀態。 b. 可配置為浮空輸入、上拉輸入、下拉輸入。 輸出功能 (推挽/開漏 + 上拉/下拉) a. 推挽模式以雙MOS工作,輸出數據寄存器GPIOx_ODR可以控制I/O輸出高低電平。 b. 開漏模式只有NMOS工作,輸出數據寄存器GPIOx_ODR可以控制I/O輸出高阻態或低電平 c. 輸出時引腳電平受ODR寄存器的影響,若ODR寄存器對應的引腳位為0,在這種狀況下,上拉只能小幅提高輸出電流能力,而不會影響引腳的輸出狀態。 模擬功能 (輸入/輸出) a.
[單片機]
<font color='red'>STM32</font><font color='red'>學習</font><font color='red'>筆記</font>(二)---GPIO
stm32以太網LWIP學習筆記之UDP通信
初始化配置步驟 第一:硬件底層DMA緩存以及以太網內存初始化 if(ETH_Mem_Malloc())return 1; //內存申請失敗 if(lwip_comm_mem_malloc())return 1; //內存申請失敗 u8 ETH_Mem_Malloc(void) { DMARxDscrTab=mymalloc(SRAMIN,ETH_RXBUFNB*sizeof(ETH_DMADESCTypeDef));//申請內存 DMATxDscrTab=mymalloc(SRAMIN,ETH_TXBUFNB*sizeof(ETH_DMADESCTypeDef));//申請內存 Rx_Buff=m
[單片機]
STM32單片機學習筆記——USART串口通信
首先,USART是什么呢? USART是一個全雙工通用同步/異步串行收發模塊,該接口是一個高度靈活的串行通信設備。(來自百度) 這是官方解釋,而我對它的通俗解釋是:這是一個用于和其他設備(如電腦、單片機等)通信(交換數據、信息等)的端口,就像手機數據線那樣。 當然,這只是我的一種通俗看法,大家經過了深入的學習之后,一定會產生更為準確、成熟的看法。 我所學習的,就是通過這個模塊來實現單片機和電腦之間的通信,并以此為基礎,實現利用電腦來簡單地控制單片機的目的。 那么,我們來簡單地看一看我們這段代碼由哪幾部分組成: 1. 用于存儲相關配置的結構體。 2. 變量Temp,用于存儲從電腦接收到的信息。 3.
[單片機]
STM32F4學習筆記4——STM32的AD用DMA方式時的請注意初始化順序
我突然意識到我的數據好像一直沒有錯位,看到這個我又試驗了一下,發現把DMA_Cmd(DMA1_Channel1, ENABLE);放置到哪兒都是一樣的啊~~~ 這個是原帖部分: STM32的AD用DMA方式時的請注意初始化順序 珍情歲月(84848098) 17:19:23 DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_Result; DMA_InitStructure.DMA_DIR
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 盐亭县| 铜鼓县| 浑源县| 广西| 漠河县| 盐津县| 二连浩特市| 溆浦县| 博野县| 吉安县| 景德镇市| 得荣县| 富宁县| 嵩明县| 衡水市| 灵丘县| 江阴市| 佳木斯市| 鹰潭市| 固镇县| 金寨县| 祁门县| 石泉县| 略阳县| 贵州省| 郯城县| 仙游县| 乐平市| 宝清县| 台湾省| 林州市| 靖江市| 德格县| 孟津县| 兴城市| 鄂温| 盐山县| 吴川市| 洞头县| 汉源县| 连平县|