您尚未登录。

楼主 # 2022-07-05 23:36:35

shaoxi2010
会员
注册时间: 2019-06-13
已发帖子: 367
积分: 316

用RUST来测试下航芯ACM32F403RET7官方开发板

在晕哥店里捡个漏拿便宜开发板,趁现在兴致还在赶紧玩玩。由于平常使用Mac和linux环境居多,基本不在window下开发,
受海石生风大佬的帖子感觉应该可行。最近在学习RUST,不久前stable部分的组建也完善了现在用RUST开发已经不在需要
arm-none-gcc的支持可以使用llvm实现全套编译,顺便可以省下几个G的工具链。目前cortex-m下rust支持很简单,cargo-embed
可以实现管理下载编译调试一条龙,probe-rs项目也可以支持CMIS包,svd2rust可以实现基本寄存器库,配合cortex-m和
cortex-m-rt支持,点个灯还是没有问题,简单记录分享下,尝试白嫖。

1. 需要安装rust相关组建

rustup default stable #使用稳定版工具链
rustup component add llvm-tools-preview #安装llvm工具链
rustup target add thumbv8m.main-none-eabihf #安装M33标准库
cargo install cargo-embed cargo-generate cargo-binutils target-gen svd2rust #安装辅助工具集

2. 下载修改的模版到本地,在官方基础上修改为stm32f103并使用cargo-embed管理,也添加了acm32的描述文件。
可以使用CMIS的pack用target-gen生成yaml描述,具体参考probe-rs项目
已修改好项目地址: https://github.com/shaoxi2010/cortex-m-quickstart

3. 使用cargo generate生成led项目 cargo generate --git ./cortex-m-quickstart -n acm32f4-rs

4. 生成acm32f40x寄存器库信息
a.先在acm32f4-rs的同级目录下新建一个rust库,使用cargo new --lib acm32f40x创建一个lib
b.使用pack文件解压出svd文件,并将ACM32F4.svd文件拷到acm32f40x目录下
c.使用svd2rust -i ACM32F4.svd生成代码,将生成的lib.rs文件拷贝到src目录下
d.强迫症患者用rustfmt对生成文件进行重新格式化,库就算搞定了
PS:pack文件下是没有寄存器feild描述,比较坑爹,没发使用位方法,但是我看stm32是有的。。。

5. 回到led项目,将刚生成的寄存器库添加到Cargo.toml文件中

6. 其他修改参考rust的cortex-m的说明即可,可参考芯片yaml文件。

7. 在Embed.toml文件修改[default.general]下的chip = "ACM32F403RET7"

8. 写点逻辑代码编个简单的LED程序,完成。

9. 最后接上USB,连接电路板,cargo embed执行下载调试。

点灯完整项目可参考: https://github.com/shaoxi2010/acm32f4-rs
运行效果如下:

最近编辑记录 shaoxi2010 (2022-07-06 11:41:17)

离线

楼主 #5 2022-07-07 17:13:26

shaoxi2010
会员
注册时间: 2019-06-13
已发帖子: 367
积分: 316

Re: 用RUST来测试下航芯ACM32F403RET7官方开发板

那个是clean后从新编译速度还行,rust的硬伤挺多的,C调用在这里面很小,因为ABI的调用规则是一样的。蛋疼反而再一些奇奇怪怪的地方,航芯的SVD里没有寄存器描述,库类型系统检查的优势完全反而弄得到处都得unsafe,算下来还不如C得头文件。格式化字符串会导致容量暴涨,这个FLASH大还好,f103上还是挺难取舍得。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn