老的rust embedded book 其实过时了. 正确的姿势是embassy 入手.
先说下以前rust写嵌入怎么教学小白的.
- 第一步,从这里 svd2rust 工具,自己生成库
- 第二部,有了这个库,相当于就有了pac外设访问文件,然后其实就可以搞起来了.
那么为啥不好搞了. 因为太乱了. 小白喜欢你告我咋弄,我就一行一行贴,然后我能看着灯亮了,看到uart从串口助手出来hello了. 但是以前这教学,一堆这个那个,还用啥openocd,然后库也特别多,搞不清装什么.
然后说说现在咋搞. 就去embassy的git,克隆下来,里面有exmample ,照着改. 连下载工具都不用cube啥的了,直接新工具probe-rs
我用的是stm32 l476的板子, 跑的stm32l4的例子. 基本无坑,几个注意点:
- .cargo/confg.toml runner = “probe-rs run --chip STM32L476RGTx --connect-under-reset” 注意我加的–connect-under-reset 没这个第二次下载程序报错.
- cargo.toml 依赖 embassy-stm32 = { version = “0.1.0”, path = “…/…/embassy-stm32”, features = [ “defmt”, “unstable-pac”, “stm32l476rg”, “memory-x”, “time-driver-any”, “exti”, “chrono”] } 就是改了 “stm32l476rg”
- 主文件 let mut led = Output::new(p.PA5, Level::High, Speed::Low); 显然,这个是我的灯
其他啥也没动,然后直接cargo run --bin blinky 一把成功. 中间下载库有翻墙问题,自己找梯子.
虽然说很多搞嵌入的觉得rust取代c,没啥大用,但是必须承认,这么一个架构,可以把很多人的工作积累起来, 至少公司喜欢这套.