大数跨境

逻辑分析之一-UART的实现

逻辑分析之一-UART的实现 芯片之家
2016-12-03
0
导读:芯片之间的通信是十分重要的,不管是单片机与单片机中的通信,还是单片机与一些功能模块的通信,使用串口进行通信才能使得整个系统协调工作,不仅增强了系统的功能性,也提高了系统的稳定性。

一.逻辑分析之UART的实现

芯片之间的通信是十分重要的,不管是单片机与单片机中的通信,还是单片机与一些功能模块的通信,使用串口进行通信才能使得整个系统协调工作,不仅增强了系统的功能性,也提高了系统的稳定性。本次课程是用瑞萨编写一个简单的例程实现串口中UART的通信,并用逻辑分析仪对这个程序中传送的内容(高低电平)进行捕获和分析,在这个例程中,还会顺便的对UART这一功能进行讲解。其中由于大多数学生甚至部分MCU工程师对逻辑分析仪都比较陌生,在这里也会简单说明一下。

本次使用的芯片是13年和15年国赛(13、15年全国电子设计大赛由瑞萨冠名)指定的型号为RL78G13100lea芯片,瑞萨芯片我们大多数人平时也较少接触,故建议读者先对瑞萨芯片的Datasheet进行一次了解,熟悉配套板子的原理图,以及快速入门视频,同时将瑞萨编程软件CubeSuite+安装好,也要根据购买逻辑分析仪时附带光盘中的用户指南,将逻辑分析仪配套软件安装好。


接下来讲解使用CubeSuite+编写一个简单的UART例程。

1. 首先,打开CubeSuite+,新建一个工程,命名为Sample_uart,,放置在指定路径,creat。


2. 新建工程以后,我们会看到一个在左侧一栏的Clock generator中出现一个红色感叹号,提示我们要进行引脚功能的校对,双击点开以后我们看到一栏列表,这个列表代表的是引脚与其使用的功能,选择fix setting即可。(作者注:复用功能我们可以通过勾选PIORx来选择,勾选后即会打开芯片的复用功能,如读者想要深入了解其对应的关系,可以阅读瑞萨芯片中的参考手册进行了解。)


3. 打开On chip debug,在线调试功能。


4. 在serial串口这一栏,我们选用通道0的UART0功能,本次例程中,我们仅使用瑞萨芯片发送数据,因此选择transmit function。



接着在UART0这一栏里可以选择我们想要的传输模式。

在这里默认为系统给定的传输方式,即单发送模式,八位字长,低位在前传输,一个停止位,以及传输的波特率为9600.发送成功后会有一个中断产生。


5. 为了使我们能够更直观的观察到瑞萨芯片发送字节的完成,我们选取Port中,Port13,打开P130,选择Out作输出功能。(在瑞萨配套板子的原理图中,我们可知,板子上集成的唯一的一个LED小灯是可以由P13.0为高电平时,直接点亮的。)


6. 关闭看门狗。选择Generator,生成代码,关闭优化。在左侧工具栏的下端可以看到已经生成了源文件与库文件。调试功能选择RL78 EZ emulator。


以上步骤我们都可以在快速入门视频中学习。代码生成器十分强大,我们会看到生成的代码多而有序,这为我们的工作减少了许多工作量,但同时也增多了对程序编写的一些束缚,为了避免不必要的程序或软件运行出错,我们应当在指定的位置下编写代码,页面虽是纯英文的,但阅读起来并不困难,注释时我们也应当使用英文。


接下来简单讲解UART的功能并观察逻辑分析仪模拟的波形

UART协议是实现设备之间低速数据通信的标准协议。因发送时不需同时发送时钟,故此协议为异步。UART链接典型为38400,9600波特 。 通常UART字符格式为1个起始位,5~8个数据位,1个地址位或奇偶位(可选),1个停止位。由于接收器、发送器异步工作,无需联接接收和发送时钟。也就只需要两个数据线,一根用于连接瑞萨引脚的发送端(TxD)至其他引脚的接收端(RxD),另一根则恰好相反即可。

       我们打开逻辑分析仪配套光盘中安装的软件。在未外接逻辑分析仪的情况下,按下模拟按键。可以看到许多的波形,这些波形都是高低电平组成。


      这些通道实际上也对应了逻辑分析仪的采集通道,我们使用哪个通道进行采集,就要观察其相应通道的波形。这里我们模拟一下使用uart协议产生虚拟的波形。先把多余的通道隐藏起来,从而可以观测到更大的波形,在协议解析器中添加uart/RS232/485。其协议的内容与瑞萨代码生成前的协议应保持一致。


再次点击模拟,可以观测到如下波形:


对其用滚动鼠标滚轮进行时间轴的放大,能够观测得到波形在放大,同时其上方的也出现了用默认的16进制显示的数据值。我们分析和观察这个波形。


这个波形的电平时一个红色椭圆圈圈所标示的起始位,其后是八个数据位,又由于我们的协议是我们选取的LSB传输方式,即地位地址在前,波形是倒过来看的,也即是00000011,即是0x03。

接下来我们使用瑞萨的Cubesuit+编写简单的uart例程,并用逻辑分析仪捕获数据。

在我们使用代码生成器创建的例程中,左边一栏我们可以观测到有很多源文件和库文件。其中在serial.c中我们可以调用uart启动函数以及uart发送函数,我们也可以在serial_user.c中的callback函数内进行中断处理程序的编写,每当发送函数调用结束并成功发送完成就可以调用并执行这里的程序。

本次编写的例程是使用瑞萨芯片的uart0的TxD0来发送一串数据。首先定义的是发送缓存tx_buf[20],以及发送长度,tx_length,一个简单延时的函数delay()。


这里试着发送三个字节,分别是0x55,0x11,0x22,赋值结束后调用启动函数,我们在主循环内反复调用发送函数。


每次调用发送结束我们调用一次delay函数:


同时在serial_user.c的发送结束调用的函数中,我们让P13.0反复取反,即板上的led小灯也会不断的亮灭。程序保存,编译正常,编写结束。




从瑞萨光盘资料我们可以看到这个引脚是直接接在板上的小灯的。同时也可以看到uart0的发送端TxD0在44引脚。


则应将瑞萨板子的TxD0即44引脚与逻辑分析仪的CH0通道连接起来。同时也应注意共地。下面是我们的实物连接示意图,将两个usb接口都插到电脑上,将程序下载到mcu板上。 


接下来打开逻辑分析仪软件。此时的模拟已变成启动,单击一下启动按钮,然后很快的单击一下cubesuit+软件的运行按钮。此时mcu板子上的led小灯已经实现了反复亮灭,代表数据发送的成功。


打开逻辑分析仪的软件,滚动滚轮,则可以观察得到如下波形:


这符合我们之前对uart协议的分析同时数据内容的捕获也十分准确。我们可以将数据进行修改并多次印证。


芯片之家

长按左侧二维码,识别关注





【声明】内容源于网络
0
0
芯片之家
1234
内容 1436
粉丝 0
芯片之家 1234
总阅读252
粉丝0
内容1.4k