打印机-STM32版本 硬件部分

最终PCB EDA工程:

一、确定芯片型号

根据项目需求,梳理需要用到的功能,

  • 电量检测:ADC

  • 按键:IO input+外部中断

  • LED:IO output

  • 温度检测:ADC

  • 电机控制:IO output

  • 打印通讯:SPI

  • 打印时序:IO input&output

  • 蓝牙:UART连接透传模组

  • 日志:UART

最终得出需要的外设和功能:UART、SPI、ADC、IO、中断、定时器、RTOS

外设部分一共需要27个IO,其中特殊外设包括两个ADC,一个SPI,两个UART,一个用于蓝牙通讯,一个用于日志打印。

最终选择 STM32F103C8T6

  • 描述:CPU内核:ARM Cortex-M3 CPU最大主频:72MHz 工作电压范围:2V~3.6V 程序存储容量:128KB 程序存储器类型:FLASH RAM总容量:20KB GPIO端口数量:37 ST 32位 ARM内核 MCU芯片

二、确定外设接到哪个IO

1、查看芯片Datasheet确定

手册与设计资料:www.st.com

打开芯片手册,然后找到pin definitions页面,这里主要查看一些特殊功能的引脚,例如adc、uart、spi用的是哪些io,确定下来后,把其它的通用IO也逐一确定即可,这些通用的IO后续绘制原理图时,还可以调整。

手册与设计资料:www.st.com

打开芯片手册,然后找到pin definitions页面,这里主要查看一些特殊功能的引脚,例如adc、uart、spi用的是哪些io,确定下来后,把其它的通用IO也逐一确定即可,这些通用的IO后续绘制原理图时,还可以调整。

2、使用STM32Cubemx工具确定

2-1、安装STM32Cubemx

https://www.st.com/zh/development-tools/stm32cubemx.html

stm32cubemx安装教程(包含安装包)

2-2、打开软件,创建工程

File->New Project->stm32f103cb

2-3、设置系统时钟为外部时钟

因为我们高速时钟想使用外部8MHz的晶振,当然了,也可以使用内部时钟,对精度要求不高的话,低速时钟就不需要的,因为我们用不到RTC功能。

设置时钟为72MHz,外部晶振8MHz

2-4、设置Debug方式支持Serial Wire

后续可以使用Jlink SWD进行烧录仿真

2-5、确定对应IO

到这里,你就可以选择对应功能的引脚了,例如ADC SPI UART分别是芯片的哪个引脚,记录下来

然后剩余的常规IO,就可以比较随意,大部分引脚都是可以复用的,直接在右边的芯片上点击选择即可,对应IO设置为输出输入,这一步可以打开示例工程参考哦!!

三、绘制原理图和PCB Layout

1、外设部分原理图的绘制

2、STM32的最小系统绘制

绘制完外设后,我们看下STM32的最小系统如何绘制

  • 电源

  • 外部时钟

  • 运行模式

  • 烧录仿真接口

外设:

3、BLE透传模组

由于STM32是没有蓝牙功能的,而我们需要和手机进行通讯,这里我们使用了蓝牙透传模组,通过串口与STM32进行数据透传。

蓝牙部分我们使用串口2进行数据交互,所以需要重写串口2的处理函数

我们使用的蓝牙模组是RF Crazy/智汉的模组,主要是立创上购买方便,大家也可以根据自己需要选择其它模组。

模组的连接非常简单,只需要提供电源和地,然后串口连接STM32的串口即可通讯。

4、把芯片IO和外设连接起来

有了芯片和外设,那芯片如何控制外设或者读取外设状态呢?这里就需要把芯片IO和外设连接起来了。只需要用标签连接起来即可。

5、接下来就是PCB Layout

四、生产、焊接、快速调试

1、生产

2、焊接

  1. 准备好PCB、元器件、电烙铁、焊锡、镊子、万用表。

  2. 打开BOM表或者PCB工程,然后从电源模块开始,找到要焊接的元器件型号,逐个模块焊接,切记不要一下子焊完所有模块,否则很难定位排查问题。

  3. 每个模块焊接完成后,对照原理图、PCB工程,用万用表先检查下有没有焊接错误、短路、虚焊等情况,一个焊点一个焊点确认,确认没问题后在焊接下一个模块。

一般的焊接流程是:

  • 充电管理模块

  • 开关

  • 电源指示灯

  • 稳压3.3V (先焊接模块11,才能使用开关打开电源到稳压3.3V)

  • CH340

  • 打印头相关

  • STM32芯片

  • 升压模块

3、焊接完排查说明

焊接完成后,切记不要马上上电,先目测、用万用表检测下,有没有焊接错的地方,特别是要检查各路电源有没有短路,确保没有短路后,上电第一时间也要观察下有没有异常,有异常迅速拔掉电源。

目测没有异常后,先检测下所有的电源电压是否正常,在确定所有电源电压正常后,就可以接到电脑,烧录程序啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/831151.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++string类使用大全

目录 温馨提示:这篇文章有约两万字 什么是string类? 一. 定义和初始化string对象 1.string的构造函数的形式: 2.拷贝赋值运算符 3.assign函数 二.string对象上的操作 1.读写string对象 2.读取未知数量的string对象 3.使用getline …

windows ubuntu sed,awk,grep篇:10.awk 变量的操作符

目录 62. 变量 64. 算术操作符 65. 字符串操作符 66. 赋值操作符 67. 比较操作符 68. 正则表达式操作符 62. 变量 Awk 变量以字母开头,后续字符可以是数字、字母、或下划线。关键字不能用作 awk 变量。 不像其他编程语言, awk 变量可以直接使…

实习面试之算法准备:数学题

目录 1 技巧2 例题2.1 Nim 游戏2.2 石子游戏2.3 灯泡开关 1 技巧 稍加思考,找到规律 2 例题 2.1 Nim 游戏 你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头。 你们轮流进行自己的回合, 你作为先手 。 每一回合&#xf…

vue修饰符有哪些

Vue中常用的修饰符主要有以下几类: 事件修饰符: .stop:阻止事件的冒泡,相当于调用了event.stopPropagation()方法。 .prevent:阻止事件的默认行为,相当于调用了event.preventDefault()方法。 .capture&a…

python让input显示默认值,并且用户还可以修改

感觉是很正常的需求,但python默认没有这个功能。linux下有readline库,具体没试过,但我是WINDOWS下。看到有用kernel32.GetStdHandle(STD_INPUT_HANDLE)获取标准输入,再WriteConsoleInput模拟输入的,但WINDOWS下API调用…

SpringBoot 打包所有依赖

SpringBoot 项目打包的时候可以通过插件 spring-boot-maven-plugin 来 repackage 项目&#xff0c;使得打的包中包含所有依赖&#xff0c;可以直接运行。例如&#xff1a; <plugins><plugin><groupId>org.springframework.boot</groupId><artifact…

CMake:编译日志信息的使用(五)

1、日志调试信息 在CMake中可以用用户显示一条信息&#xff0c;该命令的名字为message&#xff1a; # 格式 # message([STATUS | WARNING | AUTHOR_WARNING | SEND_ERROR | FATAL_ERROR] "Message infomation...")(无)&#xff1a;重要信息STATUS&#xff1a;非重要…

2024五一杯数学建模B题思路代码文章教学-交通需求规划与可达率问题

交通需求规划与可达率问题 问题总结&#xff1a; 问题一&#xff1a;在一个小型交通网络中&#xff0c;给定的起点和终点之间的交通需求需分配到相应路径上。目标是最大化任意一条路段出现突发状况时的交通需求期望可达率。 问题二&#xff1a;在一个较大的交通网络中&#xff…

负债56亿,购买理财产品遭违约,操纵虚假粉丝,流量在下滑,客户数量减少,汽车之家面临大量风险(三)

本文由猛兽财经历时5个多月完成。猛兽财经将通过以下二十二个章节、8万字以上的内容来全面、深度的分析汽车之家这家公司。 由于篇幅限制&#xff0c;全文分为&#xff08;一&#xff09;到&#xff08;十&#xff09;篇发布。 本文为全文的第七章、第八章、第九章。 目录 …

【Linux—进程间通信】共享内存的原理、创建及使用

什么是共享内存 共享内存是一种计算机编程中的技术&#xff0c;它允许多个进程访问同一块内存区域&#xff0c;以此作为进程间通信&#xff08;IPC, Inter-Process Communication&#xff09;的一种方式。这种方式相对于管道、套接字等通信手段&#xff0c;具有更高的效率&…

一文入门交叉编译

前言: 在阅读本文之前&#xff0c;你哦需要了解makefile文件的编写规则&#xff0c;这里我们推荐两篇入门: Makefile 规则-CSDN博客 Makefile 快速入门-CSDN博客 编译定义 编译是指将源代码文件&#xff08;如C/C文件&#xff09;经过预处理、编译、汇编和链接等步骤&#x…

SpringBoot社区医院信息平台 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本项目旨在设计并实现一个基于Spring Boot的社区医院信息平台&#xff0c;为社区医院提供信息化管理和服务&#xff0c;包括挂号预约、医生排班、医…

如何从0深入PostgreSQL内核写一个执行器算子?

如何从0深入PostgreSQL内核写一个执行器算子&#xff1f; 大家好&#xff0c;我叫光城&#xff0c;昨天分享了一个主题&#xff1a;如何从0深入PostgreSQL内核写一个执行器算子&#xff1f;今天来总结一下&#xff0c;本篇文章的直播回放可以在b站观看&#xff0c;点击原文或者…

[PS小技能学习]抠图和切图

详情见视频教程&#xff1a;PS小技巧--抠图与切图 今天我们来学习如何使用PS对表情包合辑进行抠图和裁剪保存 1、首先&#xff0c;将图片导入&#xff0c;双击图层新建一个图层 2、然后点击工具栏的魔棒工具&#xff0c;再点击顶部菜单栏的添加到选区 3、点击图片的空白区域即…

IMU状态预积分功能实现与测试

IMU状态预积分功能实现与测试 前言实现IMU状态预积分类测试程序验证预积分与直接积分的效果结果 前言 预积分&#xff1a;是一种十分常见的IMU数据处理方法。 与传统的IMU运动学积分不同&#xff0c;预积分可以将一段时间内的IMU测量数据累积&#xff0c;建立预积分测量&#…

两院院士泌尿外科专家吴阶平教授

吴阶平&#xff08;1917-2011&#xff09;&#xff0c;男&#xff0c;江苏常州人&#xff0c;1933年天津汇文中学毕业&#xff0c;保送到北平燕京大学医预科&#xff0c;1937年毕业于北平燕京大学获理学士学位&#xff0c;1942年毕业于北平协和医学院获医学博士学位&#xff0c…

银行卡归属地查询API接口快速对接

银行卡归属地查询API接口指的是通过银行卡号查询该银行卡详细信息&#xff0c;包括银行卡名称、卡种、卡品牌、发卡行、编号以及归属地等信息&#xff0c;支持一千多家银行返回归属地信息&#xff0c;那么银行卡归属地查询API接口如何快速对接呢&#xff1f; 首先找到有做银行…

SpringBoot集成Kafka开发

4.SpringBoot集成Kafka开发 4.1 创建项目 4.2 配置文件 application.yml spring:application:name: spring-boot-01-kafka-basekafka:bootstrap-servers: 192.168.2.118:90924.3 创建生产者 package com.zzc.producer;import jakarta.annotation.Resource; import org.spri…

Thread类及常见方法

目录 1.Thread类概念 2.Thread的常见构造方法 3.Thread的几个常见属性 4.启动一个线程—start( ) 5.中断一个线程 1.使用自定义的变量来作为标志位 2.使用interrupt() 3.观察标志位是否被清除 6.等待一个线程-join() 7.获取当前线程引用 8.休眠当前线程 1.Thread类概…

GitHub Copilot 简单使用

因为公司安全原因&#xff0c;并不允许在工作中使用GitHub Copilot&#xff0c;所以&#xff0c;一直没怎么使用。最近因为有一些其它任务&#xff0c;所以&#xff0c;试用了一下&#xff0c;感觉还是很不错的。&#xff08;主要是C和Python编程&#xff09; 一&#xff1a;常…