|
关注+星标公众号,不错过精彩内容
作者 | strongerHuang
微信公众号 | strongerHuang
用C语言开发单片机,是不是落伍了?Rust编程语言是不是可以用来写单片机程序?
这是一位网友最近的问题,你是否有这样的疑惑?本文结合STM32 单片机简单讲讲用Rust写单片机程序。
1、Rust特点Rust编程语言应用很广泛,单片机只是其中的一个。Rust 的核心特点:内存安全并发安全零成本抽象现代工具链模式匹配与错误处理无运行时(No Runtime)
[/ol]
Rust 与 C 的主要区别:
utkb5q4lrb56407742220.png
2、环境搭建安装 Rust 工具链,使用 rustup 安装 Rust:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
添加 ARM 交叉编译目标,根据 STM32 的 Cortex-M 内核版本选择目标(例如 Cortex-M3 对应 thumbv7m-none-eabi):rustup target add thumbv7m-none-eabi # 示例:STM32F103项目模板工具,使用 cargo-generate 快速创建项目:cargo install cargo-generate3、创建项目初始化项目cargo new stm32-rust-demo --bincd stm32-rust-demo配置 Cargo.toml,添加依赖(以 STM32F1xx 为例):[dependencies]cortex-m = "0.7.6"cortex-m-rt = "0.7.3"stm32f1xx-hal = { version = "0.10.0", features = ["rt", "stm32f103"] } # 根据型号调整panic-halt = "0.2.0"添加内存布局文件 memory.x,在项目根目录创建 memory.x,内容示例(STM32F103C8T6):MEMORY { FLASH : ORIGIN = 0x08000000, LENGTH = 64K RAM : ORIGIN = 0x20000000, LENGTH = 20K}4、 点灯示例代码点灯是初学者必备的技能,也是最基础的一项技能。#![no_std]#![no_main]
use panic_halt as _;use cortex_m_rt::entry;use stm32f1xx_hal::{pac, prelude::*, timer::Timer};
#[entry]fn main() -> ! { let cp = cortex_m::Peripherals::take().unwrap(); let dp = pac::Peripherals::take().unwrap();
// 初始化时钟和 GPIO let mut rcc = dp.RCC.constrain(); let mut flash = dp.FLASH.constrain(); let clocks = rcc.cfgr.freeze(&mut flash.acr);
// 配置 GPIO 引脚(假设 LED 在 PC13) let mut gpioc = dp.GPIOC.split(&mut rcc.apb2); let mut led = gpioc.pc13.into_push_pull_output(&mut gpioc.crh);
// 定时器延时 let mut timer = Timer::syst(cp.SYST, &clocks).start_count_down(1.hz());
loop { led.set_high(); timer.wait().ok(); led.set_low(); timer.wait().ok(); }}5、编译、下载、调试以上操作如果没问题,就能正常的编译、下载和调试了。可以借助官方的一些工具编译:cargo build --target thumbv7m-none-eabi --release然后就是下载和调试了。
以上就是一些基础的操作流程,看着是不是很简单?当然,有很多具体的细节省略了,还需要大家自己实践。
4tfujht3buk6407742320.jpg
MCU编码器接口差异
qbjifebluuv6407742421.jpg
嵌入式工程师会遇到哪些瓶颈?
2ultyt3v0ga6407742521.jpg
嵌入式工程师的开发利器,门槛其实很低 |
|