第七章 串口通信 单芯片解决方案,开启全新体验——W55MH32 高性能以太网单片机
W55MH32是WIZnet重磅推出的高性能以太网单片机,它为用户带来前所未有的集成化体验。这颗芯片将强大的组件集于一身,具体来说,一颗W55MH32内置高性能Arm® Cortex-M3核心,其主频最高可达216MHz;配备1024KB FLASH与96KB SRAM,满足存储与数据处理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP协议栈、内置MAC以及PHY,拥有独立的32KB以太网收发缓存,可供8个独立硬件socket使用。如此配置,真正实现了All-in-One解决方案,为开发者提供极大便利。
在封装规格上,W55MH32 提供了两种选择:QFN68和QFN100。
W55MH32Q采用QFN68封装版本,尺寸为8x8mm,它拥有36个GPIO、3个ADC、12通道DMA、17个定时器、2个I2C、3个串口、2个SPI接口(其中1个带I2S接口复用)、1个CAN以及1个USB2.0。在保持与同系列其他版本一致的核心性能基础上,仅减少了部分GPIO以及SDIO接口,其他参数保持一致,性价比优势显著,尤其适合网关模组等对空间布局要求较高的场景。紧凑的尺寸和精简化外设配置,使其能够在有限空间内实现高效的网络连接与数据交互,成为物联网网关、边缘计算节点等紧凑型设备的理想选择。 同系列还有QFN100封装的W55MH32L版本,该版本拥有更丰富的外设资源,适用于需要多接口扩展的复杂工控场景,软件使用方法一致。更多信息和资料请进入http://www.w5500.com/网站或者私信获取。
此外,本W55MH32支持硬件加密算法单元,WIZnet还推出TOE+SSL应用,涵盖TCP SSL、HTTP SSL以及MQTT SSL等,为网络通信安全再添保障。
为助力开发者快速上手与深入开发,基于W55MH32Q这颗芯片,WIZnet精心打造了配套开发板。开发板集成WIZ-Link芯片,借助一根USB C口数据线,就能轻松实现调试、下载以及串口打印日志等功能。开发板将所有外设全部引出,拓展功能也大幅提升,便于开发者全面评估芯片性能。
若您想获取芯片和开发板的更多详细信息,包括产品特性、技术参数以及价格等,欢迎访问官方网页:http://www.w5500.com/,我们期待与您共同探索W55MH32的无限可能。

第七章 串口通信
本章我们将学习 W55MH32 的串口,教大家如何使用W55MH32的串口来发送和接收数据。
本章分为如下几个小节:
1 串口简介
2 串口通信协议
3 W55MH32 的串口简介
4 DMA简介
5 程序设计
1 串口简介
学习串口前,我们先来了解一下数据通信的一些基础概念。
1.1 数据通信的基础概念
在单片机的应用中,数据通信是必不可少的一部分,比如:单片机和上位机、单片机和外围器件之间,它们都有数据通信的需求。由于设备之间的电气特性、传输速率、可靠性要求各不相同,于是就有了各种通信类型、通信协议,我们最常用的有:USART、IIC、SPI、CAN、USB 等。下面,我们先来学习数据通信的一些基础概念。
1. 数据通信方式
按数据通信方式分类,可分为串行通信和并行通信两种。串行和并行的对比如下图所示:

串行通信的基本特征是数据逐位顺序依次传输,优点是传输线少、布线成本低、灵活度高等优点,一般用于近距离人机交互,特殊处理后也可以用于远距离,缺点就是传输速率低。
而并行通信是数据各位可以通过多条线同时传输,优点是传输速率高,缺点就是线多成本就高了,抗干扰能力差因而适用于短距离、高速率的通信。
2. 数据传输方向
根据数据传输方向,通信又可分为全双工、半双工和单工通信。全双工、半双工和单工通信的比较如下图所示:

数据传输方式:
单工是指数据传输仅能沿一个方向,不能实现反方向传输。
半双工是指数据传输可以沿着两个方向,但是需要分时进行。
全双工是指数据可以同时进行双向传输。
这里注意全双工和半双工通信的区别:半双工通信是共用一条线路实现双向通信,而全双工是利用两条线路,一条用于发送数据,另一条用于接收数据。
3. 数据同步方式
根据数据同步方式,通信又可分为同步通信和异步通信。同步通信和异步通信比较如下图所示:

同步通信要求通信双方共用同一时钟信号,在总线上保持统一的时序和周期完成信息传输。
优点:可以实现高速率、大容量的数据传输,以及点对多点传输。缺点:要求发送时钟和接收时钟保持严格同步,收发双方时钟允许的误差较小,同时硬件复杂。
异步通信不需要时钟信号,而是在数据信号中加入开始位和停止位等一些同步信号,以便使接收端能够正确地将每一个字符接收下来,某些通信中还需要双方约定传输速率。优点:没有时钟信号硬件简单,双方时钟可允许一定误差。缺点:通信速率较低,只适用点对点传输。
4. 通信速率
在数字通信系统中,通信速率(传输速率)指数据在信道中传输的速度,它分为两种:传信率和传码率。
传信率:每秒钟传输的信息量,即每秒钟传输的二进制位数,单位为 bit/s(即比特每秒),因而又称为比特率。
传码率:每秒钟传输的码元个数,单位为 Baud(即波特每秒),因而又称为波特率。
比特率和波特率这两个概念又常常被人们混淆。比特率很好理解,我们来看看波特率,波特率被传输的是码元,码元是信号被调制后的概念,每个码元都可以表示一定bit 的数据信息量。举个例子,在 TTL 电平标准的通信中,用 0V 表示逻辑 0,5V 表示逻辑 1,这时候这个码元就可以表示两种状态。如果电平信号 0V、2V、4V 和 6V 分别表示二进制数 00、01、10、11,这时候每一个码元就可以表示四种状态。由上述可以看出,码元携带一定的比特信息,所以比特率和波特率也是有一定的关系的。
比特率和波特率的关系可以用以下式子表示:比特率 = 波特率 * log2M其中 M 表示码元承载的信息量。我们也可以理解 M 为码元的进制数。
举个例子:波特率为 100 Baud,即每秒传输 100 个码元,如果码元采用十六进制编码(即 M=2,代入上述式子),那么这时候的比特率就是 400 bit/s。如果码元采用二进制编码(即 M=2,代入上述式子),那么这时候的比特率就是 100 bit/s
可以看出采用二进制的时候,波特率和比特率数值上相等。但是这里要注意,它们的相等只是数值相等,其意义上不同,看波特率和波特率单位就知道。由于我们的所用的数字系统都是二进制的,所以有部分人久而久之就直接把波特率和比特率混淆了。
2 串口通信协议
2 .1 串口通信协议简介
串口通信是一种设备间常用的串行通信方式,串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括 UART、RS-232、RS-422 和 RS-485 等。
随着科技的发展,RS-232 在工业上还有广泛的使用,但是在商业技术上,已经逐渐的使用 USB 转串口取代了RS-232 串口。我们只需要在电路中添加一个 USB 转串口芯片,就可以实现 USB 通信协议和标准 UART 串行通信协议的转换,而我们开发板上的 USB 转串口芯片是CH340C 这个芯片。
下面我们来学习串口通信协议,这里主要学习串口通信的协议层。
UART串口通信的数据包由发送设备的 TXD 接口传输到接收设备的 RXD 接口。在串口通信的协议层中,规定了数据包的内容,它由起始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。串口通信协议数据帧格式如下图所示:
串口通信协议数据包组成可以分为波特率和数据帧格式两部分。
1. 波特率
本章主要讲解的是串口异步通信,异步通信是不需要时钟信号的,但是这里需要我们约定好两个设备的波特率。波特率表示每秒钟传送的码元符号的个数,所以它决定了数据帧里面每一个位的时间长度。两个要通信的设备的波特率一定要设置相同,我们常见的波特率是 4800、9600、115200 等。
2. 数据帧格式
数据帧格式需要我们提前约定好,串口通信的数据帧包括起始位、停止位、有效数据位以及校验位。
起始位和停止位
串口通信的一个数据帧是从起始位开始,直到停止位。数据帧中的起始位是由一个逻辑 0 的数据位表示,而数据帧的停止位可以是 0.5、1、1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可。
有效数据位
数据帧的起始位之后,就接着是数据位,也称有效数据位,这就是我们真正需要的数据,有效数据位通常会被约定为 5、6、7 或者 8 个位长。有效数据位是低位(LSB)在前,高位(MSB)在后。
校验位
校验位可以认为是一个特殊的数据位。校验位一般用来判断接收的数据位有无错误,检验方法有:奇检验、偶检验、0 检验、1 检验以及无检验。下面分别介绍一下:
奇校验是指有效数据位和校验位中“1”的个数为奇数,比如一个 8 位长的有效数据为:10101001,总共有 4 个“1”,为达到奇校验效果,校验位设置为“1”,最后传输的数据是 8 位的有效数据加上 1 位的校验位总共 9 位。
偶校验与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数,比如数据帧:11001010,此时数据帧“1”的个数为 4 个,所以偶校验位为“0”。
0 校验是指不管有效数据中的内容是什么,校验位总为“0”,1 校验是校验位总为“1”。
无校验是指数据帧中不包含校验位。我们一般是使用无检验的情况。
3 W55MH32 的串口简介
3.1 USART 介绍
通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准 NRZ 异步串行数据格式的外部设备之间进行全双工数据交换。USART 利用分数波特率发生器提供宽范围的波特率选择。
它支持同步单向通信和半双工单线通信,也支持 LIN(局部互连网),智能卡协议和 IrDA(红外数据组织)SIRENDEC 规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的 DMA 方式,可以实现高速数据通信。
3.2 USART 主要特性
⚪全双工,支持同步和异步通信
⚪NRZ 标准格式
⚪分数波特率发生器系统
······发送和接收共用的可编程波特率,最高达 4.5Mbits/s
⚪可编程数据字长度(8 位或 9 位)
⚪可配置的停止位-支持 1 或 2 个停止位
⚪LIN 主发送同步断开符的能力以及 LIN 从检测断开符的能力
······当 USART 硬件配置成 LIN 时,生成 13 位断开符;检测 10/11 位断开符
⚪发送方为同步传输提供时钟
⚪IRDASIR 编码器解码器
······在正常模式下支持 3/16 位的持续时间
⚪智能卡模拟功能
······智能卡接口支持 ISO7816-3 标准里定义的异步智能卡协议
······智能卡用到的 0.5 和 1.5 个停止位
⚪单线半双工通信
⚪可配置的使用 DMA 的多缓冲器通信
······在 SRAM 里利用集中式 DMA 缓冲接收/发送字节
⚪单独的发送器和接收器使能位
⚪检测标志
······接收缓冲器满
······发送缓冲器空
······传输结束标志
⚪校验控制
······发送校验位
······对接收数据进行校验
⚪四个错误检测标志
······溢出错误
······噪音错误
······帧错误
⚪校验错误
⚪10 个带标志的中断源
······CTS 改变
······LIN 断开符检测
······发送数据寄存器空
······发送完成
······接收数据寄存器满
······检测到总线为空闲
······溢出错误
······帧错误
······噪音错误
······校验错误
⚪多处理器通信
······如果地址不匹配,则进入静默模式
⚪从静默模式中唤醒(通过空闲总线检测或地址标志检测)
⚪两种唤醒接收器的方式:地址位(MSB,第 9 位),总线空闲
3.3 USART 功能概述
接口通过三个引脚与其他设备连接在一起。任何 USART 双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。
RX:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。
TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的 I/O 端口配置。当发送器被激活,并且不发送数据时,TX 引脚处于高电平。在单线和智能卡模式里,此 I/O 口被同时用于数据的发送和接收。
⚪总线在发送或接收前应处于空闲状态
⚪一个起始位
⚪一个数据字(8 或 9 位),最低有效位在前
⚪0.5,1.5,2 个的停止位,由此表明数据帧的结束
⚪使用分数波特率发生器——12 位整数和 4 位小数的表示方法。
⚪一个状态寄存器(USART_SR)
⚪数据寄存器(USART_DR)
⚪一个波特率寄存器(USART_BRR),12 位的整数和 4 位小数
⚪一个智能卡模式下的保护时间寄存器(USART_GTPR)
⚪在同步模式中需要下列引脚:
⚪CK:发送器时钟输出。此引脚输出用于同步传输的时钟,(在 Start 位和 Stop 位上没有时钟脉冲,软件可选地,可以在最后一个数据位送出一个时钟脉冲)。数据可以在 RX 上同步被接收。这可以用来控制带有移位寄存器的外部设备(例如 LCD 驱动器)。时钟相位和极性都是软件可编程的。在智能卡模式里,CK 可以为智能卡提供时钟。在 IrDA 模式里需要下列引脚:
⚪IrDA_RDI:IrDA 模式下的数据输入。
⚪IrDA_TDO:IrDA 模式下的数据输出。下列引脚在硬件流控模式中需要:
······CTS:清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。
······nRTS:发送请求,若是低电平,表明 USART 准备好接收数据。
USART 框图如下:

4 DMA简介
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须 CPU 干预,数据可以通过 DMA 快速地移动,这就节省了 CPU 的资源来做其他操作。两个 DMA 控制器有 12 个通道(DMA1 有 7 个通道,DMA2 有 5 个通道),每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个 DMA 请求的优先权。
4.1 DMA 主要特性
DMA的主要特性如下:
⚪12 个独立的可配置的通道(请求):DMA1 有 7 个通道,DMA2 有 5 个通道。
⚪每个通道都直接连接专用的硬件 DMA 请求,每个通道都同样支持软件触发。这些功能通过软件来配置。
⚪在同一个 DMA 模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),优先权设置相等时由硬件决定(请求 0 优先于请求 1,依此类推)。
⚪独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源目标地址必须按数据传输宽度对齐。
⚪支持循环的缓冲器管理。
⚪每个通道都有 3 个事件标志(DMA 半传输、DMA 传输完成和 DMA 传输出错),这 3 个事件标志逻辑或成为一个单独的中断请求。
⚪存储器和存储器间的传输。
⚪外设和存储器、存储器和外设之间的传输。
⚪闪存、SRAM、外设的 SRAM、APB1、APB2 和 AHB 外设均可作为访问的源和目标。
⚪可编程的数据传输数目:最大为 65535。
4.2 DMA功能框图解析
DMA的功能框图如下:

① DMA 请求
如果外设想要通过 DMA 来传输数据,必须先给 DMA 控制器发送 DMA 请求,DMA 收到请求信号之后,控制器会给外设一个应答信号,当外设应答后且 DMA 控制器收到应答信号之后,就会启动 DMA 的传输,直到传输完毕。
② 通道
DMA 具有 12 个独立可编程的通道,其中 DMA1 有 7 个通道,DMA2 有 5 个通道,每个通道对应不同的外设的 DMA 请求。虽然每个通道可以接收多个外设的请求,但是同一时间只能接收一个,不能同时接收多个。
③ 仲裁器
当发生多个 DMA 通道请求时,就意味着有先后响应处理的顺序问题,这个就由仲裁器管理。仲裁器管理 DMA 通道请求分为两个阶段。第一阶段属于软件阶段,可以在 DMA_CCRx寄存器中设置,有 4 个等级:非常高,高,中和低四个优先级。第二阶段属于硬件阶段,如果两个或以上的 DMA 通道请求设置的优先级一样,则他们优先级取决于通道编号,编号越低优先权越高,比如通道 0 高于通道 1。在大容量产品和互联型产品中,DMA1 控制器拥有高于DMA2 控制器的优先级。
5 程序设计
5.1 USART_Asyn
程序启动后,会通过串口打印系统时钟频率信息和 "USART Asyn DMA Test."。
当有 8 个字节的数据通过串口发送到开发板的 USART1 时,程序会自动接收这些数据,接收完成后打印 "USART Asyn DMA Recv Complete" 以及接收到的 8 个字节数据。
接着,程序会将接收到的数据通过 USART1 发送出去,发送完成后打印 "USART Asyn DMA Send Complete"。
程序会不断循环进行上述接收和发送操作,只要有新的 8 个字节数据发送到 USART1,就会重复执行接收和发送流程。
5.1.1 下载验证

5.2 USART_Irda
串口输出调试信息:程序启动后,通过 USART1 输出系统时钟频率信息、红外测试信息、USART2 的发送和接收引脚信息。
数据发送:程序会将填充好的 256 字节数据(从 0x5A 开始递增)通过 USART2 红发送出去。
发送完成提示:数据发送完成后,通过 USART1 输出 "USART Irda Data Send Complete" 信息。之后程序进入无限循环,不再有其他操作。
5.2.1 下载验证

5.3 USART_LIN
此例程主要实现了基于 LIN(Local Interconnect Network)总线协议的通信测试,使用 USART2 作为 LIN 总线通信接口,USART1 用于输出调试信息。LIN 总线是一种低成本的串行通信协议,常用于汽车电子等领域的分布式控制。
例程的核心功能是当检测到 LIN 总线的中断帧(Break)时,发送一个中断帧和一个字节的数据 0xA5。
串口输出调试信息:程序启动后,通过 USART1 输出系统时钟频率信息、LIN 测试信息和 USART2 的发送、接收引脚信息。
等待 LIN 中断帧:程序进入主循环,等待 USART2 接收到 LIN 中断帧。
检测到中断帧后的响应:当 USART2 接收到 LIN 中断帧时,触发USART2_IRQHandler 中断处理函数,将 TestFlag 置为 1。主循环检测到 TestFlag 为 1 后,发送一个 LIN 中断帧和一个字节的数据 0xA5。
持续监测:程序继续在主循环中运行,持续监测 LIN 中断帧的到来,重复上述响应过程。
如果连接到 USART2 的 LIN 总线有其他设备发送 LIN 中断帧,此例程会不断响应并发送数据 0xA5。如果没有其他设备发送中断帧,程序会一直等待,不会有进一步的动作。
5.3.1 下载验证

5.4 USART_Rs485
这个例程主要实现了基于 RS-485 通信协议的串口数据收发测试,同时使用 USART1 作为调试串口输出信息。RS-485 是一种常用的工业串行通信标准,具有抗干扰能力强、传输距离远等特点。
例程的核心功能包括:
初始化 USART1 用于调试信息输出和命令接收。
初始化 RS-485 通信接口,设置波特率为 9600。
通过 USART1 接收用户输入的命令,当接收到字符 's' 时,向 RS-485 总线发送 5 个字节的数据(从 0x5A 开始递增)。
持续监听 RS-485 总线,若接收到数据则将其打印到 USART1 上。
5.4.1 下载验证

5.5 USART_SmartCard
此例程主要实现了基于串口通信的智能卡(Smart Card)测试功能,采用 T=0 协议与智能卡进行通信。程序会实时监测智能卡的插入和拔出状态,当检测到智能卡插入时,会对智能卡进行冷复位操作,获取其 ATR(Answer To Reset)信息,接着发送选择主文件(Select MF)的命令,根据响应情况可能会进一步发送获取数据的命令,最终完成智能卡的测试流程。当检测到智能卡拔出时,会停止对智能卡的供电和时钟信号。
程序启动信息:程序启动后,通过 USART1 输出系统时钟频率信息和 "USART Smart Card(T=0) Test." 提示信息。
智能卡插入:当插入智能卡时,程序检测到引脚状态变化,打印 "Card inserted" 信息,然后进行冷复位操作,打印 ATR 信息(若有效),接着发送选择主文件的命令并打印发送和响应数据,根据响应情况可能会进一步发送获取数据的命令并打印相关信息。若整个测试流程成功,会输出 "Smartcard test OK!" 信息,最后关闭智能卡的供电和时钟信号。
智能卡拔出:当拔出智能卡时,程序检测到引脚状态变化,打印 "Card out" 信息,并关闭智能卡的供电和时钟信号。
5.5.1 下载验证

审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !