rust操作stm32f1ct86
rust操作单片机系列
第一章操作28BYJ48步进电机
文章目录
- rust操作单片机系列
- 前言
- 第一步创建项目
- 环境安装
- 首先安装core 库(标准库剪裁版)
- 安装打包工具
- 安装二进制工具
- 安装调试工具
- 环境变量配置
- 搭建框架
- 各个文件里的内容
- builder.rs
- Cargo.toml
- .cargo->config.toml
- main.rs
- 二、接线教程
- 1.stlink接stm32
- ST_LINK接线
- stm32接线图
- 2.stm32与电机驱动板(ULN2003)
- stm32接线图
- 电机驱动板接线
- 3.电机驱动板与电机
- 4.电机驱动板与供电板接线
- 面包板
- 驱动板
- 运行效果
前言
次文章就是一个简单的示例,初学者可以跟着步骤一步一步做。
配置说明:
系统: ubuntu
板子:STM32F103C8T6
电机驱动板:ULN2003
烧录工具:ST_LINK
步进电机:28BYJ48
杜邦线:母对母:4根;公对母6根
面包板:1块
面包板供电板:1块
第一步创建项目
环境安装
首先安装core 库(标准库剪裁版)
执行以下命令
rustup target add thumbv7m-none-eabi

安装打包工具
执行以下命令
cargo install cargo-binstall

安装二进制工具
执行以下命令
cargo install cargo-binutils

安装调试工具
执行以下命令
cargo binstall probe-rs-tools

环境变量配置
由于我这里是用的ubuntu的系统用ST-Link的时候需要配置udev 规则文件
在 /etc/udev/rules.d 文件夹里创建 probe-rs.rules文件

在文件中添加以下内容
# ST-LINK
SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="3748", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="374b", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="374a", MODE="0666"# CMSIS-DAP
SUBSYSTEM=="usb", ATTR{idVendor}=="c251", ATTR{idProduct}=="f001", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}==="0d28", ATTR{idProduct}=="0204", MODE="0666"# J-Link
SUBSYSTEM=="usb", ATTR{idVendor}=="1366", ATTR{idProduct}=="0101", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="1366", ATTR{idProduct}=="0102", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="1366", ATTR{idProduct}=="0103", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="1366", ATTR{idProduct}=="0104", MODE="0666"
SUBSYSTEM=="usb", ATTR{idVendor}=="1366", ATTR{idProduct}=="0105", MODE="0666"# FTDI
SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="6010", MODE="0666"

添加完成之后重新加载规则
sudo udevadm control --reload-rules
sudo udevadm trigger
当刷新之后,stm32板子蓝色信号灯闪动就会停止,这就说明计算机已经连接上板子了。
搭建框架
这里可以参照github的一个示例项目创建,后续我也会把我建好的模板放在上面供大家下载参考
项目结构如下图

首先,命令行执行cargo new命令创建项目。
创建项目之后需要创建一个文件build.rs
之后再创建一个文件夹.cargo ,在这个文件夹里再创建一个config.toml文件
各个文件里的内容
builder.rs
fn main() {println!("cargo:rustc-link-arg-bins=--nmagic");println!("cargo:rustc-link-arg-bins=-Tlink.x");println!("cargo:rustc-link-arg-bins=-Tdefmt.x");
}
Cargo.toml
[package]
name = "moter28BYJ48"
version = "0.1.0"
edition = "2024"
[[bin]]
name = "moter28BYJ48"
test=false
banch=false
[dependencies]
# Change stm32f103c8 to your chip name, if necessary.
embassy-stm32 = { version = "0.4.0", features = [ "defmt", "stm32f103c8", "unstable-pac", "memory-x", "time-driver-any" ] }
embassy-sync = { version = "0.7.2", features = ["defmt"] }
embassy-executor = { version = "0.9.0", features = ["arch-cortex-m", "executor-thread", "defmt"] }
embassy-time = { version = "0.5.0", features = ["defmt", "defmt-timestamp-uptime", "tick-hz-32_768"] }
embassy-usb = { version = "0.5.1", features = ["defmt"] }
embassy-futures = { version = "0.1.2"}defmt = "1.0.1"
defmt-rtt = "1.0.0"cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
cortex-m-rt = "0.7.0"
embedded-hal = "0.2.6"
panic-probe = { version = "1.0.0", features = ["print-defmt"] }
heapless = { version = "0.8", default-features = false }
nb = "1.0.0"
static_cell = "2.0.0"[profile.dev]
opt-level = "s"[profile.release]
debug = 2[package.metadata.embassy]
build = [{ target = "thumbv7m-none-eabi", artifact-dir = "out/examples/stm32f1" }
]
.cargo->config.toml
[target.'cfg(all(target_arch = "arm", target_os = "none"))']
# replace STM32F103C8 with your chip as listed in `probe-rs chip list`
runner = "probe-rs run --chip STM32F103C8"[build]
target = "thumbv7m-none-eabi"[env]
DEFMT_LOG = "trace"
main.rs
#![no_std]
#![no_main]use defmt::*;
use embassy_executor::Spawner;
use embassy_stm32::gpio::{Level, Output, Speed};
use embassy_time::Timer;
use {defmt_rtt as _, panic_probe as _};#[embassy_executor::main]
async fn main(_spawner: Spawner) {let p = embassy_stm32::init(Default::default());info!("Hello World!");let mut led = Output::new(p.PC13, Level::High, Speed::Low);loop {info!("high");led.set_high();Timer::after_millis(300).await;info!("low");led.set_low();Timer::after_millis(300).await;}
}
二、接线教程
下面我会把接线图展示出来,可以根据杜邦线的颜色查看怎么接线
1.stlink接stm32
接线描述如下
ST_LINK上的swclk接stm32上的swclk
ST_LINK上的swdio接stm32上的swio
ST_LINK上的gdn接stm32上的gdn
ST_LINK上的3.3V接stm32上的3V3
ST_LINK接线
如下图

stm32接线图

2.stm32与电机驱动板(ULN2003)
接线描述如下
stm32板A0接驱动板IN1
stm32板A1接驱动板IN2
stm32板A2接驱动板IN3
stm32板A3接驱动板IN4
stm32接线图
如下图

电机驱动板接线

3.电机驱动板与电机
接线如下图

4.电机驱动板与供电板接线
这里就直接正极接正极,负极接入负极就可以了
这里需要注意把供电板调到5V。
面包板

驱动板

运行效果

运行效果视频在绑定的资源里面,完整代码可直接下载,下载请点击:原码下载传送门
