不了解这些就无法使用单片机!学习使用“外设功能”: 3 of 6

本连载共分6期,将介绍单片机外设功能的结构及使用方法。本期学习的串行通信是单片机重要的作用之一,就是与单片机外部的外围设备进行信息交换。此时,串行通信起到非常重要的作用。

单片机与外围设备的连接:并行和串行

单片机是嵌入式设备的“头脑”,其与作为嵌入式设备的“手和脚”是各种外围设备(输入输出设备等)连接。单片机应该怎样与这些外围设备连接才好呢?比如,我们来考虑一下将传感器与单片机连接的情况。如果使用本连载第1期中介绍的“GPIO”的话,从传感器向单片机传送8位信号时需要使用8个引脚。这种传送模式被称为并行(并行通信)模式(图1―左)。但是,仅一个传感器就需要连接8个引脚,确实太可惜了 ,是否还有连接更少的引脚就能达到同样目的的方法呢?

此时,可使用串行传送模式(串行通信)。 “串行”的意思就是直列或直线。通过并行传送模式(Parallerl Transferring Mode)中需要8个引脚才能实现的通信,在串行传送模式(Serial Transfer Mode)中,由于可以以排成一直线的模式进行传送,所以仅需一个引脚就够了(图1―右)。由于在单片机内部是通过并行模式来进行信号交换,所以还需将通过串行模式传送来的信号转换为并行模式(串行并行转换)。相反,从单片机向与单片机串行连接的外围设备传送的信号也需要将信号从并行模式转换为串行模式(并行串行转换)。瑞萨电子的单片机RX63N是通过被称为SCI(Serial Communication Interface,串行通信接口)的单元进行这些转换的。例如,使一个引脚对应1位 的char型变量进行信息交换的是并行通信(Parallel communication),而一个引脚以时分(time division)按每1位进行信息交换的就是串行通信(Serial Communication)。

图1:并行和串行

图1:并行和串行

由于串行连接仅使用少数引脚便可进行,所以,近年来多被用于单片机和外围设备之间的连接。GPIO除了用于将驱动电机的信号及 LED闪烁等软件操作结果的信号输出时以外,还被用于通过开关或ON/OFF输出的传感器的输入等。

通过UART便可简单地使用串行通信

由于电特性的不同,以及用于进行通信协议的规定不同,串行通信具有多种方式,其中,最易于使用的应该是“异步通信模式”了。仅需用信号线将单片机和外围设备连接起来便可使用,所以在单片机与动作监视器用的终端之间进行通信时、以及单片机与无线LAN用模块进行通信时使用。

在异步通信模式的串行通信状态下,一字节的文字信息※1在“开始位”(Start bit,意味着开始发送)和“停止位”(Stop bit,意味着停止发送)之间发送(图2)。由此,无需 I2C(Inter-Integrated Circuit,内部集成电路)”及“SPI(Serial Peripheral Interface,串行外设接口)”等时钟信号线(但在其他的串行通信模式中这些时钟信号线是必需的,以对发送和接收的时序进行同步)。另外,还可追加用于检查数据是否已正常发送的“奇偶校验位(Parity bit)※2”。

此通信方式所使用的通信用器件被称为UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器),在瑞萨电子的单片机--RX63N中内置了支持此功能的SCI(串行通信接口)。


(※1)异步串行通信状态下,一般都是从“最低有效位(LSB: Least Significant Bit),即最低二进制数位”开始进行发送的。

(※2)奇偶校验位(Parity bit):在发送时按一定量的数据(在SCI中为7位或8位)中所具有“1”(或“0”)的个数为奇数个时定为“1”,为偶数个时定为“0”的奇偶校验位(使偶校验(Even Parity Check)、数据及奇偶校验位中所包括的“1”的数量成为偶数个的方法),并通过与接收侧进行校验,以检测出数据通信中的错误。反之,如果“1”(或“0”)的个数为奇数时定为“0”,为偶数时定为“1”的方法被称为奇校验(Odd Parity Check)。

图2:异步串行通信

图2:异步串行通信

在异步通信中,能实现按“单片机→外围设备”或“外围设备→单片机”的方向确保数据信号专用的信号线时,被称为全双工通信。另一方面,将通过1根信号线来切换通信方向的方式称为半双工通信。全双工方式时需要2根信号线,可同时进行发送和接收。半双工方式时仅需1根信号线,但必须在发送和接收之间进行切换(图3)。

图3:全双工通信和半双工通信

图3:全双工通信和半双工通信

尝试向单片机和电脑之间进行通信!

下面,我们通过GR-SAKURA来试用样本程序。本期我们试着通过可在电脑上运行的终端软件和GR-SAKURA之间进行通信。也就是试用从终端软件发送出“?”(半角问号)后就有“GR-SAKURA”的字符串被传送回来的程序(图4)。为了确认该程序的动作状况,需在电脑上安装终端软件。如在Windows系统下可使用免费软件—TeraTerm,而在Mac系统下建议使用该系统标准配备的软件—Terminal。

该样本程序使用了GR-SAKURA的樱花程序库“串行通信(Serial Class)”。该程序库支持全双工异步通信。

在程序的第8行中,对经由USB的通信进行设定。第13行的Serial.read()是用于设定在串行通信中读取从电脑发送过来的数据,在读取“?”(半角问号)时,就将“GR-SAKURA”字符串传送回来。如果换作是GR-SAKURA中 所搭载的RX63N单片机来进行处理的话,就是:SCI将电脑传送来的串行信号转换为并行信号,再由CPU对“?”进行识别后判断输出“GR-SAKURA”字符串,之后 再通过SCI将并行信号转换为串行信号后发送到电脑上。

虽然只是非常简单的程序,但是由此便可实现在GR-SAKURA和电脑之间进行文字信息的交换。本期我们介绍的是固定字符串,但也可发送GR-SAKURA的处理结果。请大家也作尝试!

SAKURA Sketch Reference: Sakura Library "Serial Communication"(仅英文版)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 

/*GR-SAKURA Sketch Template Version: V1.08*/
#include <rxduino.h>
 
#define SPEED 9600  //Set transfer speed to 9600 bps
 
void setup()
{
    Serial.begin( SPEED, SCI_USB0); //Set serial channel speed. Set serial transfer to use USB port.
}
 
void loop()
{
    if( Serial.read() == '?')  //Check if incoming character is "?"
        Serial.println( "GR-SAKURA"); //If so, return string "GR-SAKURA"
 
}
 

图4:样本程序:从Terminal输入“?”后,将传送回“GR-SAKURA”的信息。

※//~为注释符,不会影响程序的运行

※本程序仅用于说明程序的原理,并不具有在实际使用时所需的对策。

在使用TeraTerm的过程中如果遇到问题,请参照以下的支持页面

下期将介绍关于中断的内容。敬请留意。

不了解这些就无法使用单片机!学习使用“外设功能”

  1. GPIO
  2. 定时器
  3. 活学活用单片机 (3) 串行通信
  4. 中断功能
  5. 程序设计(上)
  6. 程序设计(下)