Rust+STM32+VSCode开发调试环境搭建

准备工作:

  1. 一个安装好的VSCode

  2. arm-gnu-toolchain工具链。注意:部分版本工具链的GDB无法直接启动,需要本地编译。测试中发现的情况:11.3的GDB可以启动。11.2无法正常启动。双击bin目录下arm-none-eabi-gdb.exe,确保可以运行。可以用11.2的GBD复制到11.2中。(仅测试这两个版本)在这里插入图片描述

  3. 安装Rust(不再赘述),安装Rust的arm编译工具

rustup target add thumbv7m-none-eabi
  1. Windows的OpenOCD二进制包

创建工程并编译:

1:创建Rust工程

cargo new stm32Rust。这里stm32Rust是我的工程名

2:VSCode打开新建工程文件夹

此时显示如下: 在这里插入图片描述

3:Cargo.toml中添加依赖项

在这里插入图片描述
注意:目前依赖包还没有到达稳定版本。可按自己需求更换版本。
完整Cargo.toml文件:

[package]
name = "stm32_rust"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[profile.dev]
opt-level = 0 # debug

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[profile.release]
opt-level = 'z' # turn on maximum optimizations. We only have 64kB
lto = true      # Link-time-optimizations for further size reduction

[dependencies]
cortex-m = "^0.7.6"      # Access to the generic ARM peripherals
cortex-m-rt = "^0.7.1"  # Startup code for the ARM Core
embedded-hal = "^0.2.4"  # Access to generic embedded functions (`set_high`)
panic-halt = "^0.2.0"    # Panic handler

# Access to the stm32f103 HAL.
[dependencies.stm32f1xx-hal]
# Bluepill contains a 64kB flash variant which is called "medium density"
features = ["stm32f103", "rt", "medium"]
version = "^0.9.0"

4:创建memory.x文件

MEMORY
{
/* NOTE 1 K = 1 KiBi = 1024 bytes */
FLASH : ORIGIN = 0x08000000, LENGTH = 128K//修改为芯片大小
RAM : ORIGIN = 0x20000000, LENGTH = 20K//修改为芯片大小
}

5:新建.cargo文件夹

创建config文件,如图:
在这里插入图片描述

config文件内容如下:

# .cargo/config
[build]
target = "thumbv7m-none-eabi"

[target.'cfg(all(target_arch = "arm", target_os = "none"))']
runner = 'E:\\Program\\arm-none-eabi\\gcc-arm-11.2-2022.02-mingw-w64-i686-arm-none-eabi\\bin\\arm-none-eabi-gdb.exe -q -x debug.gdb'

[target.thumbv7m-none-eabi]
rustflags = [
    "-C", "linker=E:\\Program\\arm-none-eabi\\gcc-arm-11.2-2022.02-mingw-w64-i686-arm-none-eabi\\bin\\arm-none-eabi-gcc.exe",
    "-C", "link-arg=-Wl,-Tlink.x",
    "-C", "link-arg=-nostartfiles",
]

runner与linker按实际路径修改配置。

6:改造一个最小main文件

#![no_std]
#![no_main]

use cortex_m_rt::entry; // The runtime
use stm32f1xx_hal::{
}; // STM32F1 specific functions
#[allow(unused_imports)]
use panic_halt;
#[entry]
fn main() -> ! {
    //println!("Hello, world!");
    loop {
        
    }
}

use stm32f1xx_hal:我是用的stm32f103

7:测试

终端运行cargo build
在这里插入图片描述

此时应当会出现如下样式:
在这里插入图片描述

应当会出现target目录,目录下有thumbv7m-none-eabi/debug/stm32_rust文件,是我们编译生成的目标文件。
说明我们编译已经通过,配置完成。接下来配置debug。

Debug调试配置:

1:VSCode安装插件Cortex-Debug

在这里插入图片描述

(我这里安装的1.6.0版本。可能版本升级对OpenOCD以及ST-Link的版本会有要求)

2:配置Debug运行参数

点击小齿轮,进入配置。
在这里插入图片描述

点击“在setting.json中编辑”,配置交叉编译工具链,添加四个配置:

"cortex-debug.gdbPath": "E:\\Program\\arm-none-eabi\\gcc-arm-11.2-2022.02-mingw-w64-i686-arm-none-eabi\\bin\\arm-none-eabi-gdb.exe",   
"cortex-debug.armToolchainPath": "E:\\Program\\RT-ThreadStudio\\repo\\Extract\\ToolChain_Support_Packages\\ARM\\GNU_Tools_for_ARM_Embedded_Processors\\10.2.1\\bin",
"cortex-debug.openocdPath": "E:\\Program\\arm-none-eabi\\OpenOCD-20211118-0.11.0\\bin\\openocd.exe",

注意:请按自己的路径调整:gdb所在位置,工具链所在位置,openecd所在位置。

3:新建debug.gdb文件。

本文件用于gdb与openocd的连接命令:

target remote :3333

set backtrace limit 32

monitor reset halt

load

4:创建launch.json文件:
在这里插入图片描述

选择Cortex Debug
在这里插入图片描述

修改如下内容:
“servertype”: “jlink"改为"servertype”: “jlink”
“executable”: “./bin/executable.elf"改为"executable”: “./target/thumbv7m-none-eabi/debug/stm32_rust”
增加:

"device": "STM32F103RB",// 芯片型号
"showDevDebugOutput":"raw",
"configFiles": [
	"E:/Program/arm-none-eabi/OpenOCD-20211118-0.11.0/share/openocd/scripts/interface/stlink-v2.cfg",           // 调试器
	"E:/Program/arm-none-eabi/OpenOCD-20211118-0.11.0/share/openocd/scripts/target/stm32f1x.cfg",         // 芯片型号
]

完整launch.json文件如下:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Cortex Debug",
            "cwd": "${workspaceFolder}",
            "executable": "./target/thumbv7m-none-eabi/debug/stm32_rust",
            "request": "launch",
            "type": "cortex-debug",
            "runToEntryPoint": "main",
            "servertype": "openocd",
            "device": "STM32F103RB",
                "showDevDebugOutput":"raw",
                "configFiles": [
                    "E:/Program/arm-none-eabi/OpenOCD-20211118-0.11.0/share/openocd/scripts/interface/stlink-v2.cfg",           // 调试器
                    "E:/Program/arm-none-eabi/OpenOCD-20211118-0.11.0/share/openocd/scripts/target/stm32f1x.cfg",         // 芯片型号
                ]
        }
    ]
}

5:测试断点debug:
在main函数中设置一个断点,点击Cortex Debug的三角按钮运行,进入调试,命中断点。本次配置成功。
在这里插入图片描述

之后,开始写Rust代码吧!

示例代码:

// src/main.rs

#![no_std]
#![no_main]

use cortex_m_rt::entry; // The runtime
//use embedded_hal::digital::v2::OutputPin; // the `set_high/low`function
use stm32f1xx_hal::{
    pac, 
    prelude::*,
    serial::{self, Serial},
}; // STM32F1 specific functions

//use stm32f1xx_hal::{delay::Delay, pac, prelude::*}; // STM32F1 specific functions
#[allow(unused_imports)]
use panic_halt; // When a panic occurs, stop the microcontroller
#[entry]
fn main() -> ! {
    let dp = pac::Peripherals::take().unwrap();
    let cp = cortex_m::Peripherals::take().unwrap();
    let rcc = dp.RCC.constrain();
    let mut gpioc = dp.GPIOC.split();
    let mut led0 = gpioc.pc0.into_push_pull_output(&mut gpioc.crl);
    let mut led1 = gpioc.pc1.into_push_pull_output(&mut gpioc.crl);
    let mut led2 = gpioc.pc2.into_push_pull_output(&mut gpioc.crl);
    let mut led3 = gpioc.pc3.into_push_pull_output(&mut gpioc.crl);
    let mut led4 = gpioc.pc4.into_push_pull_output(&mut gpioc.crl);
    let mut led5 = gpioc.pc5.into_push_pull_output(&mut gpioc.crl);
    
    let mut flash = dp.FLASH.constrain();
    let cfgr = rcc.cfgr.use_hse(12.MHz()).sysclk(72.MHz());
    let clocks = cfgr.freeze(&mut flash.acr); 

    let mut afio = dp.AFIO.constrain();
    let mut gpioa = dp.GPIOA.split();
    let tx = gpioa.pa9.into_alternate_push_pull(&mut gpioa.crh);
    let rx = gpioa.pa10;
    let mut serial = Serial::usart1(
        dp.USART1,
        (tx, rx),
        &mut afio.mapr,
        serial::Config::default()
            .baudrate(115200.bps())
            .stopbits(serial::StopBits::STOP1)
            .wordlength_8bits()
            .parity_none(),
        clocks,
    );

    let mut delay = cp.SYST.delay(&clocks);
    let mut i = 0u8;
    loop {
        serial.write(b'U').ok();  
        led0.set_high();
        led1.set_high();
        led2.set_high();
        led3.set_high();
        led4.set_high();
        led5.set_high();
        if i == 0{
            led0.set_low();
            i += 1;
        }
        else if i == 1{
            led1.set_low();
            i += 1;
        }
        else if i == 2{
            led2.set_low();
            i += 1;
        }
        else if i == 3{
            led3.set_low();
            i += 1;
        }
        else if i == 4{
            led4.set_low();
            i += 1;
        }
        else if i == 5{
            led5.set_low();
            i = 0;
        }
        else{
            i=0;
        }
        delay.delay_ms(500_u16); 
    }
}

演示了一个跑马灯,以及串口发数据。
rcc.cfgr.use_hse(12.MHz()).sysclk(72.MHz())设置中,12.MHz()是晶振频率。72.MHz()是希望的倍频之后的频率。API后台会计算倍频倍率和设置参数。一般8M或12M的晶振都可以设置为72MHz。
串口波特率115200。

本文工具及代码下载:
https://download.csdn.net/download/lossage/86881018

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要配置 VS Code 的 Rust 开发环境,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了 Rust 编程语言的工具链。你可以在命令行中运行 `rustc --version` 来检查是否已经安装。如果没有安装,你可以按照 Rust 官方网站上的说明进行安装。 2. 在 VS Code 中安装 Rust 插件。打开 VS Code,点击左侧的扩展图标(四个方块组成的图标),在搜索栏中输入 "Rust",然后选择 Rust 插件并点击安装。 3. 在 VS Code 中打开一个 Rust 项目或创建一个新的项目。在菜单栏中选择 "文件" -> "打开文件夹",然后导航到你的 Rust 项目所在的文件夹并选择打开。 4. 在项目文件夹中创建一个名为 ".vscode" 的文件夹(如果它还不存在),然后在该文件夹中创建一个名为 "settings.json" 的文件。 5. 在 "settings.json" 中添加以下配置: ```json { "rust-client.enabled": true, "rust-client.autoStartRls": true } ``` 这些配置将启用 Rust 插件并自动启动 RLS(Rust Language Server)。 6. (可选)如果你想使用特定的 Rust 工具链,可以在 "settings.json" 中添加以下配置: ```json { "rust-client.rustupPath": "/path/to/rustup" } ``` 将 "/path/to/rustup" 替换为 Rust 工具链的实际路径。 7. 保存并关闭 "settings.json" 文件。 现在,你的 VS Code 环境已经配置好了 Rust 开发环境。你可以在编辑器中编写和调试 Rust 代码。插件提供了丰富的功能,如语法高亮、代码补全、代码导航等,可以帮助你更轻松地进行 Rust 开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值