STM32 USB_SPI_FLASH 简易U盘设计

2023-11-07

这是大三下学期EDA实训的内容,设计制作了一个简易的U盘。
主要涉及STM32单片机、W25Q128闪存芯片、电路板绘制、文件系统移植等内容,发布出来供大家参考。
仅供学习交流使用,实验步骤仅供参考
转载请注明原文链接:https://blog.csdn.net/ZHJ123CSDN/article/details/107441980
Copyright © 2020 ZhangHoujin

1 实验目的

在日常生活中,U盘作为存储介质非常常见。U盘是一种使用USB接口连接计算机,并通过闪存进行数据存储的小型便携存储设备。本次实验将使用STM32单片机,配合W25Q128闪存芯片,绘制电路板并移植文件系统,制作一个简易的U盘存储介质。制作的电路板实物如下图1.1所示。
图1.1 电路板实物图

2 实验原理

2.1 U盘设计原理

本次实验以STM32F103作为主控芯片,以W25Q128作为Flash闪存芯片。主控芯片与闪存之间通过SPI方式进行数据通信。向芯片中移植FAT文件系统,可以将数据以文件的形式进行存储,实现简易的U盘功能。

2.1.1 SPI通信方式

SPI协议是由摩托罗拉公司提出的通讯协议,即串行外围设备接口,是一种高速全双工的通信总线。它的通讯速率较高,被广泛地使用在ADC、LCD等设备与MCU间通信的场合。SPI协议使用三条总线及片选线实现通信,三条总线分别为SCK、MOSI、MISO,片选线为CS ,它们的作用介绍如下。

  • CS片选线
    SPI协议使用片选信号线来寻址。当主机要选择从设备时,把该从设备的片选信号线设置为低电平,该从设备即被选中。接着主机开始与被选中的从设备进行SPI通讯。
  • SCK时钟信号线
    时钟信号线用于通讯数据同步。它由通讯主机产生,决定了通讯的速率。不同的设备支持的最高时钟频率不同,两个设备之间通讯时,通讯速率受限于低速设备。
  • MOSI主设备输出/从设备输入线
    主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机。
  • MISO主设备输入/从设备输出线
    主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。

2.1.2 文件系统

使用SPI通信方式可以很方便地在Flash芯片上进行数据读写,但是像这样的直接存储数据会带来很大不便。如难以记录有效数据的位置,难以确定存储介质的剩余空间,以及难以确定以何种格式来解读数据等等。
更为高效的存储方式被称为文件系统,它是为了存储和管理数据,而在存储介质中建立的一种组织结构,这些结构包括操作系统引导区、目录和文件。常见的Windows系统下的文件系统格式包括FAT32、NTFS、exFAT。在使用文件系统前,要先对存储介质进行格式化。格式化要先擦除原来内容,在存储介质上新建一个文件分配表和目录,文件系统由此可以记录数据存放的物理地址,剩余空间等信息。
由于文件系统的存在,使我们在存取数据时不再是简单地向某物理地址直接读写,而是要遵循它的读写格式。本次实验通过在芯片中移植FAT文件系统,可以实现对文件的高效存储。

2.2 硬件框架

2.2.1 闪存芯片

本次实验的Flash闪存芯片选用W25Q128JVSIQTR芯片,其容量为16MB。芯片内部分为256个块,每个块大小为64K字节;每个块又分为16个扇区,每个扇区4K字节。W25Q128 的最少擦除单位为一个扇区,也就是每次必须擦除 4K 个字节。其硬件连接如下图2.1所示。
图2.1 闪存芯片
如上图所示,W25Q128封装的CS引脚是芯片的片选信号线,片选线低电平有效,所以外接了一个上拉电阻将电平拉高;DO引脚是芯片的MIOS主机输入线,主控芯片从这条线上读取数据;WP是写保护引脚,外接电源表示关闭写保护,开启数据写入使能;HOLD引脚是芯片的数据暂停引脚,低电平时会暂停数据传输,因此外接了一个高电平电源;CLK引脚是芯片的时钟信号线,用来与主控芯片保持通信频率;DI引脚是芯片的MOSI从设备输入线,主设备在该线将数据输出,从设备在该线接收数据。

2.2.2 稳压芯片

电脑的USB接口一般输出电压是5V,而芯片工作电压在3.3V左右,因此需要使用稳压芯片将5V的输入电压转换为3.3V的输出电压。本次实验中使用的稳压芯片是XC6206P332MR,如下图所示。
图2.2 稳压芯片

2.3 PCB生产工序

PCB生产的具体工作流程为:开料→钻孔→沉铜→图形转移→图形电镀→退膜→蚀刻→绿油阻焊层→添加丝印层→镀金手指→镀锡层→成型→测试→终检→包装寄送。

  1. 开料是指根据工程资料的要求,在符合要求的大张板材上裁切成符合客户要求的小块生产板料。流程为:大板料→按要求切板→锔板→啤圆角和磨边→开料完成。
  2. 钻孔是指根据客户要求,在符合要求尺寸的板料上钻出所需的孔径。流程为:叠板销钉→上板→钻孔→下板→检查和修理。
  3. 沉铜是利用化学方法在绝缘孔壁上沉积上一层薄铜。流程为:粗磨→挂板→铜层沉积→下板→浸1%稀H2SO4→加厚铜。
  4. 图形转移是将菲林上的图像转移到料板上。图形转移分为蓝油和干膜,蓝油流程为:磨板→印第一面→烘干→印第二面→烘干→爆光→冲影→检查;干膜流程为:磨板→压膜→静置→对位→曝光→静置→冲影→检查。
  5. 图形电镀是在线路图形裸露的铜皮或孔壁上电镀,以达到要求厚度的铜层与要求厚度的金镍或锡层。工艺流程为:上板→除油→微蚀→水洗→酸洗→镀铜→水洗→浸酸→镀锡→水洗→下板。
  6. 退膜是指用NaOH溶液退去抗电镀覆盖膜层,使非线路铜层裸露出来。水膜流程为:插架→浸碱→冲洗→擦洗→过机;干膜流程为:放板→过机。
  7. 蚀刻是利用化学反应法将非线路部位的铜层腐蚀去除。绿油是将绿油菲林的图形转移到板上,起到保护线路和阻止焊接零件时线路上锡的作用。流程为:磨板→印感光绿油→锔板→曝光→冲影;磨板→印第一面→烘板→印第二面→烘板。
  8. 字符是提供的一种便于辨认的标记。工艺流程为:绿油终锔→冷却静置→调网→印字符→后锔。
  9. 镀金手指是在金手指上镀上一层要求厚度的镍金层,使之更具有硬度和耐磨性。流程为:上板→除油→水洗两次→微蚀→水洗两次→酸洗→镀铜→水洗→镀镍→水洗→镀金。
  10. 喷锡是在未覆盖阻焊油的裸露铜面上喷上一层铅锡,以保护铜面不蚀氧化,以保证具有良好的焊接性能。流程为:微蚀→风干→预热→松香涂覆→焊锡涂覆→热风平整→风冷→洗涤风干。
  11. 成型是指通过模具冲压或数控锣机锣出客户所需要的形状。数据锣机板与啤板的精确度较高,手锣其次,手切板最低具只能做一些简单的外形。
  12. 通过电子检查可以检测到目视不易发现到的开路,短路等影响功能性的缺陷。流程为:上模→放板→测试→合格→FQC目检→不合格→修理→返测试→OK→REJ→报废。通过目检板件外观缺陷,对轻微缺陷进行修理,避免有问题及缺陷板件流出。工作流程为:来料→查看资料→目检→合格→FQA抽查→合格→包装→不合格→处理→检查OK。

2.4 PCB板层含义及功能

  • (1)信号层(Signal Layers)
    信号层被用于放置连接数字或模拟信号的铜膜走线。Altium Designer电路板可以有32个信号层,其中Top是顶层,Mid1~30是中间层,Bottom是底层。习惯上Top层又称为元件层,Bottom层又称为焊接层。
  • (2)阻焊层(Soldermask Layer)
    阻焊层是在铜层上面的一层,这一层让PCB看起来是绿色的。阻焊层覆盖了铜层上面的走线,防止PCB上的走线和其他的金属、焊锡或者其它的导电物体接触导致短路。阻焊层的存在防止了焊锡搭桥。我们可以看到阻焊覆盖了PCB的大部分,但露出了银色的孔环以及焊盘,这样可以方便焊接。
  • (3)锡膏防护层(Pastemask layer)
    锡膏防护层和阻焊层的作用相似,不同的是在机器焊接时所对应的贴片式元件的焊盘。如果板全部放置的是通孔元件,这一层就不用输出Gerber文件了。在将贴片元件贴到PCB板上以前,必须在每一个贴片焊盘上先涂上锡膏。
  • (4)丝印层(Silkscreen Layer)
    白色的字符是丝印层。在PCB的丝印层上印有字母、数字以及符号,这样可以方便组装以及指导大家更好地理解板卡的设计。设计时经常会用丝印层的符号标识某些管脚或者LED的功能等。
  • (5)机械层和禁止布线层(Mechanical Layer / Keep-Out Layer)
    机械层是定义整个PCB板的外观的,平时所说的机械层就是指整个PCB板的外形结构。禁止布线层定义了具有电气特性的铜线边界,也就是说只要先定义了禁止布线层后,所布的具有电气特性的线不可以超出禁止布线层的边界。
  • (6)钻孔层(Drill layer)
    钻孔层提供电路板制造过程中的钻孔信息,如焊盘过孔就需要钻孔。一般文件会提供了钻孔指示图(Drillgride)和钻孔图(Drill drawing)这两个钻孔层。

3 实验过程

3.1 绘制原理图

3.1.1 下载封装库

由于需要向工厂投板,所以直接使用工厂的封装库会方便些。直接去嘉立创的码云仓库里查找封装文件即可。
图3.1 元件封装库
选择第一个 嘉立创SMT/JLCSMT_LIB 可贴片元器件基础库,下载ZIP压缩包。
图3.2 封装库下载
将下载的ZIP文件解压,即可获得嘉立创的SMT贴片封装库。

3.1.2 新建工程

在Altium Designer软件中,新建一个PCB工程。工程模板选择默认,工程名称设置为 USB_SPI_Flash
图3.3 创建工程
为工程添加一个原理图文件。
图3.4 添加原理图
将该原理图命名为 USB_SPI_Flash.SchDoc 并保存。
图3.5 原理图命名

3.1.3 加载封装库

在软件设置界面打开“已安装的元件库”界面,选择从文件安装封装库。图3.6 添加封装库
将之前下载的嘉立创封装导入到软件中。选中电容、晶振、MCU、LDO和电阻的封装,点击打开即可。或者直接选择 Miscellaneous Devices LC.IntLib 文件。以 IntLib 作为扩展名的文件是AD中的集成封装库,其中包含了原理图库和PCB封装库,所以只引入这一个库文件也可以。
图3.7 选择封装库
导入完成后的元件库如下图3.8所示。
图3.8 封装库列表

3.1.4 模块绘制

接下来分别绘制各个模块的原理图。我直接使用了老师给的原理图,将该原理图导入到工程中,如下图所示。
图3.9 原理图
接下来尝试使用金手指的USB接口,需要将原有的USB插头封装替换成自己绘制的金手指封装。首先添加一个PCB封装库,用于绘制金手指的原理图和PCB封装,如下图3.10所示。
图3.10 添加原理图库文件
首先绘制原理图,原理图封装直接使用了老师提供的图。
图3.11 USB原理图库
四脚排针的原理图也使用了老师给的原理图。
图3.12 排针原理图库
接下来绘制PCB封装,首先添加一个PCB库文件。
图3.13 添加PCB库文件
将四脚排针的封装添加进去,如下图3.14所示。
图3.14 排针PCB封装
本次我想尝试使用金手指的封装,所以需要自己绘制一下USB接口的封装。原理图就直接使用老师给的原理图,但封装需要自己绘制,如下图3.15所示。
图3.15 金手指封装
PCB需要较严格的尺寸要求,我是用卡尺测量的实际USB接口尺寸,根据实际的金手指画出来的。另外需要注意PCB和原理图的引脚需要一一对应。搜集USB接口的引脚图,可以找到USB每个脚位所对应的实际接口。如下图3.16所示。
图3.16 USB接口定义
根据上图2.16所示的引脚脚位,可以设置PCB封装中的脚位与原理图对应。
PCB绘制完成后,需要将原理图和PCB联系起来。在原理图页面点击 Add FootPrint 添加封装。
图3.17 关联原理图和封装
添加完成过后,两个原件的封装就绘制完成了。将原理图中的这两个原件替换成自己绘制的原件就可以了。

3.1.5 原件编号

使用软件工具将所有原件全部重新编号。在菜单栏的工具->注释选项中,找到注释原理图选项。
图3.18 注释原理图
在该界面,首先将所有已注释的内容清空。
图3.19 重置注释
选择注释顺序为 Across Then Down ,依次更新和执行更改。验证更改并执行,将原件全部重新编号。
图3.20 重新编号

3.1.6 编译工程

原理图绘制完成后,对原理图进行编译。
图3.21 编译工程
编译结果如下。
图3.22 编译结果
编译警告说 P7-2 引脚没有驱动源,双击看一下具体位置。
图3.23 警告位置
是因为芯片设计时,此引脚需要有输入的驱动信号,而现在绘制的原理图直接接地了,没有驱动信号所以会产生警告。该警告可以忽略。

3.2 绘制PCB

3.2.1 绘制板子形状

原理图绘制完成后就可以绘制PCB了。新建一个PCB文件,将其命名为 USB_SPI_Flash.PcbDoc
图3.24 新建PCB文件
图3.25 PCB初始样式
按照实验要求,重新定义PCB的板子形状。可以在菜单栏的编辑选项中,找到设置原点选项,将原点重新设置一下。
图3.26 设置原点
切换到机械层,绘制矩形的边框。首先绘制一条直线,然后双击设置它的长度。
图3.27 设置线条长度
绘制一个48mm × 25mm的矩形边框,如下图3.28所示。
图3.28 矩形边框
将该矩形框选中,重新定义板子形状。
图3.29 定义板子形状
完成之后的板子形状如下图3.30所示。
图3.30 板子形状

3.2.2 导入原件

在原理图界面点击设计->更新PCB文件,将原件导入到PCB中。
图3.31 导入元件
点击验证更改可以对原件的封装进行验证。
图3.32 导入异常
如果此时出现了上图的报错信息,说明原件的PCB封装没有找到。这些封装是嘉立创提供的封装,所以只需要将对应的封装文件导入进来就可以了。
导入完成后,依次点击验证更改和执行更改,原件就导入到PCB文件中了。
图3.33 导入成功
导入到PCB文件中的效果如下图所示。
图3.34 元件初始样式

3.2.3 原件排布

接下来将原件依次排布在PCB板子上。
图3.35元件排布
可以根据要求重新绘制一下板子形状,如下图3.36所示。
图3.36 边框调整

3.2.4 原件布线

在原件位置固定后,可以开始进行布线。首先设置布线规则。
图3.37 设置边界规则
图3.38 设置线宽规则
布线之前可以使用对齐工具,将相同行列的原件对齐。
图3.39 对齐原件
之后可以自己布线了,顶层布线初步完成后的样式如下:
图3.40 顶层布线
有些线在顶层铺不开了,需要打过孔到底层去布线。首先要设置一下过孔的大小。孔径设置为 0.5mm ,外层直径设为 0.7mm
图3.41 过孔设置
设置过孔孔径完成后,可以进行打孔等操作。在PCB背面布线,初步布线效果如下图3.42所示。
图3.42 底层布线
布线完成后,需要整体看一下布线效果,对部分线束进行修改。修改完成过后的大体布线效果如下图3.43所示。
图3.43 PCB样式

3.2.5 补泪滴

为了防止在机械制板的时候,焊盘或过孔因承受钻孔的压力而与铜膜导线在连接处断裂,因此连接处需要加宽铜膜导线来避免此种情况发生。补泪滴后的连接处会变得比较光滑,不易因残留化学药剂而导致对铜膜导线的腐蚀。
在菜单栏的工具->泪滴选项中,可以设置泪滴的添加方式。
图3.44 补泪滴设置
补完泪滴的PCB效果如下图3.45所示。
图3.45 补泪滴效果

3.2.6 铺铜

连线完成后,进行铺铜。首先铺底层的GND层,并勾选移除死铜选项。
图3.46 底层铺铜
底层覆铜效果如下图3.47所示。
图3.47 底层铺铜效果
正面覆铜效果如下图3.48所示。
图3.48 顶层铺铜效果

3.2.7 DRC检查

覆铜完成后,需要进行DRC检查。
图3.49 DRC检查
第一次DRC检查的结果如下图3.50所示。
图3.50 第一次DRC检查结果
具体是有两方面的问题:
图3.51 具体问题
第一个是焊盘之间的间距,有些地方超过了0.254mm。另一个是丝印到焊盘之间的间距,有些地方也小于了0.254mm。
接下来修改DRC检查的规则,如下图3.52所示。
图3.52 重设检查规则
第二次DRC检查:
将检查的约束条件去除一些,再次运行DRC检查。
图3.53 第二次DRC检查结果
此时检查的结果就不存在错误了。

3.2.8 添加丝印并检查

首先添加一个学校的校徽,首先运行AD脚本,执行 RunConverterScript 将BMP图片转换为丝印层图片。
图3.54 运行脚本
在底层丝印层添加这个图片,转换过程如下图3.55所示。
图3.55 图片转换
将转换完成的丝印复制粘贴到底层丝印层即可。
图3.56 底层丝印效果
但是考虑到本次的PCB板比较小,如果印上校徽可能根本看不清字,所以我就将底层的校徽丝印去掉了。经过调整,最终的背面丝印如下图3.57所示。
图3.57 丝印调整
丝印做完之后,需要再进行依次DRC检查,防止丝印与焊盘靠得太近。
第三次DRC检查结果如下:
图3.58 第三次DRC检查结果
可以看到,DRC检查已通过。

3.2.9最终效果

PCB最终效果如下图3.59所示。
图3.59 PCB效果
三维模拟视图如下图所示。
图3.60 正面三维视图
图3.61 背面三维视图

3.3 PCB打板

3.3.1 导出文件

本次PCB实训使用嘉立创打板,首先将PCB源文件复制一份并压缩至RAR格式。
图3.62 压缩文件
在嘉立创助手上传压缩文件。
图3.63 上传文件
上传完成后,可以查看文件解析结果。
图3.64 文件解析

3.3.2 填写订单

在下单页面填写相关选项,点击提交订单即可。
图3.65 订单详情
因为这块板子是我的第二次设计,前几天已经投过一次板了,我觉得当时做的板子布局不太好,所以就重做了一次。第一次投稿时选用了SMT贴片,这次投稿就不再用SMT了。两次投板的订单列表如下图3.66所示。
图3.66 订单列表

3.3.3 原件贴片

第一次投板时选用了工厂的SMT贴片,其操作步骤如下。
首先需要在嘉立创的SMT订单页面上传自己的PCB源文件,由嘉立创自动生成对应的BOM表和坐标文件。
图3.67 上传文件
上传完成后,点击下一步,可以看到原件的BOM表,如下图3.68所示。检查原件的BOM表与自己PCB所用的原件是否相同,检查完毕后可以点击确认。
图3.68 原件清单对照
确认元件清单无误后,可以看到PCB的模拟贴片图。如下图3.69所示。
图3.69 原件贴片图
上面是我第一次画的PCB贴片图,当时因为时间比较紧张,所以画得比较糟糕,原件也不整齐,过孔也比较多。元件贴片图检查完成之后,就可以对整个SMT订单进行确认了。
图3.70 贴片信息
确认订单前可以查看具体的项目费用情况。
图3.71 订单信息
整个订单包括PCB打板订单和SMT贴片订单,确认完订单并提交付款后,就只需等待发货了。

4 实验结果

本次实验根据原理图绘制了相应的PCB电路,并将PCB文件投稿至工厂,进行了工厂打板和SMT贴片。本次共投出了两版电路板,第一版使用了SMT贴片,第二版没有贴片。收到板子后,可以尝试烧录程序实现U盘功能。

4.1 准备工作

在收到PCB样板后,首先需要对PCB样板的线路进行检查,可以用万用表测量线路是否导通,是否存在短路等问题。检测完成后,由于后续需要往里面烧程序,所以要把缺少的排针先焊上。焊接完成后如下图4.1所示。
图4.1 焊接排针
本次使用的是金手指的封装,但由于经费问题没有在金手指处做沉金处理,所以现在金手指位置是一层白色的锡。当我尝试将PCB插入USB接口时,发现PCB金手指位置的尺寸被设计得太大了,USB接口插不进去,所以又打磨了一下PCB。
打磨完成后,将PCB插入USB扩展坞进行测试。测试结果如下图4.2所示。红色的LED因为连接到了稳压管的输出端,所以一插上就亮了。
图4.2 USB接口测试
此时在电脑的设备管理器中可以看到该设备为 Unknown USB Device 未知的USB设备,如下图4.3所示。
图4.3 设备管理器
接入电源时,可以测试一下PCB的供电是否正常。我主要测试了一下稳压管的输入和输出电压,输入的5V是USB接口的电压,输出测量的是3.28V,也基本上正常。如下图所示。
电源测试
另外其他的线路也要进行初步测量,以确保板子能够正常工作。

4.2 程序烧录

原理图在设计时使用了PA13和PA14作为预留的程序下载引脚,网络标号标注为SWDIO和SWLCK,说明原理图被设计为用SWD方式下载程序。使用SWD方式下载程序可以节省端口占用,它只需要SWDIO、SWCLK、VCC和GND四条引脚就可以了,也就是对应PCB板上预留的四脚排针。
将PCB板上的四脚排针连接到JLink、STLink等仿真器上,再将仿真器连接电脑。老师给我们的工程代码需要在IAR软件中打开,如下图4.6所示。在IAR软件中修改仿真器的配置,编译程序没有错误的话就可以下载了。下载完成后应该就可以将PCB作为U盘使用了。因为我手边没有下载器,所以暂时就不去下载代码了。
图4.6 工程代码
工程代码的基本原理是在SMT32与W25Q128闪存芯片之间进行SPI通信,利用SPI通信可以在主设备芯片和闪存之间传递数据。再向芯片中移植一个文件系统,就可以实现像U盘一样的读取文件。

5 实验总结

本次EDA实训设计制作了一款基于STM32的简易U盘。绘制了原理图、封装库,绘制了两版PCB电路板并将工程文件投厂生产,最终得到了完整的PCB实验板实物。利用嘉立创的SMT贴片服务,将原件焊接到了电路板上,方便样板测试。同时导出了BOM表,可以自己进行元件的购置。
本次设计是从原理到实践的结合,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,实践是检验真理的唯一标准。我们电子专业的学习更是如此,不仅要有丰富的理论知识,还要有很强的动手能力,这是工科学生的特点。只有理论与实践并重,我们的专业水平才能提高,这就是我在这次课程设计中的最大收获。

6 附录

电路板工程文件及实验代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 USB_SPI_FLASH 简易U盘设计 的相关文章

  • 一句话说明白IRQL

    Windows操作系统运行的处理器架构中 硬件产生信号发给可编程中断控制器 中断控制器发送中断请求 IRQ 及相应的优先级给CPU CPU设置一个掩码 mask 屏蔽低优先级的其他中断请求到挂起状态 pending state 直到CPU释
  • 两台windows电脑之间通信

    一台做客户端 一台做服务端 服务端 import os import socket import time from test pip import pip test def server socket while True ip port
  • 微信小程序农历阳历日期选择器选中日期同时获取对应农/阳历日期 这个demo问题的修改

    修改以下三个文件完成BUG的修复 selectdata js文件中将农历转阳历的代码修改成 以下是原selectdata js中的代码 搜索 calendarConverter lunar2solar 文件中就一处用到 释义 用到阴历转阳历
  • Python爬虫+数据可视化

    一 工具和环境 IDE Pycharm 第三方模块 1 jieba 主要功能 处理分词 2 requests 主要功能 获取接口数据 3 sqlite3 主要功能 进行数据库相关操作 4 matplotlib主要功能 进行绘图 5 ecah

随机推荐

  • R获知颜色名称及对应颜色代码

    pdf D colors bar pdf height 120 par mar c 0 10 3 0 0 1 yaxs i barplot rep 1 length colors col rev colors names arg rev c
  • docker container 设置自动重启,自动执行

    编写自动执行的脚本 start server sh 脚本内容是你要执行的内容 BASE PATH data3 image generate export PYTHONPATH PYTHONPATH BASE PATH cd BASE PAT
  • 2021-07-22-第一次实训(HTML+CSS+JS)

    layout post 标题配置 title 第一次实训 HTML CSS JS 时间配置 date 2021 07 22 11 00 00 0800 目录配置 categories JavaWeb 标签配置 tag 学习笔记 conten
  • 5 区块链的缺点及面临的问题

    5 1 区块链的缺点 任何事物都有两面性 区块链也不例外 之前介绍了区块链的去中心化 集体维护 解决信任问题等种种好处 现在咱们来看一下区块链的缺点 1 无隐私性 在区块链公有链中 每一个参与者都能够获得完整的数据备份 所有交易数据都是公开
  • 一文了解社区发现算法

    最近在调研社区发现图聚类在区域划分中的应用 将一些编辑汇总的信息记录如下 社团划分了解 社区是什么 在社交网络中 用户相当于每一个点 用户之间通过互相的关注关系构成了整个网络的结构 在这样的网络中 有的用户之间的连接较为紧密 有的用户之间的
  • 【会议资源】2022年第四届计算与人工智能国际研讨会(ISCAI 2022)

    2022年第四届计算与人工智能国际研讨会 ISCAI 2022 重要信息 会议网址 www iscai org 会议时间 2022年12月16 18日 召开地点 中国北京 截稿时间 2022年11月16日 录用通知 投稿后2周内 收录检索
  • Socket通信及文件操作

    java Socket通信及文件操作 编译软件 Eclipse 一 客户端 package com import java io BufferedReader import java io DataOutputStream import j
  • Mysql学习笔记-Mysql基础(基础看这篇就够了)

    数据库的基本概念 1 数据库的英文单词 DataBase 简称 DB 2 什么数据库 用于存储和管理数据的仓库 3 数据库的特点 1 持久化存储数据的 其实数据库就是一个文件系统 2 方便存储和管理数据 3 使用了统一的方式操作数据库 SQ
  • 【Linux】虚拟机免密登录

    以node1 node2为例 方法一 利用ssh keygen生成公钥和私钥 1 原理 在node1上生成公钥和私钥 之后将公钥复制到其他的虚拟机上 虚拟机通过匹配公钥则可以实现免密的操作 2 步骤 1 连接到node1 c ssh roo
  • Unknown CMake command "add_compile_definitions"

    Unknown CMake command add compile definitions 解决方法 换cmake 3 14
  • selenium自动化测试--126邮箱登录问题总结

    虫师著selenium 2自动化测试实战基于python语言第四章习题4 3 1 126邮箱登录练习问题总结 练习过程中 参考以下博友的博客顺利完成练习题 https blog csdn net cyjs1988 article detai
  • java.io.FileNotFoundException: xxx.txt (系统找不到指定的文件。) 的错误解决办法

    这是我报错的原来的代码 package day19 java2 import java io File import java io FileInputStream import java io IOException ClassName
  • saltstack+zabbix

    环境 server1 172 25 60 1 salt master salt minion zabbix server server2 172 25 60 2 salt minion zabbix agent 1 软件包安装过程存在许多依
  • 【小白笔记】——AD铺铜设置铜与焊盘、通孔的全连接

    目录 一 热焊盘与花焊盘的区别与比较 二 AD静态铺铜如何设置连接样式 一 热焊盘与花焊盘的区别与比较 来自百度百科 热焊盘 热焊盘指大面积的接地 电 中 常用元器件的腿与其连接 对连接腿的处理需要进行综合的考虑 就电气性能而言 元件腿的焊
  • 【数学建模】青少年犯罪问题

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 逐步回归分析法 1 1 逐步回归分析定义 最优回归方程 1 2 stepwise函数介绍 二 例题 青少年犯罪问题 2 1 题目简述 2 2 问题一建模与求解
  • 定制化UINavigationBar

    FirstViewController 定制化UINavigationBar void customNavigationBar 按钮被挡住 原因是 navigationbar的透明度默认为YES 先取出navigationbar UINav
  • java中countinue,.random(用于产生一个随机数)入门可看

    1 countinue 用在循环中 基于条件控制 跳过其次循环体内容的执行 继续下一次的执行 break 用在循环中 基于条件控制 终止循环体内容的执行 也就是结束当前的整个循环 eg public class zhou public st
  • php提取css生成单独文件,webapck将css 打包后单独提取到一个css文件中

    webpack4 提倡 一旦用了这个 不能使用style loader 以及css module 安装 npm install save dev mini css extract plugin rules rules test css us
  • SQLServer 中实现类似MySQL中的group_concat()函数的功能

    SQLServer中没有MySQL中的group concat函数 可以把分组的数据连接在一起 后在网上查找 找到了可以实现此功能的方法 特此记录下 SELECT a stuff SELECT b FROM tb WHERE a t a F
  • STM32 USB_SPI_FLASH 简易U盘设计

    这是大三下学期EDA实训的内容 设计制作了一个简易的U盘 主要涉及STM32单片机 W25Q128闪存芯片 电路板绘制 文件系统移植等内容 发布出来供大家参考 仅供学习交流使用 实验步骤仅供参考 转载请注明原文链接 https blog c