作者:xtoolbox


自己动手设计电路板-PCB设计


自己动手设计电路板-PCB设计

打开PCB编辑器,开始进行PCB设计。

PCB编辑器布局

常用的工具都在绘图区域的四周,左下方的状态栏可以查看当前所选择的对象的详细属性。右下方的状态显示鼠标的绝对坐标和相对坐标,按下空格键后相对坐标会清零,从当前位置开始计算。

在层管理器中点击勾选框可显示或者隐藏图层,点击文字或是图块,可以切换到当前图层,与图层选择效果一样。在层管理器上的右键菜单可以批量操作。F开头的层是顶层,B开头的是底层。

Read More »

自己动手设计电路板-原理图设计


自己动手设计电路板-原理图设计

准备工作完成后,进行原理图设计,我们这里设计一个基于STM32的开发调试工具,包含CAN,232串口,485,USB,I2C,SPI接口。电脑通过USB接口来控制CAN,232,485等接口。这里选用STM32F072C8T6,这个片子的USB和CAN可以同时工作,并且不需要外部晶振,价格也比较便宜。

整个工具的框架也比较简单,通过USB接口供电以及与上位机进行通讯,再外接出CAN,232,485,I2C,SPI接口,其它没有用到的引脚也尽量引出。

Read More »

自己动手设计电路板-准备工作


自己动手设计电路板-KiCad准备工作

简介

前面我们说到要使用KiCad进行我们的电路板设计,选择它是因为他是开源跨平台的,对于不复杂的电路板他的功能足够我们使用,同时也不会存在版权问题。除此之外,KiCad的原图库和封装库也很丰富,这部分内容也是开源的,保存在GitHub上,会持续更新。伴随着封装库的还有3D库,3D库支持step和wrl格式,并且能够将整个电路板以step或者是wrl格式进行导出。这样在后续进行结构设计时,可以很方便的将电路板真实结构导入到结构设计工具中。KiCad支持包括中文的多国语言。

在KiCad的PCB设计工具中,提供了python脚本接口,可以脚本对其功能进行扩展。这部分功能很有用,在我们后续导出生产文件的过程中,会充分利用脚本来简化导出生产文件的工作。Read More »

自己动手设计电路板-序


自己动手设计电路板-序

    放在以前,设计并制作电路样板是一件很费时费事的事情,个人DIY要打样一板板子,从原理图设计,PCB制作,到元件购买,焊接都需要自己动手来做。周期长,要做的事情也很琐碎,往往做着做着就陷入了焊板子调板子的轮回中,忘了初衷是啥了。现在SMT技术大行其道,电路板密度越来越高,以前的那种大块头的器件越来越少,电路板制作对喜欢DIY的人来说也越来越不友好了 。不过随着时代的发展,互联网+渗透到了各行各业,传统的制板行业也不例外,电路板制作也进入了互联网时代。在家设计一块板子,通过互联网将设计文件发给PCB打样厂家,厂家就能做出已经贴装好的板子,上电就能跑起来了。接下我将用一个实际的案例,走完一块电路板从设计到打样的全部流程。

    这里我选择KiCad做为PCB的设计软件,因为KiCad是一个“跨平台的开源电路设计套件”,拥有丰富的原理图库和封装库。对于一些不复杂的电路设计,特别是个人DIY,是一个很好的选择。选择开源的KiCad也不会有版权纠纷,不光是个人爱好者,对于一些电路不是特别复杂的公司,KiCad也是一个不错的选择,为公司正规化铺平道路。

    设计出的电路板需要发到工厂生产电装,这里我选择嘉立创的一站式PCB打样平台,这个平台提供元器件采购,PCB制作以及喜闻乐见的SMT服务。 能够根据你的设计文件最终生成贴装好的样板,也就是PCBA。

Read More »

STM32F767 Nucleo之RT-GUI实验


STM32F767 Nucleo是ST官方出的开发板,板子上引出了大量的管脚便于评估。板子上还有一个带串口功能的ST Link调试器,用于对767芯片进行调试,一些基础功能的评估在这一块板子上就能搞定,不需要额外的开发工具了。

我在这块板子上用rt-gui实现了一个计算器,屏幕数据通过USB摄像头来显示,鼠标和键盘数据通过自定义USB HID设备传送给开发板。PC端显示程序运行后效果如下:

   

PC端是一个简单的Qt程序,一边读取摄像头数据进行显示,一边将鼠标和键盘事件通过HID设备发送给开发板。这个程序的源代码在这里。如果有多个摄像头,可以用PageDown和PageUp按键进行切换。开发板上的程序在这里,采用rt-gui制作界面,用F767的jpeg硬核进行图片压缩,通过开发板的USB接口发送到PC端。

设计过程

Read More »


RTThread与CubeMX – (4)整合RTThread与CubeMX

2017-10-09

CubeMX, rtthread

RTThread与CubeMX – (4)整合RTThread与CubeMX已关闭评论


CubeMX生成的代码结构如下

CubeMX在生成代码的时候可以选择是否要把库复制到工程所在目录,为了减少外部依赖,我选择把库复制到工程中,这样在生成的工程目录中就包含了库相关的文件。Read More »


RTThread与CubeMX – (3)初识RTThread


说了那么多的CubeMX,现在终于轮到主角RT-Thread出场了。RT-Thread是一款开源的实时操作系统,代码完全开源,可以从官方网站下载,也可以从github上clone一个最新的版本。我选择从git上clone一个,这样能顺便追踪到我做的修改。

rtthread用了scons作为编译工具,这个工具是基于python做的。python算是比较奇葩的一个东西,2.x版本和3.x版本不兼容。这个工具是2.x版本的python做的,所以要用这个工具构建之前要先下载python2x,然后安装scons。用命令行切换到scons解压后的目录,运行python setup.py install,就能安装scons了。如果提示“python不是内部命令或可执行程序”,说明python没有添加PATH环境变量中,可以通过在“我的电脑”中修改全局环境变量,也可以在命令行中用“set PATH=%PATH%;C:\Pyhton27”命令将其加入环境变量,不过这样的环境变量在命令行窗口退出后就失效了,好处是不会修改全局的环境变量。我比较喜欢这样的方式,建立一个bat文件,把设置环境变量的工作放在bat文件中,并启动一个命令行界面,然后在这个命令行界面中编译代码。下面是我建立rtthread编译环境的bat脚本代码,先设置pyhton和scons的目录,然后启动cmd。在这个bat文件执行后启动的命令行界面中执行 scons –target=”mdk5″ 就能进行rtthread的编译了。

set PATH=%PATH%;C:/Python27;C:/Python27/Scripts
cmd

Read More »


RTThread与CubeMX – (2)修改CubeMX生成的代码


在CubeMX中配置好后,自动生成的代码只需要再添加少量的代码就可以运行了。比如上一篇的点灯,只需要在main函数的大循环中添加几个控制引脚的代码就可以了。HAL库通过systick帮我们实现了delay的功能,只需要调用就行了。

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */
SystemClock_Config();

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

CubeMX生成的代码,像上面这样有很多USER CODE BEGIN,USER CODE END的代码,据传这样的代码是为了让CubeMX在原来工程的基础上生成新代码的时候,可以保留这样的注释对中的代码。对于这个功能我没实践过,我只是用CubeMX来生成初始化的代码,还没有试过在代码已经有修改的情况下再次使用CubeMX生成代码。因为CubeMX重新生成代码的时候会将所有的库都重新复制一次,并且修改工程文件,导致所有代码都得重新编译,不是很方便。

为了让后续的rtthread跑起来,还得加入对串口的支持。

Read More »


C语言结构体与寄存器


单片机开发中免不了会与寄存器打交道。在51,AVR单片机中,会有一个头文件将寄存器的地址定义成更容易阅读的宏,在C语言中通过宏定义来访问寄存器。

#ifndef _AVR_IOM128_H_
#define _AVR_IOM128_H_ 1
............
/* Input Pins, Port D */
#define PIND      _SFR_IO8(0x10)

/* Data Direction Register, Port D */
#define DDRD      _SFR_IO8(0x11)

/* Data Register, Port D */
#define PORTD     _SFR_IO8(0x12)

/* Input Pins, Port C */
#define PINC      _SFR_IO8(0x13)

/* Data Direction Register, Port C */
#define DDRC      _SFR_IO8(0x14)

/* Data Register, Port C */
#define PORTC     _SFR_IO8(0x15)
...........

// When use GPIO register 
PORTD = 0xff; 
tmp = PINC;

而在STM32单片机中,寄存器不再是地址转化成宏定义的形式了,变成了一个结构体。对C语言不熟的同学可能会感到困惑。其实这样的定义方式,对于STM32单片机的寄存器设计而言,是更合理的一种方式。Read More »


RTThread与CubeMX – (1)初识CubeMX


手上有一块很早之前申请的STM32F767ZI Nucelo开发板,一直放在那里吃灰。这块板子上的F7是STM32系列比较高端的型号,自带2M Flash和512K的RAM,可以跑到216MHz。ST逐渐将开发库从以前的标准准转换到了HAL库,之后的高端型号更是只提供了HAL库,没有标准库。这块板子上的F7就只能用HAL库来开发。我这个只用过标准库的老古董也要开始学习HAL库了。我想既然都用HAL库了,何不一步到位把CubeMX也用上。ST出了一个图形化的配置工具CubeMX,这个CubeMX可以用图形化的方式配置芯片各功能,并且能够检测配置冲突,对于功能复杂引脚多的芯片,图形化配置很方便。这个工具还能根据配置生成报告,适合拿来做成报告的内容。

CubeMX对官方的开发板进行了预定义,可以直接选开发板,选好之后会对板上的功能进行预初始化,比如引脚别名之类的。

Read More »