转载自:http://www.cnblogs.com/chineseboy/archive/2013/03/06/2947173.html

前题:

  前段时间,在公司调试了一个项目,很简单,但对于初学的我来说,有点难。经过一周多两周的时间,刻骨铭心,深深的印入我的脑海,特此整理---那就是关于串口的那些事儿。串口那一堆的事儿,总是和rs485,usart,uart,rs232,rs422搞在一起,最后是你中有我,我中有你。如果说,会配置usart,但是不会配合rs485,在现实中基本会被笑话--而自己,就闹过这样的笑话,也被别人笑过。

一、rs485

  rs485,维基百科又称呼它为EIA-485。数据在其上流动的能量来源于缆线两端的电压差,就像高处的水留向低处一般。最早是采用双线制,一收一发,半双工模式,并且在收发转换的时候需要控制方向进行设定,这等同于安保科的呼呼机:按下按钮--说话;松开按钮--接听。<ps:如果收发转换不进行方向设定,那么收发不能成功>

  rs485规定:高电平一端为逻辑1,低电平一端是逻辑0;两端的电压差最小为0.2V以上时有效,if (差值 <= 12V  || 差值 >= -7V) {接收端会认为是有效的}。

  rs485没有定义数据协议,适用于广域网和一发多收的通信链路;点对点网络中,线型,总线型,不能是星型,环型网络;行大面积长距离传输(超过4000英尺,1200米);一般都需要配备2个终端电阻,保护信号的正确纯净。

  另外,一般说rs485是半双工模式,但这不是绝对的---用四线时可以和EIA-422一样实现全双工。

下图为rs485通信模块的一个芯片,也是我公司使用的,sp485:

ps:其中8为电源,5为接地,A为收数据端,B为发数据端,而内部的结构,决定了二线制的rs485为半双工模式;1脚和4脚相对于A和B进行数据的收发;2和3,可以焊接到一起,进行rs485收发方向的控制。

二、rs422

  一说rs485,于是就几乎马上带出rs422,维基百科又名EIA-422。何为rs422?感觉其实就是两个rs485拼起来的;采用4线,全双工,差分传输,多点通信的数据传输协议;通常用途是作为RS-232的扩展。在网上摘到的rs422设计图如下:<也感谢提供图的作者>

三、rs232

  rs232,维基百科又名EIA232;第一次听说它,总是把它想成了rs485那么简单,传输数据也应该学rs485那样。等看过了它的真正实现原理,突然发现,它其实最像<或者说就是>usart、uart!

  最常用的编码格式是异步起停(asynchronous start-stop)格式,它使用一个起始比特后面紧跟7或8 个数据比特(bit),然后是可选的奇偶校验比特,最后是一或两个停止比特。

  定义了逻辑一和逻辑零电压级数,以及标准的传输速率和连接器类型。信号大小在正的和负的3-15v之间;RS-232规定接近零的电平是无效的,逻辑一规定为负电平;有效负电平的信号状态称为传号marking,它的功能意义为OFF,逻辑零规定为正电平,有效正电平的信号状态称为空号spacing,它的功能意义为ON。

下图是其定义图<来自网络,感谢提供者!>

四、usart<简称串口了>

  这个是部分应该是自己详细总结的地方。也是上面种种的基础。

  1、我所理解的usart数据传输的方式,一份数据<一个字节>,经过usart打包处理后,传输给对方的usart,然后经过对方的usart解包处理后,把这个数据送达到目的地,等同于现实中的快递。而这个打包的过程,就是在该数据的前面加上起始位,在后面加上校验位和终止位等东西,然后一并通过缆线传送到对方--快递也是一样的,东西经过快递员打包后,连着包裹,一块儿送达到别人家。而用户要传送的这份数据为一个字节<8bit,也有需要的定义成了9bit>。而缆线可不管你是多少,它就只是按010110的传送过去了。<这点是自己开始想不明白的地方:为啥usart一次只能穿送一个字节,但是数据量却是11位?>

  2、串口属性的理解<波特率,校验值,停止位,起始位的配置>:还是以快递为理解,显示中投寄物品,都需要写明是走航空运输还是普通运输,是加急快递还是普通邮寄,是否需要保单等等信息;而usart串口一样的,只有双方的串口属性相同,它们传输的数据才会正确。

  3、串口的通信方式:轮询--不停的去看,去查看来数据没、数据发送出去了没;中断,数据操作完成给cpu一个中断信号。DMA---大量数据的移动,不经过cpu的干预,只是注意要配置好DMA数据操作的方向。

  4、串口的使用:很简单,首先你得按照对方串口属性,给己方串口配置成相同属性;然后使能。如果是采用中断方式通信,可千万别忘记了开中断。

  5、对串口数据的提取或者将大量数据存放进串口,然后往外发送--有时候需要对串口数据进行人工处理:比如我的工作就是干这事儿。一个方法是,定义一个接收缓冲区,比如 RxBuf[256],采用中断方式接收数据,那么接收中断来一次,则往该缓冲区存放一个字节的数据;然后再从该缓冲区把数据读到某个地方去进行处理--注意,从缓冲区读数据的时候要关闭接收中断,读操作完成后再使能接收中断。发送数据时则相反而已。另外一个方式是,直接在接收中断操作函数里面就把接收到的数据进行处理,这样可以精简一定量的代码,但是得依照实际情况而定。

  6、串口、rs485、stm32的GPIO口,它们都是连在一起的。属于串联格式。串口挂在GPIO口上,那是为了节省I/O的原则,这也是stm32设计的一大亮点。下图附上我公司相关电路图部分截图,相关实现代码放在下一篇日志里了。

               

其中U2为stm32最核心的那个东东。最后再次提醒:使用rs485,切记切记设定485的控制方向,也就是图中的rs485 DIR;通过在GPIO上的控制<rs485DIR <--> USART2 DIR <--> PA1>,至于74HCT244D没多大影响的,485的数据到串口上,可以无视该芯片了。

stm32 USART rs485 rs232的更多相关文章

  1. 单片机stm32 USART串口实际应用解析

    stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...

  2. [stm32] USART USART1收发功能工程

    >_<!功能:PC端发送一个特定的字符:0x0d 0x0a,单片机则返回一句话,如图: >_<!知识: 1.复用功能I/O和调试配置(AFIO)  为了优化外设数目,可以把一些 ...

  3. stm32 usart 异步传输示例

    STM32F103xE的USART异步数据传输示例 USART全称Universal Synchronous/Asynchronous Receiver/Transmitter,是一种可以进行同步/异 ...

  4. STM32 USART 波特率计算

    The baud rate for the receiver and transmitter (Rx and Tx) are both set to the same value as program ...

  5. stm32 usart的几种通信模式

    一 USART 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换. USART支持同步单向通信和半双工单线通信,也支持LIN(局 ...

  6. STM32 ~ USART接收不定长数据

    IDLE中断什么时候发生? IDLE就是串口收到一帧数据后,发生的中断.什么是一帧数据呢?比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也可以叫做一包数据. ...

  7. stm32 USART使用标志

    在USART的发送端有2个寄存器,一个是程序可以看到的USART_DR寄存器,另一个是程序看不到的移位寄存器,对应USART数据发送有两个标志,一个是TXE=发送数据寄存器空,另一个是TC=发送结束. ...

  8. stm32 usart 串口

    比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps).如每秒钟传送240个字符, 而每个字符格式包含10位(1个起始位.1个停止位.8个数据位),这时的比特率为: 10位 × 240个/秒 = ...

  9. 【STM32学习笔记】USART 硬件流控

    流控的概念源于 RS232 这个标准,在 RS232 标准里面包含了串口.流控的定义.大家一定了解,RS232 中的"RS"是Recommend Standard 的缩写,即&qu ...

随机推荐

  1. 本机jdbc连接报The user specified as a definer ('root'@'%') does not exist

    昨晚一台测试服务器连接本机的mysql时,有些调用存储过程报"The user specified as a definer ('root'@'%') does not exist" ...

  2. 【GOF23设计模式】观察者模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_观察者模式.广播机制.消息订阅.网络游戏对战原理 package com.test.observer; import ja ...

  3. 玩转Docker之安装篇(二)

    按理说,安装软件最好是按照官方文档进行,但由于国内网络的局限性,使我们不得不搭梯子,但终究太麻烦.鉴于此情况,我推荐方案一,利用某公司的加速站点来安装,而且是傻瓜式的,非常方便. 方案一: 在linu ...

  4. Julius JS – 最流行的网页语音识别库

    JuliusJS 是用于在网页中的语音识别库.这是 Julius(由日本京都大学和日本IPA联合开发的一个实用高效双通道的大词汇连续语音识别引擎)的 JavaScript 实现.它实时侦听用户的语音并 ...

  5. JavaScript实战-菜单特效

    以下是我自己用原生JS写的各种菜单特效,虽然网上一搜一大堆,但我还是喜欢自己来写一写! 这是上一篇:JavaScript实战(带收放动画效果的导航菜单) 下面是经过优化后的完整代码,优化了CSS样式. ...

  6. SharePoint 2010升级到sharePoint 2013后,人员失去对网站的权限的原因及解决方法。The reason and solution for permission lost after the upgrading

    昨天碰到了一个问题,一个网站在从SharePoint 2010升级到SharePoint 2013后,人员都不能登录了,必须重加赋权,人员才能登录,这样非常麻烦. 原因:是认证方式的问题.在Share ...

  7. jQuery导航切换功能

    Css ------------------------------------------------------------------------------------------------ ...

  8. iOS开发200个tips总结(一)

    tip 1 :  给UIImage添加毛玻璃效果 func blurImage(value:NSNumber) -> UIImage { let context = CIContext(opti ...

  9. iOS [[NSBundle mainBundle] pathForResource:@"" ofType:@""]无法获取到文件

    将一个文件导入到工程中后,用[[NSBundle mainBundle] pathForResource:@"" ofType:@""]来获取到该文件时,一直无 ...

  10. 直接双击启动tomcat中的startup.bat闪退原因及解决方法

    免安装的tomcat双击startup.bat后,启动窗口一闪而过,而且tomcat服务未启动. 原因是:在启动tomcat是,需要读取环境变量和配置信息,缺少了这些信息,就不能登记环境变量,导致了t ...