Skip to content

这是一个基于stm32f103c8t6的游戏机,软件是基于Arduboy2修改的,目前是第一版本,基本跑通,能运行一些游戏。不是arduino,是原生代码

License

Notifications You must be signed in to change notification settings

lambda-zhang/Arduboy2_stm32

Repository files navigation

说明

原理图参考这个 stm32_arduboy_V1.0

介绍视频参考这个: stm32_arduboy_V1.0游戏机 - 介绍

开发

开发环境准备

安装必要的软件包

$ sudo apt-get install build-essential git gdb-multiarch

链接下载gcc,找gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 ,解压到/opt

链接下载openocd,找xpack-openocd-0.11.0-5-linux-x64.tar.gz ,解压到/opt

编译

以编译ARDUBREAKOUT为例

$ export PATH=$PATH:/your/path/gcc-arm-none-eabi-10.3-2021.10/bin
$ make APP_ARDUBREAKOUT=1

下载到单片机

$ /your/path/xpack-openocd-0.12.0-1/bin/openocd -f config/jlink.cfg -f config/stm32f1x.cfg \
-c init -c "reset halt" -c wait_halt \
-c "flash write_image erase build/Arduboy2_stm32f103c8t6.bin 0x08000000" \
-c reset -c shutdown

调试

$ /your/path/xpack-openocd-0.12.0-1/bin/openocd -f config/jlink.cfg -f config/stm32f1x.cfg
$ gdb-multiarch build/Arduboy2_stm32f103c8t6.elf
(gdb) tar ext:3333

支持的应用和游戏

应用

应用/游戏名称 预览 来源/编译方法 备注
BeepDemo 图片 来源: 链接,commit
编译方法: make APP_BEEPDEMO=1
可正常运行
Buttons 图片 来源: 链接,commit
编译方法: make APP_BUTTONS=1
可正常运行
FontDemo 图片 来源: 链接,commit
编译方法: make APP_FONTDEMO=1
可正常运行
HelloWorld 图片 来源: 链接,commit
编译方法: make APP_HELLOWORLD=1
可正常运行
RGBled 图片 来源: 链接,commit
编译方法: make APP_RGBLED=1
可正常运行
SetSystemEEPROM 图片 来源: 链接,commit
编译方法: make APP_SETSYSTEMEEPROM=1
可正常运行
PlayTune 图片 来源: 链接,commit
编译方法: make APP_PLAYTUNE=1
可正常运行
ID-51-EEPROM-TOOL 来源: 链接,commit
编译方法: make APP_EEPROMTOOL=1
可正常运行

游戏 - 动作/冒险

应用/游戏名称 预览 来源/编译方法 备注
arduboy-rund-ino 图片 来源: 链接,commit
编译方法: make APP_RUND=1
可正常运行
arduboy-rund-ino/halloweend 图片 来源: 链接,commit
编译方法: make APP_HALLOWEEND=1
可正常运行
Ardynia 图片 来源: 链接,commit
编译方法: make APP_ARDYNIA=1
可正常运行,走到图像边缘有bug
已经尝试修改但不一定对
CastleBoy 图片 来源: 链接,commit
编译方法: make APP_CASTLEBOY=1
可正常运行
Mystic Balloon 图片 来源: 链接,commit
编译方法: make APP_MYSTICBALLOON=1
可正常运行
Epic Crates Of Mass Destruction 图片 来源: 链接,commit
编译方法: make APP_ECOMD=1
可正常运行
Helmets & Hordes 图片 来源: 链接,commit
编译方法: make APP_HELMETSHORDES=1
不正常
SanSan 图片 来源: 链接
编译方法: make APP_SANSAN=1
可正常运行
会有图像错误
Shadow Runner 图片 来源: 链接,commit
编译方法: make APP_SHADOWRUNNER=1
可正常运行
hollow 图片 来源: 链接,commit
编译方法: make APP_HOLLOW=1
可正常运行
Rooftop Rescue 图片 来源: 链接,commit
编译方法: make APP_ROOFTOP=1
可正常运行,可能有bug
KONG 图片 来源: 链接,commit
编译方法: make APP_KONG=1
不正常
Chicken-Cross-Arduboy 图片 来源: 链接,commit
编译方法: make APP_CHICKENX=1
可正常运行

游戏 - 街机

应用/游戏名称 预览 来源/编译方法 备注
PINBALL 图片 来源: 链接,commit
编译方法: make APP_PINBALL=1
可正常运行

游戏 - 格斗

游戏 - 休闲益智

应用/游戏名称 预览 来源/编译方法 备注
03_tiny_2048 图片 来源: 链接,commit
编译方法: make APP_2048=1
可正常运行
Ardu-man 图片 来源: 链接,commit,PR
编译方法: make APP_ARDUMAN=1
可正常运行
ArduBreakout 图片 来源: 链接,commit
编译方法: make APP_ARDUBREAKOUT=1
可正常运行
Bomberboy 图片 来源: 链接,commit
编译方法: make APP_BOMBERBOY=1
可正常运行
Ardusweeper 图像 来源: 链接,commit
编译方法: make APP_MINESWEEPER=1
可正常运行
Flappy Ball 图片 来源: 链接,commit
编译方法: make APP_FLAPPYBALL=1
可正常运行
ArduboyTetris 图片 来源: 链接,commit
编译方法: make APP_ARDUBOYTETRIS=1
可正常运行
Dark-And-Under 图片 来源: 链接,commit
编译方法: make APP_DARKANDUNDER=1
可正常运行
Bubble PoP 图片 来源: 链接,commit
编译方法: make APP_BUBBLEPOP=1
可正常运行
ID-20-Escaper-Droid 图片 来源: 链接,commit
编译方法: make APP_ESCAPERDROID=1
可正常运行
Blob Attack 图片 来源: 链接,commit
编译方法: make APP_BLOBATTACK=1
可正常运行
BEGEMMED 图片 来源: 链接,commit
编译方法: make APP_BEGEMMED=1
可正常运行
Reverse Mermaid Hockey 图片 来源: 链接,commit
编译方法: make APP_RMH=1
可正常运行
Trolly Fish 图片 来源: 链接,commit
编译方法: make APP_TROLLYFISH=1
可正常运行
petris 图片 来源: 链接,commit
编译方法: make APP_PETRIS=1
可正常运行
Minesweeper 图片 来源: 链接,commit
编译方法: make APP_MINESWEEPER2=1
可正常运行

游戏 - 棋牌/卡片

应用/游戏名称 预览 来源/编译方法 备注
Mini Rogue 图片 来源: 链接,commit
编译方法: make APP_MINIROGUE=1
可正常运行
DICE of FATE 图片 来源: 链接,commit
编译方法: make APP_DICEOFFATE=1
可正常运行
Fantasy Rampage 图片 来源: 链接,commit
编译方法: make APP_FANTASYRAMPAGE=1
可正常运行

游戏 - 模拟/经营

应用/游戏名称 预览 来源/编译方法 备注
MicroCity 图片 来源: 链接,commit
编译方法: make APP_MICROCITY=1
可正常运行

游戏 - 竞速

游戏 - 角色扮演

应用/游戏名称 预览 来源/编译方法 备注
ARDUVENTURE 图片 来源: 链接,commit
编译方法: make APP_ARDUVENTURE=1
可正常运行

游戏 - 射击

应用/游戏名称 预览 来源/编译方法 备注
Catacombs of the damned! 图片 来源: 链接,commit
编译方法: make APP_ARDUBOY3D=1
可正常运行
VIRUS LQP-79 图片 来源: 链接,commit
编译方法: make APP_VIRUSLQP79=1
可正常运行
Sirène 图片 来源: 链接,commit
编译方法: make APP_SIRENE=1
不正常
Outpost Defense 图片 来源: 链接,commit
编译方法: make APP_OUTPOSTDEFENSE=1
可正常运行
Sunfire 图片 来源: 链接,commit
编译方法: make APP_SUNFIRE=1
可正常运行
ArduboyArcodia 图片 来源: 链接,commit
编译方法: make APP_ARDUBOYARCODIA=1
可正常运行
CosmicPods 图像 来源: 链接,commit
编译方法: make APP_COSMICPODS=1
可正常运行
Humanity Revenge Director's Cut 图像 来源: 链接,commit
编译方法: make APP_HUMANITYREVENGEDC=1
可正常运行
Night Raid 图片 来源: 链接,commit
编译方法: make APP_NIGHTRAID=1
可正常运行
Omega Chase 图片 来源: 链接,commit
编译方法: make APP_OMEGACHASE=1
可正常运行
SpaceFighter 图片 来源: 链接,commit
编译方法: make APP_SPACEFIGHTER=1
可正常运行
ArduBoy Jet Pac 图片 来源: 链接,commit
编译方法: make APP_ARDUBOYJETPACK=1
可正常运行
Glove 图片 来源: 链接,commit
编译方法: make APP_GLOVE=1
可正常运行
Evade 图片 来源: 链接,commit
编译方法: make APP_EVADE=1
可正常运行

硬件连接

swd+uart

STM32F103C8T6 FUNC JLINK DESC
PA9 USART1_TX pin17 TX
PA13 SYS_JTMS-SWDIO pin7 SWDIO
PA14 SYS_JTCK-SWCLK pin9 SWCLK

usb

STM32F103C8T6 FUNC USB DESC
PA11 USB_DM USB_DM
PA12 USB_DP USB_DP
PA8 GPIO_Output EN

flash

STM32F103C8T6 FUNC Nor Flash PIN DESC
PA4 GPIO_Output pin1 CS
PA5 SPI1_SCK pin6 CLK
PA6 SPI1_MISO pin2 IO1/MISO
PA7 SPI1_MOSI pin5 IO0/MOSI

lcd IRQT17

STM32F103C8T6 FUNC IRQT17 PIN DESC
PA0 GPIO_Output BL
PA1 GPIO_Output pin4 CS
PA15 GPIO_Outout pin5 RST
PA3 GPIO_Outout pin6 DC
PB13 SPI2_SCK pin7 SCL
PB15 SPI2_MOSI pin8 SDA

e2prom

STM32F103C8T6 FUNC AT24C02 PIN DESC
PB6 I2C1_SCL pin6 SCL
PB7 I2C1_SDA pin5 SDA

led

STM32F103C8T6 FUNC LED DESC
PB0 GPIO_Outout RED
PB1 GPIO_Outout GREEN
PB2 GPIO_Outout BLUE

button

STM32F103C8T6 FUNC BTN DESC
PB10 GPIO_Input Left
PB11 GPIO_Input Right
PB8 GPIO_Input Up
PB9 GPIO_Input Down
PC13 GPIO_Input A
PC14 GPIO_Input B

speaker

STM32F103C8T6 FUNC speaker DESC
PB4 S_TIM3_CH1 SPEAKER_1
PB3 S_TIM2_CH2 SPEAKER_2

adc (for generateRandomSeed)

STM32F103C8T6 FUNC DESC
PA2 ADC1_EXTI15

模块功能和说明

音频相关

TIM2_CH2

产生频率和占空比可以调的PWM,用来输出音符对应的频率来驱动无源蜂鸣器。最高频率1MHZ,占空比分辨率1/500=0.2%

TIM3_CH1

产生频率和占空比可以调的PWM,用来输出音符对应的频率来驱动无源蜂鸣器。最高频率1MHZ,占空比分辨率1/500=0.2%

TIM1

产生周期可以配置的定时中断,定时的周期更具不同的音频方案,做不同的配置。 SND1_ARDUBOYPLAYTUNE 配置1KHZ,SND2_ARDUBOYTONES配置1KHZ,SND3_ATMLIB配置31.25KHZ。

TIM4

产生周期可以配置的定时中断,定时的周期更具不同的音频方案,做不同的配置。 SND1_ARDUBOYPLAYTUNE 配置1KHZ,SND2_ARDUBOYTONES配置1KHZ,SND3_ATMLIB不配置。

问题

是否支持多个游戏打包到Flash?

不支持。现在使用的stm32f103c8t6的sram只有20KB,同时也不支持FSMC,无法搞一个loder的功能,所以当前版本不打算做多个游戏打包。

目前只能使用JLINK烧写单个游戏到单片机,要换另一个游戏就要重新烧录。

是否能通过USB下载?

不支持。还没有做开发。

后续计划?

  • 使用RP2040再做另外一个版本,这样就可以支持多个游戏打包。具体计划未定。
  • 在当前平台好几个游戏有bug,尝试看看能不能在当前平台解决
  • EEPROM的支持

About

这是一个基于stm32f103c8t6的游戏机,软件是基于Arduboy2修改的,目前是第一版本,基本跑通,能运行一些游戏。不是arduino,是原生代码

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published