IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32嵌入式Rust通讯示例 -> 正文阅读

[嵌入式]STM32嵌入式Rust通讯示例

条件

  • 安装了 Rust 工具链的电脑。我只运行 Linux,但以下可能也可以在 MacOS 上运行,甚至可能在 Windows 上运行。
  • 带有 STM32F103 微控制器的电路板。这种控制器最常见的开发板可能是“BluePills”。
  • 一个编程器,STM芯片最便宜的编程器之一是ST-Link V2 Clone,编程器本身是一个克隆,通常包含“CS32”芯片而不是 STM32。

设置

首先,让我们确保我们有一个最新的编译器和 cargo:

> rustup update

然后我们将为运行 thumbv7m-none-eabi ARM 内核的 STM32F1 安装交叉工具链:

> rustup target install thumbv7m-none-eabi

目前,我们使用货物闪存对微控制器进行编程。我们可以通过 cargo 轻松地安装这个工具:

> cargo install cargo-flash

最后我们在我们选择的目录中创建一个新的 Rust 项目

> cargo init rusty-blink

在我们编写任何代码之前,我们配置项目,以便它默认为我们的 thumbv7m-none-eabi 目标编译并使用正确的链接器脚本(稍后会详细介绍)。我们通过在我们的项目根目录中创建一个文件 .cargo/config 来做到这一点。

# .cargo/config
[build]
# Always compile for the instruction set of the STM32F1
target = "thumbv7m-none-eabi"

# use the Tlink.x scrip from the cortex-m-rt crate
rustflags = [ "-C", "link-arg=-Tlink.x"]

接下来我们需要的是链接器脚本,它告诉链接器芯片的内存布局。它必须位于项目根目录中,称为 memory.x。对于 STM32F103C8,如下所示:

准备好了,让我们开始 Cargo。

闪烁

当然,您需要一个 Cargo.toml 文件来配置您的项目。您的项目文件夹中已经存在一个,但我们需要添加一些依赖项和配置。

# Cargo.toml
[package]
edition = "2018"
name = "blinky-rust"
version = "0.1.0"

[profile.release]
opt-level = 'z' # turn on maximum optimizations. We only have 64kB
lto = true      # Link-time-optimizations for further size reduction

[dependencies]
cortex-m = "^0.6.3"      # Access to the generic ARM peripherals
cortex-m-rt = "^0.6.12"  # Startup code for the ARM Core
embedded-hal = "^0.2.4"  # Access to generic embedded functions (`set_high`)
panic-halt = "^0.2.0"    # Panic handler

# Access to the stm32f103 HAL.
[dependencies.stm32f1xx-hal]
# Bluepill contains a 64kB flash variant which is called "medium density"
features = ["stm32f103", "rt", "medium"]
version = "^0.6.1"

最后:这是一个简单的闪烁程序!不要害怕,因为我添加了解释性注释,它看起来才那么长。


use cortex_m_rt::entry; // The runtime
use embedded_hal::digital::v2::OutputPin; // the `set_high/low`function
use stm32f1xx_hal::{delay::Delay, pac, prelude::*}; // STM32F1 specific functions
#[allow(unused_imports)]
use panic_halt; // When a panic occurs, stop the microcontroller

#[entry]
fn main() -> ! {
  
    let dp = pac::Peripherals::take().unwrap();
    let cp = cortex_m::Peripherals::take().unwrap();

 
    let mut rcc = dp.RCC.constrain();
  
  
    let clocks = rcc.cfgr.sysclk(8.mhz()).freeze(&mut flash.acr);
    
    let mut delay = Delay::new(cp.SYST, clocks);

   
    loop {
        led.set_high().ok();
        delay.delay_ms(1_000_u16);
        led.set_low().ok();
        delay.delay_ms(1_000_u16);
    }
}

编译后,

> cargo build --release
   Compiling semver-parser v0.7.0
   Compiling typenum v1.12.0
   [...]
   Compiling cortex-m-rt-macros v0.1.8
   Compiling stm32f1xx-hal v0.6.1
   Compiling blinky-rust v0.1.0 (/home/xxx/xxx/Rust/embedded/rusty-blink)
    Finished release [optimized] target(s) in 34.63s

对于 blink 示例,您可以省略 --release,但是当您编译一个更复杂的程序时,您将很快耗尽设备内存而没有启用优化。

我生成的程序占用 864 字节的内存(2,8kB 没有 LTO)。 要检查这一点,您必须将编译器输出(elf 文件)转换为十六进制。例如,您可以使用 arm-none-eabi-objcopy -O binary target/thumbv7m-none-eabi/release/blinky-rust blinky-rust.bin,然后使用 ls。

现在您已准备好使用 cargo flash 来刷新控制器。它应该会自动检测您的 ST-Link 并使用它来对微控制器进行编程。您只需指定目标芯片(stm32f103C8)。

您现在应该看到闪烁的板载 LED!

通过 i2c 从 BME280 读取数据 | 模数转换接口传输测试 | 模数转换温度读取 | CAN总线通信 | 定时闪烁 | 动态控制GPIO | PWM控制 | 测试正交编码器接口 | 串行接口 | SPI数据传输 | 定时中断 | USB串口通信

源代码

详情参阅 - 亚图跨际

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:53:52  更:2022-05-09 12:54:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 0:56:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码