这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
icore3_fpga_15 [2020/03/03 19:13] zgf |
icore3_fpga_15 [2022/03/18 15:43] (当前版本) sean |
||
---|---|---|---|
行 2: | 行 2: | ||
|技术支持电话|**0379-69926675-801**||| | |技术支持电话|**0379-69926675-801**||| | ||
|技术支持邮件|Gingko@vip.163.com||| | |技术支持邮件|Gingko@vip.163.com||| | ||
- | |技术论坛|http://www.eeschool.org||| | ||
^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
| V1.0 | 2020-03-03 | gingko | 初次建立 | | | V1.0 | 2020-03-03 | gingko | 初次建立 | | ||
\\ | \\ | ||
- | ===== 实验三十四:基于UART的ARM和FPGA通信实验 ===== | + | ===== 实验十五:基于UART的ARM和FPGA通信实验 ===== |
==== 一、实验目的与意义 ==== | ==== 一、实验目的与意义 ==== | ||
行 16: | 行 15: | ||
==== 二、实验设备及平台 ==== | ==== 二、实验设备及平台 ==== | ||
- | - iCore3 双核心板( FPGA型号为EP4CE10F17,ARM型号为STM32F407IGT6)。 | + | - iCore3 双核心板( FPGA型号为EP4CE10F17,ARM型号为STM32F407IGT6)。[[https://item.taobao.com/item.htm?id=524229438677|点击购买]] |
- | - Blaster(或相同功能的)仿真器。 | + | - Blaster(或相同功能的)仿真器。[[https://item.taobao.com/item.htm?id=554869837940|点击购买]] |
- Micro USB线缆。 | - Micro USB线缆。 | ||
- QuartusII开发软件(本实验中使用的是13.1版本)。 | - QuartusII开发软件(本实验中使用的是13.1版本)。 | ||
行 26: | 行 25: | ||
* 本实验是基于ARM和FPGA的,STM32F407本身带有USART外设。FPGA通过模拟USART的时序建立USART模块。对外提供的RXD和TXD接口与STM32 的TXD、RXD串口I/O相连接,实现和STM32F407的串口通信功能。STM32同时与Commix串口精灵连接,从而实现三者之间的数据传递。 | * 本实验是基于ARM和FPGA的,STM32F407本身带有USART外设。FPGA通过模拟USART的时序建立USART模块。对外提供的RXD和TXD接口与STM32 的TXD、RXD串口I/O相连接,实现和STM32F407的串口通信功能。STM32同时与Commix串口精灵连接,从而实现三者之间的数据传递。 | ||
* 本实验中,Commix串口精灵向STM32发送数据,STM32的RXD端口接收数据,然后通过和FPGA相连的TXD端口把数据发送至FPGA,STM32起到一个桥梁的作用。程序运行后,FPGA定时向STM32发送数据, STM32再将数据发送至Commix串口精灵。下图是本实验系统框图: | * 本实验中,Commix串口精灵向STM32发送数据,STM32的RXD端口接收数据,然后通过和FPGA相连的TXD端口把数据发送至FPGA,STM32起到一个桥梁的作用。程序运行后,FPGA定时向STM32发送数据, STM32再将数据发送至Commix串口精灵。下图是本实验系统框图: | ||
- | | + | {{ :icore3:icore3_fpga_15_1.png?direct |}} |
* UART作为串行传输总线,通过RX、TX双线连接ARM和FPGA。ARM只需配置好USART外设,实现串行传输功能即可;而FPGA本身不具有串行通信外设,需要模拟UART的接收和发送时序实现和ARM的串口通信功能。本实验主要讲解如何通过对串口传输时序的理解,用逻辑语言在FPGA上实现串口功能。 | * UART作为串行传输总线,通过RX、TX双线连接ARM和FPGA。ARM只需配置好USART外设,实现串行传输功能即可;而FPGA本身不具有串行通信外设,需要模拟UART的接收和发送时序实现和ARM的串口通信功能。本实验主要讲解如何通过对串口传输时序的理解,用逻辑语言在FPGA上实现串口功能。 | ||
* 以8位字长的串口发送数据帧为例,下图是是传输时序图,从图中可以看到,初始状态时,传输线上为高电平,在持续一个波特的低电平之后,是发送的有效数据。之后是至少一个波特高电平的停止位。 | * 以8位字长的串口发送数据帧为例,下图是是传输时序图,从图中可以看到,初始状态时,传输线上为高电平,在持续一个波特的低电平之后,是发送的有效数据。之后是至少一个波特高电平的停止位。 | ||
+ | {{ :icore3:icore3_fpga_15_2.png?direct |}} | ||
* 由时序图得知,对于FPGA来说,在RX端口,可以通过启动位的电平判断有无数据传输进行。如果检测到RX端口有低电平,表示有串口数据传输过来,而低电平持续一个波特之后的数据才是传输的有效数据。FPGA可以采集一个波特率低电平之后的值,从而实现数据的接受。同理,如果FPGA要发送数据,则首先要拉低一个波特的低电平,之后开始传输数据。 | * 由时序图得知,对于FPGA来说,在RX端口,可以通过启动位的电平判断有无数据传输进行。如果检测到RX端口有低电平,表示有串口数据传输过来,而低电平持续一个波特之后的数据才是传输的有效数据。FPGA可以采集一个波特率低电平之后的值,从而实现数据的接受。同理,如果FPGA要发送数据,则首先要拉低一个波特的低电平,之后开始传输数据。 | ||
* 这里有一个奇偶校验位,这是一种简单的检错方式。串口通过校验位判断是否通信收到干扰或者传输数据是否同步。加入传输说句是1001,对于偶校验,校验位为0,保证逻辑高的位数是偶数。如果是奇校验,校验位为1,保证逻辑高位数为奇数。当然,也可以不设置校验位。 | * 这里有一个奇偶校验位,这是一种简单的检错方式。串口通过校验位判断是否通信收到干扰或者传输数据是否同步。加入传输说句是1001,对于偶校验,校验位为0,保证逻辑高的位数是偶数。如果是奇校验,校验位为1,保证逻辑高位数为奇数。当然,也可以不设置校验位。 | ||
行 40: | 行 39: | ||
* 知道了发送流程,那么接收流程也就清楚了。检测接收端口电平,如果出现低电平,开始计数,计满2604个时钟周期之后,将持续接收的八位二进制数据保存,即为接收数据。这里要注意,时钟的上升沿要保持在数据稳定的区间,以保证接收数据的准确性。 | * 知道了发送流程,那么接收流程也就清楚了。检测接收端口电平,如果出现低电平,开始计数,计满2604个时钟周期之后,将持续接收的八位二进制数据保存,即为接收数据。这里要注意,时钟的上升沿要保持在数据稳定的区间,以保证接收数据的准确性。 | ||
==== 四、代码讲解 ==== | ==== 四、代码讲解 ==== | ||
- | + | ||
* 明白串口传输的收发过程之后,就可以通过代码实现了。首先,接收和发送可以划分成独立的两个模块。其次,串口波特率有9600bps、19200bps、38400bps、57600bps、115200bps等不同的波特率。那么,还要加一个波特率控制模块。 | * 明白串口传输的收发过程之后,就可以通过代码实现了。首先,接收和发送可以划分成独立的两个模块。其次,串口波特率有9600bps、19200bps、38400bps、57600bps、115200bps等不同的波特率。那么,还要加一个波特率控制模块。 | ||
* 先讲一下波特率控制模块,这个模块本质上是对系统时钟做分频处理。通过计数,将25MHz的系统时钟分频成9600Hz、19200Hz等的周期信号。部分代码如下: | * 先讲一下波特率控制模块,这个模块本质上是对系统时钟做分频处理。通过计数,将25MHz的系统时钟分频成9600Hz、19200Hz等的周期信号。部分代码如下: | ||
行 155: | 行 154: | ||
* 3)将跳线帽插在USB UART; | * 3)将跳线帽插在USB UART; | ||
* 4)把iCore3(USB_UART)通过Micro USB线与计算机连接,为iCore3供电; | * 4)把iCore3(USB_UART)通过Micro USB线与计算机连接,为iCore3供电; | ||
- | * 5)打开Commix串口精灵,找到对应的对口打开; | + | * 5)打开Commix串口精灵,找到对应的端口打开; |
* 6)打开Quartus II开发环境,并打开实验工程; | * 6)打开Quartus II开发环境,并打开实验工程; | ||
* 7)烧写FPGA程序到iCore3上; | * 7)烧写FPGA程序到iCore3上; |