跑了一下stm32f4xx-hal的Rust例程,记录一下遇到的坑

疫情在家,最近也突然没什么很急的事,试着按着github的教程在STM32F407上跑了把点灯的例程。

首先按着教程把依赖的库复制到Cargo.toml中

[dependencies]
embedded-hal = "0.2.3"
nb = "0.1.2"
cortex-m = "0.6.2"
cortex-m-rt = "0.6.11"
# Panic behaviour, see https://crates.io/keywords/panic-impl for alternatives
panic-halt = "0.2.0"

[dependencies.stm32f4xx-hal]
version = "0.7"
features = ["rt", "stm32f407"] # replace the model of your microcontroller here

而后要在工程中新建一个.cargo文件夹,并在其中创建一个config文件,并复制下面的配置,主要就是配置编译时的target,可以在编译的时候免去打字的麻烦,因为F4支持硬件附点所以使用带hf的v7指令集。如果没有安装对应的target可以通过 rustup target add thumbv7em-none-eabihf 安装。

[target.thumbv7em-none-eabihf]
rustflags = [
  "-C", "link-arg=-Tlink.x",
]

[build]
target = "thumbv7em-none-eabihf"

而后在main.rs复制闪灯的程序blinky,可以更改一下GPIO标号以适应开发板。最后还要编辑一下链接文件。在工程目录创建memory.x,文件。在里面写上下列配置。这里是F407的配置,基本就是把基地址和RAM ROM长度写上,但是特别注意部分芯片的RAM是分段的,总共有192K的RAM但是由于在0x20000000地址的只有128k,因此LENGTH要填128K,如果填了192K会在GDB里收到一个HardFault_的错误,网上好像没有对此的说明,虽然感觉是容易明白的,但是如果一下子碰到还是有些摸不着头脑,在此记录一下。

MEMORY
{
  /* NOTE K = KiBi = 1024 bytes */
  FLASH : ORIGIN = 0x08000000, LENGTH = 1M
  RAM : ORIGIN = 0x20000000, LENGTH = 128K
}

/* This is where the call stack will be allocated. */
/* The stack is of the full descending type. */
/* NOTE Do NOT modify `_stack_start` unless you know what you are doing */
_stack_start = ORIGIN(RAM) + LENGTH(RAM);

最后直接cargo build就可以得到编译的文件啦,或者可以用cargo build --release,当然Rust的编译时间还是一言难尽。而后用GDB把程序烧进去就可以看到闪灯了

openocd -f interface/jlink.cfg -f target/stm32f4x.cfg
arm-none-eabi-gdb
	file ./target/thumbv7em-none-eabihf/release/xxxx
	target remote :3333
	monitor reset halt
	load
	continue 

如果不出意外应该就可以看到闪灯了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值