软件介绍
QEMU 是一款开源虚拟机, 可以用来模拟各种系统开发板, 当然也可以用来模拟 stm32 的开发板
QEMU 官方说明文档在此 https://www.qemu.org/docs/master/system/arm/stm32.html
不过我们使用的并不是官方的版本, 而是别人魔改的一个版本, 用 QEMU 模拟 STM32 这事很多人干过, 网上也查了一些资料参考, 作为一个菜鸟来说, 我对 QEMU 是不怎么熟悉的, 开发环境也是 windows, 所以一旦牵扯到相关源码编译直接就把我劝退了...
我的想法很简单, 就是直接下载别人编译好的 exe, 毕竟开发环境折腾起来是真的费劲, 鬼知道会缺什么库. 不过不巧的是这个版本后续可能要被废弃了, 网站贴出了之后不再支持的公告...
https://xpack.github.io/qemu-arm/
因为兼容性问题, 后期可能还会再维护一段时间, 如果下载的文件没有这个版本, 大概率说明这个版本已经撤销了, 文章关了, 可以退出了...
这里模拟的开发板是 STM32-Bluepill(STM32F103), 也就是淘宝拼多多上销量最高的那款, 似乎都有些修改, 不过都是大同小异.
环境准备
首先确保电脑有 nodejs 环境, 没有的话网站安装 https://nodejs.org/zh-cn/download/
然后安装 xpm
npm install --global xpm@latest
之后就是通过 xpm 安装 qemu 了
xpm install --global @xpack-dev-tools/qemu-arm@latest --verbose
安装完成之后大概这个路径可以找到 qemu 的几个 exe 文件
C:\Users\你的用户名\AppData\Roaming\xPacks\@xpack-dev-tools\qemu-arm\7.1.0-1.1\.content\bin
其中可以看到一个 eclipse 版本 qemu-system-gnuarmeclipse.exe, 我们要用的就是这个
使用
到 qemu-system-gnuarmeclipse.exe 所在的文件夹, 打开命令行或者 powershell
.\qemu-system-gnuarmeclipse.exe --board BluePill --image 你的stm32程序文件路径.elf
主要用到两个参数, --board
是设置开发板类型, --image
是设置 elf 程序文件. 需要注意这两个命令 官方的 QEMU 都是不支持的.
我这里烧录的程序是控制 PC13 亮灭的, BluePill 开发板 PC13 连的是一个 led 灯. 代码是用 arm-none-eabi-gcc 编译的.
工程用的是 Vscode 的一个插件 EIDE 创建的, 也很方便.
#include "stm32f10x.h"
#define LED_PERIPH ((uint32_t)0x00000010)
#define LED_PORT ((GPIO_TypeDef *) GPIOC_BASE)
#define LED_PIN GPIO_Pin_13
void delay(int x)
{
for (int i = 0; i < x; i++)
{
for (int j = 0; j < 1000; j++)
__NOP();
}
}
int main()
{
GPIO_InitTypeDef gpioDef;
RCC_APB2PeriphClockCmd(LED_PERIPH, ENABLE);
gpioDef.GPIO_Mode = GPIO_Mode_Out_PP;
gpioDef.GPIO_Pin = LED_PIN;
gpioDef.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(LED_PORT, &gpioDef);
while (1)
{
GPIO_WriteBit(LED_PORT, LED_PIN, (BitAction)!GPIO_ReadInputDataBit(LED_PORT, LED_PIN));
delay(1000);
}
}
执行效果如图所示
软件还做了点动画效果, 这个灯确实能一闪一闪的
GDB 调试
如果需要使用 GDB 调试的话需要添加两个参数 -S -s
.\qemu-system-gnuarmeclipse.exe -S -s --board BluePill --image 你的stm32程序文件路径.elf
之后启动 GDB 连接 1234
这个端口, 然后设置文件.
tar remote localhost:1234
file 你的stm32程序文件路径.elf
之后就可以愉快的进行调试了.
使用 VScode 调试
GDB 命令行使用不方便的话也可以用 VScode 的机制进行调试, 实际上也是使用的 GDB, 只不过是有了图形界面会方便点.
添加 json 调试配置文件.
{
"version": "0.2.0",
"configurations": [
{
"name": "stm32调试",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/Debug/${workspaceFolderBasename}.elf",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
// 这里是我的 gdb 路径
"miDebuggerPath": "C:/Users/Qu/.eide/tools/gcc_arm/bin/arm-none-eabi-gdb.exe",
"miDebuggerServerAddress": "localhost:1234",
}
]
}
标签:STM32F103,LED,--,QEMU,开发板,STM32,GPIO,qemu,arm
From: https://www.cnblogs.com/asmer/p/16813129.html