STM32 |
您所在的位置:网站首页 › usb虚拟串口驱动有什么作用和用途吗 › STM32 |
STM32—串口协议、串口外设
本文来自于《STM32——江科大》的笔记整理。 文章目录 STM32—串口协议、串口外设10.1 串口协议10.1.1 通信接口10.1.2 串口通信10.1.3 硬件电路10.1.4 电平标准10.1.5 串口参数及时序10.1.6 串口时序 10.2 串口外设10.2.1 USART简介10.2.2 USART框图10.2.3 USART基本结构10.2.4 数据帧10.2.5 起始位侦测(了解即可)10.2.6 数据采样(了解即可)10.2.7 波特率发生器 10.1 串口协议 10.1.1 通信接口通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 以下列出的仅是最常用、最简单的配置 双工特性: 全双工:双方能够同时进行双向通信(一般来说全双工的通信都有两个通信线TX发送、RX接收---MOSI发送、MISO接收) 半双工:就只有一根通信线。 单工:指数据只能从一个设备到另一个设备,而不能反着来 时钟特性: 同步:有专门的时钟线,接收方可以在时钟信号的指引下进行采样异步:没有专门的时钟线,双方需要约定好采样频率,并且还需要加一下帧头帧尾,进行采样位置的对齐电平特性: 单端:也就是它们引脚的高低电平都是对GND的电压差,所以单端信号通信的双方必须要共地差分:它是靠两个差分引脚的电压差来传输信号的,尽量共地。使用差分信号可以极大地提高抗干扰特性,所以差分信号一般传输速度和距离都会非常高设备特性: 点对点:只有两个设备,直接传输数据即可。多设备:一对多,需要有一个寻址的过程,以确定特性的对象 名称引脚双工时钟电平设备USARTTX、RX全双工异步单端点对点I2CSCL、SDA半双工同步单端多设备SPISCLK、MOSI、MISO、CS全双工同步单端多设备CANCAN_H、CAN_L半双工异步差分多设备USBDP、DM半双工异步差分点对点……………… 10.1.2 串口通信串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大地扩展了单片机的应用范围,增强了单片机系统的硬件实力 简单双向串口通信有两根通信线(发送端TX和接收端RX) TX与RX要交叉连接 当只需单向的数据传输时,可以只接一根通信线 当电平标准不一致时,需要加电平转换芯片 电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种: TTL电平:+3.3V或+5V表示1,0V表示0RS232电平:-3-15V表示1,+3+15V表示0RS485电平:两线压差+2+6V表示1,-2-6V表示0(差分信号) 10.1.5 串口参数及时序 波特率:串口通信的速率起始位:标志一个数据帧的开始,固定为低电平数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行校验位:用于数据验证,根据数据位计算得来停止位:用于数据帧间隔,固定为高电平引脚: TX RX: 发送和接收 SW-_RX :用于智能卡模式(很少用) IRDA_OUT IRDA_IN: 红外通信数据的输出和输入 nRTS nCTS: 硬件流控(了解即可) nRTS是请求发送,是输出引脚(就是告诉别人我当前能不能接收)nCTS是清除发送,是输入引脚(也就是用于接收别人nRTS的信号的)这里前面加个n,表示低电平有效找一个也支持流控的串口,它的TX接我的RX,然后我的RTS要输出一个能不能接收数据的反馈信号,接到对方的CTS,当我能接收的时候,RTS就置低电平,请求对方发送,对方的CTS接收到之后,就可以一直发,当我处理不过来的时候,就比如接收寄存器我一直没有读,此时又有新的数据过来了,现在就代表我没有及时处理,那么RTS就会置高电平,对方的CTS接收到之后,就会暂停发送只能这里的接收数据寄存器被读走,RTS置低电平,新的数据才会继续发送(TX和CTS是一对的,RX和RTS是一对,CTS和RTS也要交叉连接)SCLK 同步时钟(同步模式下使用) USART的引脚分配如下表,注意,只有USART1挂载到APB2高速总线上,其他的串口都是在APB1总线。 数据寄存器:USART_DR,是一个对应两个寄存器(USART_TDR和USART_RDR),寄存器的低9位[0:8]位数据有效,由USART_CR1的M位设置,当M = 0时,表示8个数据位(最常用),M = 1时表示9个数据位(很少用)。因为有两个寄存器,所以TX和RX可以同时收发。 接下来是发送和接收的具体流程: USART_CR1寄存器 USART_CR1:UE USART使能 TE 发送使能 RE 接收使能 发送具体过程: USART_SR: TXE 发送数据寄存器空,当TDR寄存器中的数据被硬件转移到移位寄存器中时,该位置1;当为0时,表示数据还没有转移到移位寄存器,这时DMA不能再往里传数据了。 USART_CR1:TXEIE 发送缓冲区空中断使能,当为1时,TDR为空(TXE = 1)就会产生中断。 USART_SR: TC 发送完成,此时移位寄存器为空,全部数据已通过移位寄存器发送完成,这里判断的是移位寄存器。 USART_CR1:TCIE 发送完成使能,当发送完成TC = 1时,产生USART1中断。 数据由CPU从内存中读取,或DMA传送,然后放到数据寄存器TDR中(寄存器USART_SR的TXE位置0),然后放到发送移位寄存器中(此时发送数据寄存器为空,TXE = 1),然后当发送移位寄存器把全部数据移位发出去后, 接收具体过程: USART_SR: RXNE 读寄存器非空 USART_CR1:RXNEIE 接收缓冲区非空中断使能 数据一位一位的从RX转移到移位寄存器,然后移位寄存器八数据传送到接受数据寄存器RDR,此时RXNE标志位置1,如果我们检测到RXNE为1,就可以从RDR中读数据。读取USART_DR数据寄存器,RXNE位会清零。 波特率 BSART_BRR寄存器,分频器分为整数部分+小数部分 波特率如何产生? 计算方式如下: 目标波特率115200,使用USART1(72M),计算过程如下,整数部分很好计算,主要是小数部分。可以想象,小数的最大值为1,用4位二进制描述,则分为16′,每份1/16,我们的 小数部分 / (1 / 16) = 小数部分 * 16,就能知道占据了多少份。 USARTDIV(分频因子) = 72 000 000 / 16 / 115200 = 39.0625 整数部分DIV_Mantissa = 39 = 0X27,小数部分 = 0.0625 * 16 = 0X01,则应设置为0x271 串口空闲检测(非常有用): 字长 停止位 发送器和接收器的波特率由波特率寄存器BRR里的DIV确定 计算公式:波特率 = fPCLK2/1 / (16 * DIV) 例如配置9600的波特率:9600=72M / (16*DIV),DIV=468.75,转换到二进制为整数部分(000111010100),小数部分(1100) 不过库函数会帮我们自己算,我们只需要给9600。发送接收代码——见STM32—USART串口发送+接收 既然都看到最后了,可否给个 给那些看完的朋友,奖励一个 赤赤博客-后端+前端,觉得不错的话可以推荐给身边的朋友哟! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |