通信的种类
处理器与外部设备之间的通信方式有两种: 串行通信 并行通信
串行通信
传输原理:数据按位依次顺序传输(每一位都占据固定的时间长度)
优点:节约引脚资源(最少一根线)、传输成本低、传输距离远
缺点:传输速度慢
应用领域:一般用于工控设备、测量设备、少部分通信设备 USB COM口
并行通信
传输原理:数据各个位同时进行传输(以字节或字节的倍数进行传输)
优点:传输速度快
缺点:占用引脚资源、传输成本高、传输距离近、抗干扰能力弱(串扰)
应用领域:一般大量数据传输,并且传输距离较近 如计算机总线
串行通信的分类
按照数据的传送方向
单工 :数据只允许在一个方向上传输 如收音机、无线电台
半双工 :数据允许在两个方向上传输,但是同一时刻只允许在一个方向上传输 如对讲机
全双工 :数据允许同时在两个方向上传输,可以理解为两个单工通信的结合 如移动电话
按照数据的同步方式
同步通信:带时钟同步信号,如IIC接口或者SPI接口都属于同步通信,要求通信双方必须使用同一个时钟,相当于发送数据的同时接收数据,同步通信属于连续串行传输数据,一次只传输一帧数据,相比于异步通信而言,传输效率更高,缺点是时钟必须一致。
异步通信:不带时钟同步信号,如UART接口属于异步通信,要求通信双方具有发送端和接收端,由于不要求时钟同步,所以在通信的时候,通信双方必须提前约定好通信格式(字符格式)以及通信速率,异步通信以字符为单位进行传输,在传输一个字符的时候会添加起始位和停止位,通过起始位以及停止位来达到同步的功能。
串行接口的意义
串口是把数据按位顺序传输,但是计算机在通信的时候采用的并行通信的方式,在硬件设备与计算机进行通信的时候涉及到串转并、并转串,实现方式有两种:软件实现+硬件实现,如果采用软件实现会增加CPU的负担,一般都是采用硬件实现(增加串口)。
一般串口分为9针串口(DB-9)以及25针串口(DB-25),现在一般都是采用DB-9串口通信,分别分为公头和母头。
可以看到,一般9针串口在通信的时候,只会用到3个引脚(TXD、RXD、GND),其他的引脚一般用于握手。
硬件设备和计算机在通信的时候,需要用到电气转换芯片(如MAX232),因为硬件平台一般采用TTL电平信号(采用正逻辑电平,+5V等价于逻辑1,0V等价于逻辑0),但是计算机采用RS232电平信号(采用负逻辑电平,-15V~-3V 表示逻辑1,+3V~+15V 表示逻辑0)。
开发平台和计算机的接口说明
一般现在的计算机(笔记本电脑)和硬件设备(STM32)都不集成DB-9或者DB-25接口,提供了另外的一种方案来实现数据交互,就是利用USB口和板子的串口(4针的拓展串口)进行通信(利用USB转串口),就必须在STM32开发板集成USB转串口芯片(CH340)。
串口通信的参数
USART或者UART都是全双工异步通信,由于不需要时钟同步,所以就必须要求通信双方要约定字符格式和通信速率。
字符格式
字符格式一般都是采用字符帧的形式进行传输,字符帧由起始位、数据位、校验位、停止位组成。具体的说明可以参考STM32中文参考手册的26.3.1章节。
起始位
指的是一帧数据的开始 规定为1bit的低电平
数据位
指的是有效的信息,可以为7bit(标准ASCII码)或者8bit(拓展ASCII码)
校验位
指的是对于数据位的简单校验,可以确保数据正常发送,也可以避免噪声的影响,校验分为奇校验、偶校验,校验位也只占1bit。一般不使用校验位。
停止位
指的是一帧数据传输完成 停止位一般选择1bit,规定为高电平
通信速率
通信速率指的是单位时间内传输的有效的二进制数的个数,也被称为波特率,单位为bps。常用的波特率有9600bps、115200bps。 可以根据实际需求进行修改。
举例:一般采用的波特率是9600bps,字符格式选择8bit数据位、无校验、1bit停止位,然后再加上1bit的起始位,所以一帧字符占10bit,所以单位时间可以传输960帧。
串口通信的流程
对于STM32F407芯片而言,一共提供了6个串口,包括4个USART和2个UART,USART指的是通用同步异步收发器,而UART指的是通用异步收发器,相比于USART而言,UART裁剪掉同步功能,一般平时在使用串口的时候都是使用异步通信。
通过USART初始化结构体设置串口通信的字符格式以及通信速率
- USART_BaudRate 指的是波特率 常用9600bps 115200bps
- USART_WordLength 指的是数据位 常用8bit 低位先出
3. USART_StopBits 指的是停止位 常用1bit
4.USART_Parity 指的是校验位 常用无校验
5.USART_Mode 指的是串口模式 常用收发模式 USART_Mode_Rx | USART_Mode_Tx
6.USART_HardwareFlowControl 指的是硬件流控制 常用无
编写中断服务函数
一般需要提前设置好串口中断的触发条件,一般触发条件都会设置为接收到数据就发生中断。
ST公司提供了一个函数可以设置串口中断源,调用USART_ITConfig()函数
一般在中断服务函数中需要检测中断是否发生(检测中断状态)以及清除中断状态即可。
发送数据
接收数据
需要在中断服务函数中调用该函数来接收数据