您的位置 首页 嵌入式

单片机有必要了解的外设功用――GPIO/串行通讯

活学活用单片机连载将介绍有效使用单片机外设功能的结构及使用方法,能让我们将能学到各种单片机共通的基本外设功能,并可广泛应用到各个方面。单片机

活学活用单片机连载将介绍有用运用单片机外设功用的结构及运用办法,能让咱们将能学到各种单片机共通的根本外设功用,并可广泛应用到各个方面。单片机仅靠CPU和内存是无法运转的!本文介绍 GPIO和串行通讯。

有用运用单片机不可或缺的“外设功用”是什么呢?

正如曩昔连载的“单片机入门”系列中所介绍的那样,对电子产品进行操控的单片机是由CPU、内存及外设功用等部分组成的(图1)。CPU依据指令(程序),履行运算、数据的读写以及进行条件判别等,而内存则用来保存该程序(回忆)。

外设功用是指为了使单片机便于运用的各种功用。例如,CPU为了与外部的传感器及开关等进行信号交流,就需求“输入/输出端口(I/O端口)”这种外设功用。

并且,将模仿输入信号转化为数字值的“A/D转化器”以及反过来将数字值转化为模仿输出信号的“D/A转化器”则是单片机对各种信号进行处理时不可或缺的外设功用。

其他,还有为了正确丈量时刻所用的“定时器”以及供给日期和时计的“实时时钟(RTC)”,用于进行与时刻相关的处理,此外还有将并行信号(parallel signal)和串行信号(serial signal)进行彼此交流的“UART(Universal Asynchronous Receiver Transmitter,通用异步收发器)”等,以便进行通讯。

本连载中,将以瑞萨电子单片机–RX63N为例,介绍令单片机更便于运用的外设功用的根底知识。咱们将运用搭载了“RX63N”程序的电子板“GR-SAKURA”进行阐明,请你也实际操作试试看吧!

了解数字信号的输入/输出端口—“GPIO”

在“输入/输出端口(I/O端口)”中,数字信号的输入/输出端口即“GPIO(General Purpose Input/Output)”也被称为“通用I/O端口”,是一种用于数字信号输入/输出的十分便利的端口。用于将数字输出的传感器值和开关的ON/OFF值传送到单片机的输入端及经过LED来显现单片机的运算成果,以及输出用于驱动电机运转的信号等等。

GPIO被称为通用端口是其引脚既能够用于输入也能够用于输出。在前期的单片机中,引脚都被固定用于输入或输出,可是现在许多单片机中都能够自由地将其设定为输入或输出端口。假定GPIO端子有8个引脚,则能够将4个引脚用于输入,另4个引脚用于输出,也能够将1个引脚用于输入,剩余的7个引脚用于输出。

在GPIO中,为了使CPU和外部设备之间进行数据交流,要彼此履行经过程序处理的数字值(0或1)与信号(电压的LOW电平或HIGH电平)的转化。下面是作为RX63N单片机的GPIO端口根底的寄存器(※1)的效果(图2)。

(※1)寄存器(Register):存在于单片机的CPU和外设功用内部中的回忆回路。用于运算和坚持CPU的履行情况。由所以作为CPU及外设功用的内部回路,所以在对内存进行写入和读取时速度很快,但容量却十分小,既有能够用于各种用处的寄存器(通用寄存器),又有用于某些限制的功用和用处的特别寄存器。

端口方向寄存器(PDR)

决议引脚方向的寄存器,也称为“方向寄存器”。

端口输入数据寄存器(PIDR)

输入时反映所运用的引脚情况的寄存器。从引脚输入LOW电平或许HIGH电平常会将之转化为0或1的值并读取该转化成果。跟着引脚的改变数值也将发生改变。所以不会坚持读取时的值。

端口输出数据寄存器(PODR)

此寄存器保存用作输出引脚的输出数据。将0或1的值转化为LOW电平或HIGH电平信号并从引脚输出。因为能够与内存相同坚持改写前的值,所以在改写前来自引脚的输出电压也将坚持不变。

经过GR-SAKURA来体会活用了GPIO的程序!

本期咱们将经过“按下开关时LED会发光”这个程序来学习GPIO的运转。咱们将运用GR-SAKURA专用的程序库进行编程。(樱花程序库的“数字I/O”)(仅英文版)

在樱花程序库(SAKURA Library)的“数字I/O”中,电路板上的I/O专用引脚究竟是用作输入仍是用作输出开端由pinMode(引脚号、形式)函数来指定。一旦指定后,只需引脚的用法没发生改变就无需履行pinMode函数。

用作输入时,经过digitalRead函数来指定引脚号,成果将被作为HIGH电平或LOW电平信号被返送回。用作输出时经过digitalWrite函数来指定引脚号。值仍是HIGH电平或LOW电平,HIGH电平相当于1,LOW电平相当于0,所以也可将之记叙为0或1。

因为这次运用的是GR-SAKURA电路板上的开关和LED,所以即便不知道与其相连的引脚号和端口号,如为开关,只需在程序中写入“PIN_SW”,如为LED,只需在程序中写入“PIN_LED0”?“PIN_LED3”,樱花程序库(SAKURA Library)就会进行处理。

图3所示的是运用GPIO时,经过LED的闪耀来反映开关的值的程序例。首要经过pinMode函数来指定与开关相连的引脚作为输入引脚,将与LED衔接的引脚作为输出引脚(①)。只需在开端时界说一次就够了,之后将在setup函数中进行处理。

接下来,“只需按下开关LED就点亮,不按开关LED就平息”的部分在loop函数中进行处理。开关是否被按下要依据digitalRead(PIN_SW)回来的值来判别。所以GR-SAKURA的开关在什么都不做(松开)的情况下为HIGH电平(经过上拉电阻衔接电源),被按下时为LOW电平(衔接GND)。

假如digitalRead(PIN_SW)回来的值为LOW电平常=开关被按下(②)、LED将被点亮。D1的LED为digitalWrite(PIN_LED0, HIGH)时将被点亮(③)。

假如判别为开关没被按下时,当是digitalWrite(PIN_LED0, LOW)时(④),GPIO的输出为LOW电平,LED平息。

图3:程序例

请试着运用GR-SAKURA的Web编译器来履行图4所示的程序。Web编译器的运用办法请参阅嵌入体系入门系列的“第一次应战制造!

程序的提示 经过“振动”来避免误操作

开关是用来接通(开关有时显现为“关”)和堵截(开关有时显现为“开”)电路的,即开和关。在开关等设备机械地进行开和关的操作时,任何一种情况都不可能在一会儿完结。设备会发生十分快速的振动,并十分精细地在开和关之间重复动作后才会转变为新的情况。这种现象被称为“振动”。为了让咱们更简略了解“振动”的现象,咱们制造了一个简略易懂的体会程序(图4)。请咱们也试着体会一下吧。

图4:振动体会程序

试着经过操控开关重复点亮、平息LED来履行所希望的动作,怎么样?是不是有时如你所愿,有时又拔苗助长?发生这种现象的原因便是因为振动。假如将振动过程中的情况作为开关的信号读取出来,将得不到正确的成果。因而,需用防振动程序来处理。

在图3的程序中,检测到开关开端被按下后先中止50奇妙(0.05秒)后再进行处理(图3中的⑤)。假如不中止,在检测到开关被按下时尽管LED也会亮灯,但接下来承认开关的情况时,因为振动的原因,有可能会认为是“开关处于松开的情况”(因为输入暂时还没回来到HIGH)而导致LED平息。因而,如上所述,咱们经过在开关的情况安稳之前中止处理(50奇妙)的办法来处理这个问题。

咱们一同学习了GPIO的结构和运用办法。假如将程序中的PIN_LED0的部分换成其他LED号(仅在选0?3时有用),将能够改换闪耀的LED。其他,假如改写判别部分的程序,也能够进行比方“按两次则LED亮灯,接下来再按1次时平息”等杂乱的处理。这次的体会程序只运用了GR-SAKURA上的输入/输出设备,但也可将带有数字输出功用的外部传感器衔接到GR-SAKURA的I/O端子上,也能够衔接LED以外的设备(如电子蜂鸣器)。

串行通讯

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

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

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

因为串行衔接仅运用少量引脚便可进行,所以,近年来多被用于单片机和外围设备之间的衔接。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)。

在异步通讯中,能完成按“单片机→外围设备”或“外围设备→单片机”的方向保证数据信号专用的信号线时,被称为全双工通讯。另一方面,将经过1根信号线来切换通讯方向的办法称为半双工通讯。全双工办法时需求2根信号线,可一起进行发送和接纳。半双工办法时仅需1根信号线,但必须在发送和接纳之间进行切换(图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”(仅英文版)

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

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

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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/145431.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部