移植NES模拟器到STM32G431 详细移植教程 CubeMX HAL库

开发环境

MUC:STM32G431RBT6
板子:蓝桥杯 CT117E_M4
LCD:TFTLCD 2.4寸
注:若使用蓝桥杯 CT117E_M4板子,可以直接烧录该程序使用。

移植步骤

1.新建工程

配置LED、按键IO和RCC
在这里插入图片描述

配置时钟为170MHz
在这里插入图片描述
配置一个定时器用于计算帧数
在这里插入图片描述
打开中断
在这里插入图片描述
创建工程
在这里插入图片描述
复制蓝桥杯官方提供的LCD驱动文件到自己的工程,并在main.h添加lcd头文件

在这里插入图片描述
为了方便显示帧数,在官方的lcd驱动文件里添加一个新函数,并在lcd.h声明
在这里插入图片描述
在这里插入图片描述

在官方lcd初始化函数添加初始化功能,并在main初始化,同时初始化LED
在这里插入图片描述
在这里插入图片描述
在main.c定义FPS相关变量,并在main.h声明
在这里插入图片描述
在这里插入图片描述

在MX_TIM6_Init()函数添加如下代码,启动TIM6,用于计算帧数
在这里插入图片描述

并添加定时器中断回调函数在这里插入图片描述

2.移植NES文件

文件下载链接:我移植的是这位大佬的工程,STM32_NES_v0.11.rar
下载好大佬的工程后,复制方框里的两个文件夹到自己的工程路径下
在这里插入图片描述
复制USER路径下的mario.h到自己的工程路径下
在这里插入图片描述
添加刚才复制的文件和路径到工程里
在这里插入图片描述

修改PPU.C
此处有两种方法。第一种直接用官方封装好的写入LCD RAM函数,帧数在72左右
在这里插入图片描述
第二种,因为是连续写入,不需要频繁的修改其他引脚,且取消短暂延时,帧数可达114左右
在这里插入图片描述
修改nes_main.h文件
原来的 #include “sys.h” 修改为 #include “main.h”
并注释extern u8 FPS;在这里插入图片描述

修改nes_main.c文件
根据自己有无led.h文件修改
本程序无led.h故删除 #include “led.h” 在这里插入图片描述
删除LED=!LED;
在这里插入图片描述

在NesFrameCycle()函数下添加如下代码,用于显示帧数在这里插入图片描述回到main.h添加 #include "nes_main.h"y在这里插入图片描述
在main.c文件下的main()函数添加 nes_main();
在这里插入图片描述
按键修改在6502.s
找到下面这部分代码
在这里插入图片描述
对于蓝桥杯板子,修改成如下即可
在这里插入图片描述
对于其他板子修改对应自己板子的按键地址就行。
或者在NesFrameCycle()函数添加按键扫描代码,并定义一下啊按键状态变量,key_data,如下
在这里插入图片描述
TOUCH_scan();函数把按键状态保留到key_data
然后在6502.s声明该变量
在这里插入图片描述
在这里插入图片描述
配置优化等级为3
在这里插入图片描述

效果展示

在这里插入图片描述

STM32G431 NES 超级玛丽

程序下载

下载链接

  • 17
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值