0%

在计算机系统中,CPU和外部通信有两种通信方式:并行通信串行通信 。 而按照串行数据的时钟控制方式,串行通信又可分为 同步通信异步通信

数据层标准:I2C、SPI、UART、USB、SATA 硬件层标准:RS232、TTL

某些协议可能对于数据层或硬件层有着不同的规定,因此请自行了解并加以区分。

串行通信

Serial communication,指所有的串行的通信协议。是相对并行通信(Parallel communication) 而言的。

同步串行通信

Synchronous serial communication,指发送端在发送串行数据的同时,提供一个时钟信号,并按照一定的约定(例如在时钟信号的上升沿的时候,将数据发送出去)发送数据,接收端根据发送端提供的时钟信号,以及大家的约定,接收数据的。

如:I2C、SPI。

异步串行通信

Asynchronous serial communication,指发送端在数据发送之前和之后,通过特定形式的信号(例如START信号和STOP信号),告诉接收端,可以开始(或者停止)接收数据了。与此同时,收发两方会约定一个数据发送的速度(波特率),发送端在发送START信号之后,就按照固定的节奏发送串行数据,与此同时,接收端在收到START信号之后,也按照固定的节奏接收串行数据。

如:UART、USB。

在传送数据的过程中,字符与字符之间的传送是完全异步的,位与位之间的传送基本上是同步的,其特点可以概括为: 1. 以字符为单位传送信息。 2. 相邻两字符间的间隔是任意长。 3. 因为一个字符中的比特位长度有限,所以需要的接收时钟和发送时钟只要相近就可以。 4. 异步方式特点简单的说就是:字符间异步,字符内部各位同步。

串行协议标准介绍

本节仅对SPI、I2C、UART、RS232、TTL及COM接口做详细介绍,其他标准作为粗略的补充或拓展之用。

SPI

Serial Peripheral Interface Bus,串行外设接口。是一种用于短程通信的串行通信同步接口规范,也是一种同步串行通信协议,主要应用于单片机系统中。

典型应用包含SD卡、液晶显示器、RFID读卡模块MFRC-522。 SPI设备之间使用全双工模式通信,包含一个主机和一个或多个从机。主机产生待读或待写的帧数据,多个从机通过一个片选线路 决定哪个来响应主机的请求。 有时SPI接口被称作四线程接口,SPI准确来讲称为同步串行接口,但是与同步串行接口协议(SSI)不同,SSI是一个四线程 同步通信协议,但是使用差分信号输入同时仅提供一个单工通信信道。

SPI总线规定了4个保留逻辑信号接口: - SCLK(Serial Clock):串列时脉,由主机发出 - MOSI(Master Output,Slave Input):主机输出从机输入信号,由主机发出 - MISO(Master Input,Slave Output):主机输入从机输出信号,由从机发出 - SS(Slave Selected):选择信号,由主机发出,一般是低电位有效

尽管上面的引脚名称是最常用的,但在过去,有时会使用其他引脚命名约定,因此旧IC产品的SPI端口引脚名称可能有所不同。

SPI总线:单一主机对单一从机
SPI总线:单一主机对复合从机

I²C

Inter-Integrated Circuit,字面上的意思是集成电路之间,是I²C Bus简称。也称集成电路总线,它是一种同步串行通信协议,使用多主从架构总线。

I2C bus

UART

Universally Asynchronous Receiver/Transmitter,通用异步接收/传输器,是指以某个固定的速率(1200bps、9600bps、115200bps等)进行数据传输,且一次只能传输一个bit(所以叫做串行传输)的异步串行通信协议 。 有时候UART会与TTL(Transistor-Transistor Logic)Serial混为一谈,这是因为TTL虽然可以采用其他串行通信协议(如I2C和SPI),但很多PC硬件上支持服务复杂,所以一般用UART协议导致的。 常见的微控制器中,都有内置UART协议接口。

RS232

RS232或者RS485,相较于UART是通信协议的标准,RS232或RS485d规定的是电路的物理层协议(电平标准)。 因为它规定了电气特性和各个引脚的功能定义,如 用-3V— -15V之间的任意电平表示逻辑“1” ;用+3V — +15V电平表示逻辑“0”,这里采用的是负逻辑。

TTL

Transistor-transistor Logic, 晶体管-晶体管逻辑集成电路,这种串行通信对应的物理电平始终是在0V和Vcc之间,其中常见的Vcc是5V或3.3V。 TTL指的是电路的 物理层协议 (电平标准)。电压>=2.4V时代表高电平1,电压<=0.5V时代表低电平0(对于5V或3.3V电源电压),这里是正逻辑。TTL接口在Minnow板子上如图: pic3

在TTL与RS232的互相转换中,使用的芯片是MAX3232(3.3V)或者MAX232(5V),里面就只涉及到电压转换的问题了,没有数据的改变和封装,因为他们在数据层的协议是一样的。 比如,对于同样传输0b01010101来说,RS232和TTL的时序对比如下图所示。 pic4 当然,RS232和TTL之间的转换,不仅仅是简单的电平转换,还要考虑到其他一些因素,比如调节和矫正一些电平(提高或降低对应的电平),确保可能的有害的RS232电压不会破坏微控制器的串口针脚。

如何分辨究竟是TTL还是RS232呢? - 一般来说,由SOC芯片引脚直接引出的一般是TTL,其高低电平不需要任何转换,可以由芯片之间驱动,节省费用;而中间接有转换芯片的可能就是RS232了,可以根据电路图的芯片型号google即可。 - 另一个原则是RS232通常出现在传统的PC和服务器领域,TTL通常用于嵌入式设备。

COM接口

Cluster Communication Port,串行通讯端口,简称串口。微机上的串口通常是9针(如下图示),也有25针的接口,最大速率115200bps。 pic1 PC计算机背板的COM口通常采用RS232标准,其高电平定义为-12V,低电平定义为+12V。 在嵌入式设备上的4针杜邦线接口也算COM接口,采用的是TTL标准或RS232标准。但如果谈论到COM接口,一般是指RS232标准的PC背板的9pin的COM口。 pic2

转换方式 芯片型号
TTL-RS232 MAX3232 或者 ST3232
USB-TTL PL2303HX 或者 CP2102

如果要转换USB-RS232的话,则要使用USB-TTL和TTL-RS232两种芯片。

其他

USB

Universal Serial Bus,通用串行总线。是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范。 USB使用NRZI编码方式:当数据为0时,电平翻转;数据为1时,电平不翻转。为了防止出现过长时间电平不变化现象,在发送数据时采用位填充处理。具体过程如下: - 当遇见连续6个高电平时,就强制插入一个0。 - 经过位填充后的数据由串行接口引擎(SIE)将数据串行化和NRZI编码后,发送到USB的差分数据线上。 - 接收端完成的过程和发送端刚好相反。

SATA

Serial Advanced Technology Attachment,串行高级技术附件。 是一种计算机总线,负责主板和大容量存储设备(如硬盘及光盘驱动器)之间的数据传输,主要用于个人计算机,用以取代PATA或称IDE接口。 串行ATA与串列SCSI(SAS: Serial Attached SCSI)的两者排线兼容,SATA硬盘可接上SAS接口。

参考资料

  1. Serial Peripheral Interface
  2. 同步串口和异步串口的区别及使用情况
  3. UART、RS232、TTL关系浅析
  4. UART、TTL、RS232等概念的区别与联系
  5. 串口、COM口、TTL、RS-232、RS-485区别详解
  6. 一文看懂sp3232与max3232区别
  7. USB

心血来潮,2019年伊始的第四天,我要搭建我自己的个人博客,作为个人工作学习和生活的一种记录方式。

这前面的路或许会有困难,但我喜欢“挑战成功”的快感!

本博文部分语句和教程是适用于Windows平台的,mac及其他平台请依据官方文档进行操作,本博文较长,请耐心阅读并多多实践。欢迎大家留言,提出问题,ありがとうございます。

一、前置准备工作

本博文将叙述如何基于Hexo静态博客生成器快速搭建托管于GitHub的自建博客。

首先,我们要在本地电脑端配置环境,并完成本地个人博客的搭建,然后申请GitHub账户和仓库,并上传本地个人博客到仓库,最后申请域名“XXXXX.com/XXXXX.cn” 并解析到对应的GitHub地址“XXXXX.github.io” 。

本文所示操作方法都是在Windows环境下利用Git Bash Shell进行的。

本文中出现的所有下载连接如果无法进行下载或下载速度极慢时,可以到文末找到对应的百度云盘链接。

首先我们要安装几个工具:Git、Node.js、hexo和hexo-git(第二节 3.2中)上传工具。

1. 基础知识

个人博客,可以分为传统博客和自建博客两种。

传统博客像是新浪博客、网易博客和QQ空间等,主要依托于自身强大的博客门户运营能力,能够为用户提供安全便捷的博客环境,缺点就是兼容性不够强,并且个性化定制能力稍差。

自建博客根据服务器管理方式也可以分为两种。一种是基于第三方服务器托管的自建博客,像GitHub这种;另一种是基于自有服务器的博客。

自建博客根据博客生成器来分也可以分为两种,分别是动态博客和静态博客。其中,动态博客以WordPress、FarBox、Ghost等为代表。静态博客以Hexo、Jekyll、Octopress、Hugo为代表。

以下为动态博客和静态博客的几点主要区别:

  • 资源占用上,静态的相比动态占用服务器资源少,还可以托管在Github Pages上;
  • 发布更新操作上,由于静态博客没有管理后台,所以发布更新内容要比动态博客繁琐;
  • 访问速度上,由于静态博客没有数据库,所以访问速度更快;
  • 安全性上,静态博客相比动态博客免疫了很多Web攻击套路;

除了Hexo以外,还有其他的静态博客生成器推荐,见文章《11个最流行的静态(博客)网站生成工具》。

2. Git配置

2.1 Git Bash Shell下载

Windows平台: https://gitforwindows.org/ Hexo提供的Git-SCM网址的Git Bash shell: https://git-scm.com/downloads

2.2 Git安装验证

为了确保安装成功,我们可以在Bash Shell或Windows CMD中,使用以下代码进行验证:

1
git version
若成功安装,则会提示以下结果:
1
git version 2.20.1.windows.1

3. Node.js配置

3.1 Node.js下载

Windows平台: https://nodejs.org/en/

3.2 Node.js安装验证

为了确保安装成功,我们可以在Bash Shell或Windows CMD中,使用以下代码进行验证:

1
node -v

若成功安装,则会提示以下结果:

1
v10.15.0

4. Hexo配置

4.1 Hexo安装

成功安装Git和Node.js之后,(关闭窗口并重启命令终端)则可以使用npm命令语句安装Hexo:

1
npm install -g hexo-cli

4.2 Hexo初始化

为本地博客创建文件夹,以下代码中的”XXXXX”为该文件夹的名称,为避免出错,请勿输入中文。

1
2
3
4
5
6
7
cd ~/                          //跳转到根目录
mkdir XXXXX //创建一个文件夹
hexo init XXXXX //初始化该服务器文件夹
cd XXXXX //跳转到该服务器文件夹
npm install //博客环境安装
hexo g //博客生成
hexo s //博客服务器开启(本地预览用)
### 4.3 注意事项 在每次重新打开命令窗口,并生成本地服务器预览页面之前,都必须跳转到该服务器的文件夹中。即:
1
cd XXXXX                       //跳转到该服务器文件夹

到此步骤为止,本地服务器配置已经全部完成。可以根据hexo官方文档给出的参数格式说明来对博客进行个性修改,这些请看第3节。

二、上传到GitHub仓库

在这部分中,我们将会申请到一个Github账户,并建立好对应博客代码的储存仓库,也会将本地生成的公钥SSH Key中。

1. GitHub账户申请及Repository(仓库)建立

1.1 GitHub注册

在这里偷个懒,引用别人的文章作为参考: 《GitHub注册》 GitHub官方网址:https://github.com

1.2 Repository建立

在创建Repository的时候一定要注意,仓库名应该为:XXXXX.github.io。 这个XXXXX使用你的GitHub帐号名称代替,这是固定写法。

比如我的名字是liewzheng,则我对应的仓库名称应该是:liewzheng.githug.io 不然在后续上传本地博客到仓库之后,会发现仓库无法打开的情况,因为DNS寻址会不成功。

2. SSH Key配置

此步骤是为了让Github给你的电脑访问授权,如果没有此步骤,则无法上传到Github。

2.1 本地生成SSH Key

请执行以下命令:

1
ssh-keygen
三次回车之后,可以生成id_rsa.pub文件,这里面就是SSH key的内容,然后使用Vim编辑器打开这个文件,复制里面的全部内容
1
vim ~/.ssh/id_rsa.pub
然后在键盘上敲击以下命令并回车退出Vim编辑器:
1
:q
附带Vim编辑器的其他使用教程: 1. 《Vim入门基础》:https://www.jianshu.com/p/bcbe916f97e1

2.2 拷贝到GitHub记录该Key

在自己的GitHub主页,点击右上角头像,点击Setting,点击左侧边栏的SSH and GPG keys,点击New SSH key

然后将SSH-key粘贴到Key文本框中,在Title文本框键入对该Key的备注并保存即可。

2.3 验证SSH Key

回到命令行,输入:

1
ssh -T git@github.com
如果得到以下提示,则说明你已经配置好SSH-Key了。
1
2
Hi! You've successfully authenticated, but GitHub
does not provide shell access.

3. 上传到GitHub仓库

3.1 本地参数修改

首先找到本地博客的服务器文件夹下的_config.yml文件,然后打开并滑动到最底下,其原始文件应该是如下的:

1
2
3
4
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type:

然后我们要对其进行上传参数修改,XXXXX为你对应的账户名:

1
2
3
4
5
6
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type: git #为Git,旧写法为github
repo: git@github.com:XXXXX/XXXXX.github.io.git #输入你对应的Git仓库地址,SSH写法
branch: master #可以为其他分支,默认为master

3.2 上传插件安装

接下来安装hexo对应Github的上传插件:

1
npm install hexo-deployer-git --save
显示如下文字说明插件安装成功了:
1
2
3
4
5
6
7
8
9
10
11
  npm WARN deprecated swig@1.4.2: This package is no longer maintained

> fsevents@1.2.4 install /Users/apple/liewzheng/node_modules/fsevents
> node install

[fsevents] Success: "/Users/apple/liewzheng/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64/fse.node" already installed
Pass --update-binary to reinstall or --build-from-source to recompile
+ hexo-deployer-git@0.3.1
added 68 packages from 33 contributors, updated 1 package and audited 5870 packages in 12.563s
found 1 low severity vulnerability
run `npm audit fix` to fix them, or `npm audit` for details

3.3 用户名称及邮箱配置

(更新日期:2021年2月5日)

向cmd或者terminal内设置两个变量,分别是 user.nameuser.email

1
2
git config --global user.email "you@example.com"
git config --global user.name "Your Name"

三、博客主题配置

1. 选择博客主题

本步骤需要在Hexo的官网上进行主题挑选及预览,然后再跳转到对应的GitHub仓库中下载主题Zip包,并解压放在对应的位置/themes/下面。

然后在根目录下找到文件_config.yml

并在其文件下方XXXXX处替换刚下载好的主题名称(其文件夹名称):

1
theme:   XXXXX

2. 主题配置

请打开对应的主题文件夹下的\_config.yml文件,如:

1
XXXXX\themes\hexo-theme-pln-master\_config.yml
然后对照着Hexo对config.yml文件的说明进行编辑。

官方文档如下: 《配置

3. 注意事项

大概是因为Hexo免费的原因,其主题很多都是资源上传,且无人维护的,因此需要多下载几个主题,一个一个进行尝试,在本地博客服务器上尝试到所有网页跳转正常无BUG之后再进行主题配置,按需修改。

四、博客撰写及文件更新

1. 博客撰写

使用Hexo创建的静态网页之后,在编写博文之时,一般都是使用轻量级标记语言(MarkDown,文件名如:XXXX.md)来编写的。然后利用脚本语言将md格式文件自动转换成html5文件,并上传到服务器仓库。

这时候,熟练使用MarkDown这种纯文本文档语言来编写博客,是为广大博客爱好者提供了便利的。

由于MarkDown是纯文本文档,在文章撰写中无法使用图片直接插入和预览功能,因此最好选择合适的稳定的图库网站来保存自己的图片,并生成对应url,再使用如下引用方法来插入图片:

1
![说明](url地址)
url地址的填项也可以是相对(物理)地址。

科普 相对地址和绝对地址(相对路径和绝对路径)。 这一点,学计算机和电子的人可能会比较懂。 详细科普还是请参考链接6吧。

另外,推荐使用Atom文本编辑器对本博文中出现的各种文件进行编辑,自带各种显示优化,地址如下: https://atom.io/

更多MarkDown的使用方法,请循: 1. 《Markdown编辑器editor.md的使用》 2. 《Github上README.md的简单使用方法

2. 文件更新(利用Git Bash Shell)

再次更新本地服务器文件,并保存生成预览之后,如果想要更新对应git仓库里的文件,最好每一次都按照以下代码进行操作,避免出现不必要的意外。

1
2
3
hexo clean
hexo g
hexo d
之所以强调需要每一次都这样操作,是因为本人就有过偷懒,在本地博客预览成功后选择直接部署,都没有提示错误,也没有部署成功(输入对应网址后无法显示更新)。

3. 注意事项

可以在本地博客服务器开启的情况下,实时修改服务器文件并刷新网页进行查看,这样创建文章和预览网页的效率有极大的提升。

五、博客展示

1. 域名申请

域名申请比较靠谱的,可以选择国内的阿里云、百度云和腾讯云等等。

由于此步骤较为简单,不做多介绍。域名申请参考文章如下: 1. 《免费申请域名》 2. 《教你如何申请域名和解析域名

2. 域名解析

域名解析是指将指定的域名与指定的服务器或其他地址绑定在一起,能够在DNS服务器中被检索得到,通过输入域名A并跳转到指定位置。

有两种方法可以用来将自己的域名指向到Github Pages: - A类型解析:将域名定向解析到一个IPv4地址,只要将获取到个人博客的IPv4地址就可以定向解析了 - CNAME类型解析:将自己的域名(定向域名或子域名)指向另一个域名(博客地址)

本人使用阿里云域名解析服务,具体步骤请参考以下链接: 1. 《github pages+阿里云域名绑定搭建个人博客》 2. 《github pages 绑定阿里云域名》 3. 《github怎么绑定自己的域名?

六、博客个性化

1. 图床服务器

对于博客而言,有两项因素关乎着“我是否需要图床服务器”这项问题: 1. 本博客是否有数量庞大的访客; 2. 本博客是否有插入数量庞大的多媒体(动画、视频和图片等等);

对于以上两种因素而言,图床服务器都能够很好的减轻博客服务器的访客压力,减少因为访客众多或者多媒体加载时的网页载入缓慢或崩溃。对于自有服务器的博客而言,图床服务器能够降低租用服务器的流量消耗,加快访问速度。

理论上说,只要另外申请一个服务器,专门用来存放图片的,就能被称作图床服务器。 因此图床服务器也有自建服务器和门户服务器的区别。 你也可以上传到微博相册或者QQ空间相册,然后引用超链接到.md文件里。

本人用阿里云OSS(Object Storage Service,对象存储服务),搭配Mac平台的 iPic插件 ,有兴趣也可以参考一下: 《对象存储OSS》 《在 iPic 中添加阿里云 OSS

然后再推荐个口碑不错的七牛云,注册和使用方法请遵循技术文档吧,链接如下: 七牛云

推荐网友Mashiro的自建图床服务器: 《搭了一个图床

其他推荐链接: 《免费图床

2. .YML

.YML是YAML语言的文件格式。

YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。——摘自wikipedia.org

请自行以Hexo官方针对_config.yml文件做出的解释进行.yml学习,并针对个人博客进行适当的修改即可。

七、后续总结

1. 如何GitHub自建博客和自有服务器博客的区别

这个问题,相当于我给自己挖了个坑,之前打算长篇大论来着,发现自己也并没有那么深的体会。

自由服务器博客最大的问题是,一般都会有自己的系统。 这样的服务器系统分为两类:应用镜像和系统镜像。

应用镜像的代表是:WordPress、LAMP、Drupal、Node.js、ECShop等等。 系统镜像的代表是:CentOS、Ubuntu、Debian和Windows。

自己管理服务器的话,最好是有一个自己的博客应用镜像,如WordPress,WordPress也是基于CentOS打造的,是功能非常强大的博客和内容管理工具平台。

而GitHub的话更多的是静态博客的搭建,没有操作系统这种东西。

2. 做好更换设备前的备份工作

对了,值得一提的是,如果你准备在多台电脑之间编辑你的博文,最好是能够把本地博客服务器拷贝到U盘或者移动硬盘上面。

假如,尝试着从GitHub再次git clone到本地的话,你会发现里面的内容和本地博客服务器的内容完全不一样。这是因为本地博客服务器使用.md文件进行编辑,之后在hexo d的过程中会把.md文件转换成.html文件,而使用.html文件编辑的话会变得更加复杂。

因此,为了避免在转移到另一台电脑上编辑的时候出现这种尴尬问题,还是备份到U盘更方便。

参考链接

  1. GitHub+Hexo 搭建个人网站详细教程
  2. 在github上搭建hexo个人博客(Linux-Ubuntu)
  3. 搭建个人博客,你需要知道这些
  4. Hexo官方帮助文档
  5. MarkDown
  6. 相对路径和绝对路径

下载链接

  1. 安装工具合集(更新时间2019/01/05)》 提取码:28wj