当前位置: 首页 > news >正文

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。

面包板

在这里插入图片描述

驱动板

在这里插入图片描述


运行效果

在这里插入图片描述

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

http://www.dtcms.com/a/588824.html

相关文章:

  • 深入理解大语言模型(6)-Prompt 注入 Prompt 注入
  • Data Mining Tasks|数据挖掘任务
  • rspack为什么能提速?底层逻辑是什么?
  • 深度学习十种食物分类系统1:数据集说明(含下载链接)
  • 应用层协议HTTP(1)
  • mongodb总结
  • seo网站排名厂商定制莱州网站制作
  • web网页开发,在线%聚类,微博,舆情%系统,基于python,pycharm,django,nlp,kmeans,mysql
  • 大型语言模型推理能力评估——李宏毅2025大模型课程第9讲内容
  • WPS国际版18.22 | 集Word,PDF,Sheet,PowerPoint于一体的多功能免费办公套件
  • RHCE DNS实验作业
  • 深圳网站备案wordpress 界面 阴影
  • 【STL源码剖析】从源码看 heap:元素的 “下沉” 与 “上浮”
  • 【LLM】LLaMA-Factory 训练模型入门指南
  • DTrac Rotor
  • 06 Activiti 与 Spring Boot 整合
  • 分布式专题——49 SpringBoot整合ElasticSearch8.x实战
  • 18_FastMCP 2.x 中文文档之FastMCP服务端高级功能:后端存储详解
  • 基于Spring Boot的社团服务系统的设计与实现
  • Spring Boot配置文件加载顺序详解(含Nacos配置中心机制)
  • 基于React+Flask前后端分离的文件搜索系统
  • K8s 集群部署中间件 - yaml 版本(二)
  • zmaiFy音频转录介绍
  • 学校资源网站建设目标关于做电商网站导流项目
  • 【论文阅读与项目复现】Hypothesis Generation with Large Language Models
  • win7下asp.net网站发布软件开发文档编写
  • socket编程——使用UDP实现的一个回显功能
  • 侠客行・iOS 26 Liquid Glass TabBar 破阵记
  • G882磁力仪方向调整
  • 站长友情链接网上卖货的平台有哪些