embassy stm32 点灯

想研究下embassy的使用,手里有块STM32F3DISCOVERY开发板,以前买来学习rust嵌入式用的,闲置了很久,刚好拿来练练手。开发环境使用ubuntu24.04

1 udev配置,解决操作设备权限问题

创建udev配置文件:vim /etc/udev/rules.d/49-stlink.rules,内容如下:

#STM32F3DISCOVERY - ST-LINK/V2.1

ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE:="0666"

 其中 0483和3748可能会有变动,可以插上板子usb接口,使用lsusb 查出来。

设置完成后reload一下:sudo udevadm control --reload-rules

2 安装 probe-rs-tools

刚开始是用官网的脚本安装,装完后发现无法烧录芯片,后来改用 cargo install probe-rs-tools 安装,发现中间还有编译出错的crates。简直无语,后来采用probe-rs-tools crates上介绍的方法安装最新版,使用命令:

cargo install probe-rs-tools --git https://github.com/probe-rs/probe-rs --locked --force

安装过程中有可能提示需要安装开发环境和cmake等。

3 生成工程

使用probe-rs 查看下芯片对应的型号,开发板对应的芯片是 stm32f303vct6, 在probe-rs中对应的是 STM32F303VC:

probe-rs chip list | grep -i stm32f303

           ...

        STM32F303VC

          ...

使用cargo embassy 生成工程,其中disc是要生成的工程的名称:

cargo embassy init disc --chip stm32f303vc

生成的工程中,需要在Cargo.toml 中添加 embassy-stm32 crates.

生成的.cargo/config.toml 和Embed.toml 里面的芯片可能是 STM32F303VCTx, 使用STM32F303VC也是可以的。

4 修改代码

板子使用的led管脚是PE8 到 PE15,修改对应的管脚。

5 编译运行

使用cargo run --release 运行程序,程序会自动加载到芯片并运行,终端会提示打印信息。

~/r/disc (main)> cargo run --release

Compiling disc v0.1.0 (/home/rust/disc)

Finished release profile [optimized] target(s) in 1.43s

Running probe-rs run --chip STM32F303VC target/thumbv7em-none-eabi/release/disc

WARN probe_rs::util::rtt: Insufficient DWARF info; compile your program with debug = 2 to enable location info.

Erasing ✔ 100% [####################] 10.00 KiB @ 43.07 KiB/s (took 0s)

Programming ✔ 100% [####################] 10.00 KiB @ 12.82 KiB/s (took 1s)

WARN probe_rs::util::rtt::client: RTT read pointer changed, re-attaching

0.000000 TRACE BDCR ok: 00008218

└─ @ └─ <invalid location: defmt frame-index: 6>:0
0.000000 DEBUG rcc: Clocks { sys: Hertz(8000000), pclk1: Hertz(8000000), pclk1_tim:

Hertz(8000000), pclk2: Hertz(8000000), pclk2_tim: Hertz(8000000),

hclk1: Hertz(8000000), adc: None, adc34: None, rtc: Some(Hertz(40000)) }

└─ @ └─ <invalid location: defmt frame-index: 8>:0
0.000061 INFO Hello, World!

└─ @ └─ <invalid location: defmt frame-index: 9>:0
1.000305 INFO Hello, World!

└─ @ └─ <invalid location: defmt frame-index: 9>:0
2.000610 INFO Hello, World!

└─ @ └─ <invalid location: defmt frame-index: 9>:0

同时能看到两个led在轮流点亮了。

查看下bin大小,大致10k,稍微偏大了点,可能是引入embassy调度器的原因,不知道还有没有办法再压缩一点。

~/r/disc (main) [102]> size target/thumbv7em-none-eabi/release/disc

text    data    bss        dec       hex    filename

9820  112     5332     15264   3ba0   target/thumbv7em-none-eabi/release/disc

 点灯在嵌入式中相当于 "hello world!"例程, 下一步,可以在此基础上,调试其他更复杂的功能模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值