老的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,沒啥大用,但是必須承認,這么一個架構,可以把很多人的工作積累起來, 至少公司喜歡這套.