首页 > 其他分享 >QEMU 仿真模拟 STM32 最小开发板 STM32F103

QEMU 仿真模拟 STM32 最小开发板 STM32F103

时间:2022-10-21 16:34:09浏览次数:89  
标签:STM32F103 LED -- QEMU 开发板 STM32 GPIO qemu arm

软件介绍

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

相关文章

  • STM32的优先级的理解及其使用
     有组0~4。同时对每一个中断设置一个抢占优先级和一个响应优先级值。分组配置是在寄存器SCB->AIRCR中配置:SCB->AIRCR为111,就是0位抢占,4位响应中断优先级表格  NVI......
  • ARM 笔记(1019)-- STM32部分--15 通用定时器的输出比较
    12.7通用定时器的输出比较我们不用滴答时钟,不用延时法,能不能实现呼吸灯?在工业控制中,很多场合需要产生PWM信号,那PWM信号如何产生?我们可以用定时器的输出比较功能实现上述......
  • 08. STM32按键检测
    ......
  • STM32 Note
    目录ST-LINK/V2手册STM3F103C8T6最小系统版的参数stm32cubeide一些BUG编译出错1坑:盗版STM32ST-LINK/V2手册手册可以从此处下载:[LINK]下面是一些摘要:......
  • STM32的串口通信程序
    1.流水灯的作业2.搭建STM32的开发环境(1)使用寄存器地址方式完成首先在Keil中新建工程,选择使用的开发板,此处我选择的是STM32F103C8。在SourceGroup中新建文件rfrf,代码......
  • FL2440开发板Linux内核添加USB驱动
    ———————————————————————————————————————主机操作系统:Centos6.7 交叉编译器环境:arm-linux-gcc-4.5.4 开发板平台:FL2440 Linu......
  • linux驱动开发FL2440开发板-LED驱动及其测试程序
    ———————————————————————————————————————主机操作系统:Centos6.7交叉编译器环境:arm-linux-gcc-4.5.4 开发板平台:FL2440 Linu......
  • 开发板烧录教程
    ———————————————————————————————————————主机操作系统:Centos6.7 交叉编译器环境:arm-linux-gcc-4.5.4 开发板平台:FL2440 Linu......
  • 07.stm32最小系统版库函数点灯
    ......
  • 32 位MCU单片机资料 STM32L4R9ZIY6P规格 特点
    STM32L4+系列微控制器具有更高性能(高达120MHz)和更大嵌入式内存(高达2M字节的闪存和640K字节的SRAM)。STM32L4+具有更丰富的图形和连接功能,同时保持同类最佳的超低功耗。STM32L......