文章目录
相信很多初学者都是通过购买和使用别人的开发板进行学习。如果能自己动手制作一块开发板,不仅成就感满满,还能学到非常多的知识!水平有限,如有错漏之处,敬请指正。
一般工程包括原理图和PCB制版文件。
原理图只关注元器件之间的电气连接,也就是元器件之间该如何连接电路线。所以,原理图的绘制只是将元器件的管脚连接起来即可。剩下的实际电路板制作交给PCB绘制。
PCB文件决定了实际电路板的形状如何、元器件如何摆放、元器件之间的连接线如何走线等等,而元器件之间的连线是根据原理图生成的。
元器件封装是指元器件的形状、大小、管脚间距等等信息。注意,**相同的元器件可能有不同的封装类型!**如下图:相同阻值的电阻有不同封装,其实际大小不相同;一种芯片可以有不同形状的封装,但功能完全相同。

新建好工程以后,即可在原理图上放置元器件。如下:

一般为了方便使用,板子上都有带有一个USB接口。但USB供电电压一般为5V,而STM32所需电源为3.3V。所以要用到线性稳压器,将供电电压从5V降到3.3V。最多使用的稳压器芯片是AMS1117,但ME6211C的封装更小,所以选择ME6211C33M5G作为稳压器,典型应用电路如下:

于是就依葫芦画瓢,把USB插座和ME6211C连接上。另外STM32也有USB外设,但因为较少用到,所以为了简化电路,USB的D+、D-管脚就不进行连接了,有需要的可以进一步自行了解。电源和地之间的电容主要作用是滤除噪声和交流成分、抗窄尖脉冲,使其接近理想电源,特别是芯片的模拟电源部分。

由于stm32内置的振荡器的精确度不高,使用外部晶振可以提供更精确的时钟。外部晶体振荡器分为两个:8MHz和32.768kHz。8MHz的晶体振荡器为高速时钟,为CPU提供准确的时钟频率;32.768kHz刚好是2的15次方,经过2的15次方分频后产生1秒的方波脉冲,用于计时。以下为官方手册提供的典型电路,电容CL1和CL2典型值是5-25pF和5-15pF。


以下为实际的原理图部分

STM32F103一共有三种启动模式,如下图:

通过排针和跳线帽选择BOOT0和BOOT1的电平,决定启动方式;当然,也可直接将BOOT0通过串联一个电阻接地,默认从Flash启动,也可满足一般需要。

复位电路参照的是官方文档,电容作用是使复位引脚在上电后仍然保持一段时间的低电平,进行上电后的复位。
建议使用JTAG的SWD模式下载,相较于使用USB转串口的ISP下载方式方便很多(使用此方式要设置BOOT模式,上文有介绍)。

按照芯片的引脚位置合理地引出到开发板的两侧排针,如下:

放置两个LED,用于电源指示和IO口的指示。


把画好的原理图转为PCB板图。


将元器件摆放到板子范围内,摆放位置尽量合理、美观。大致布局如下,稍后走线时可能需要稍微调整
一下。

这里说几个注意的点:
下图仅为了展示效果,走线并不是很好。

铺铜的一大作用是降低地线阻抗,普遍认为对于全由数字器件组成的电路应该大面积铺地。


3D预览一下效果


运行一下DRC检查,如果没问题就完成了PCB的绘制,即可把文件提交给PCB厂家。
如果你喜欢我的文章,欢迎关注下方公众号,在公众号内回复“交流群”,进群一起讨论分享!

Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
假设我有以下类(class):classPersondefinitialize(name,age)@name=name@age=ageenddefget_agereturn@ageendend我有一组Person对象。是否有一种简洁的、类似于Ruby的方法来获取最小(或最大)年龄的人?如何根据它对它们进行排序? 最佳答案 这样做会:people_array.min_by(&:get_age)people_array.max_by(&:get_age)people_array.sort_by(&:get_age)
LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L
看来我正在回顾SO帖子中采取的步骤:Capybara,PoltergeistandPhantomjsandgivinganemptyresponseinbody.(如果你愿意,可以将其标记为重复,但我包含了一个最小的独立测试用例和版本号。)问题我做错了什么吗?我可以运行另一个可能有助于隔离问题的最小测试吗?文件:pgtest.rbrequire'rubygems'require'capybara'require'capybara/dsl'require'capybara/poltergeist'modulePGTestincludeCapybara::DSLextendselfdeft
目录一、ESP32简单介绍二、ESP32Wi-Fi模块介绍三、ESP32Wi-Fi编程模型四、ESP32Wi-Fi事件处理流程 五、ESP32Wi-Fi开发环境六、ESP32Wi-Fi具体代码七、ESP32Wi-Fi代码解读6.1主程序app_main7.2自定义代码wifi_init_sta()八、ESP32Wi-Fi连接验证8.1测试方法8.2服务器模拟工具sscom58.3测试代码8.4测试结果前言为了开发一款亚马逊物联网产品,开始入手ESP32模块。为了能够记录自己的学习过程,特记录如下操作过程。一、ESP32简单介绍ESP32是一套Wi-Fi(2.4GHz)和蓝牙(4.2)双模解决方
有道无术,术尚可求,有术无道,止于术。本系列SpringBoot版本3.0.4本系列SpringSecurity版本6.0.2本系列SpringAuthorizationServer版本1.0.2源码地址:https://gitee.com/pearl-organization/study-spring-security-demo文章目录前言1.OAuth2AuthorizationServerMetadataEndpointFilter2.OAuth2AuthorizationEndpointFilter3.OidcProviderConfigurationEndpointFilter4.N
你好,Stackoverflow的人们,我经营一个网站,为用户寻找最便宜的书籍购买地点。这对于单本书来说很容易,但对于多本书来说,有时在一家商店购买一本书而在另一家商店购买另一本书会更便宜。目前我找到了销售用户列表中所有书籍的最便宜的商店,但我想要一个更智能的系统。这里有更多信息:一本书的价格对于一家商店来说是不变的。运费可能会有所不同,具体取决于书籍的数量或书籍的总值(value)。每个商店对象都可以获取一组书籍并返回运费。通常,并非每家书店都出售每一本书。不确定在这里链接到我的站点是否很酷,但它列在我的用户配置文件中。我希望能够找到最便宜的商店和书籍组合。我担心这需要一种蛮力方法-
在我的代码中,我需要使用各种算法(包括CRC32)对文件进行哈希处理。因为我还在Digest系列中使用其他加密哈希函数,所以我认为为它们维护一个一致的接口(interface)会很好。为了记录,我确实找到了digest-crc,一颗完全符合我要求的gem。问题是,Zlib是标准库的一部分,并且有一个我想重用的CRC32工作实现。此外,它是用C编写的,因此它应该提供与digest-crc相关的卓越性能,后者是纯ruby实现。实现Digest::CRC32一开始看起来非常简单:%w(digestzlib).each{|f|requiref}classDigest::CRC32一切正常:
我正在尝试在我的机器上安装win32-apigem,但在构建native扩展时我遇到了一些问题:$geminstallwin32-api--no-ri--rdocTemporarilyenhancingPATHtoincludeDevKit...Buildingnativeextensions.Thiscouldtakeawhile...C:\Programs\dev_kit\bin\make.exe:***Couldn'treservespaceforcygwin'sheap,Win32error0ERROR:Errorinstallingwin32-api:ERROR:Failed