PWM 与 I2C 本节内容仍然使用 STM32F103C8T6 作为实验板。 呼吸灯 在没有 DAC 的情况下,我们可以使用 PWM 来模拟一个 DAC,从而实现类似于呼吸灯的效果。通过改变 PWM 的占空比,我们可以控制 LED 的亮度,从而实现呼吸灯的效果。 PWM 的原理不过多介绍,具体可以参考 脈衝寬度調變 - Wikipedia 的相关…
调试与 GPIO 初步 本次测试使用 STM32F103C8T6 进行调试。 开始调试 在使用 C 开发的时候,我们通常使用 SWD 通过 GDB 调试,或者通过串口打印调试信息。Rust 通过一些类似的方法也可以进行调试。 其中,使用 probe-rs 配合 Visual Studio Code 进行调试,方式类似于在 Keil 或 IAR 中使…
环境配置 使用 Rust 进行嵌入式开发需要配置相应的开发环境。由于 Windows 系统在嵌入式开发中可能会遇到一些兼容性问题,建议使用 Linux 或 macOS 系统进行开发。如果你使用的是 Windows 系统,可以考虑使用 WSL(Windows Subsystem for Linux)来创建一个 Linux 开发环境。 本文档采取 WS…
此处使用 Raspberry Pi 400 作测试,使用官方 Raspberry Pi OS演示,基本同于 Debian 系其它 Linux。 Linux 上的 GPIO 设备 通过在 Linux 的 /dev 目录查看本机外设,可以看到以下内容。 ls -l /dev/gpiochip* crw-rw----+ 1 root gpio 254, …
Rust 智能指针 Rc<T> Rc<T> 是一种引用计数智能指针,允许在多个所有者之间共享数据。它在单线程环境中非常有用,但在多线程环境中需要使用 Arc<T>。 使用 Rc<T> 时,克隆一个 Rc 实际上是增加了引用计数,而不是复制数据。这使得它非常高效,但需要注意避免循环引用。 可以通过 Rc…
卡尔曼滤波和虚拟串口 卡尔曼滤波 卡尔曼滤波是一种递归算法,用于估计动态系统的状态。它基于线性高斯状态空间模型,通过结合测量数据和系统模型来提供最小均方误差意义下的最优状态估计。卡尔曼滤波器由两个主要步骤组成:预测和更新。 以一维平衡数据为例演示滤波过程。 一个简单的状态空间模型可以表示为: #[derive(Clone, Copy)] struc…
Rust GPUI 开发尝试 本文档记录了我在使用 Rust 语言进行图形用户界面(GUI)开发时的一些尝试和经验。由于 GPUI 目前并不成熟且未发布较稳定版本,后续改动可能很大,可能会有内容不完整或错误的地方,欢迎指正和补充。 Get Started Crates.io 引入依赖 [dependencies] gpui = "0.2.2" GP…
这是初学者学习Rust时记录的一些学习摘要和部分Cookbook过时修正内容 由于 Rust Cookbook 内容很大部分过时,所以做了许多修正和提示,以符合现代 Rust 规范。 若有纰漏,劳烦指出 Rust Candy Option<T>有is_none()实现,返回布尔值。 使用if let while let快速取指针包装值。…