疫情在家,最近也突然没什么很急的事,试着按着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
如果不出意外应该就可以看到闪灯了。