转载自: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. [翻译]:SQL死锁-死锁排除

    As we already saw, the reasons why we have blocking issues and deadlocks in the system are pretty mu ...

  2. 使用 WSO2 API Manager 管理 Rest API

    WSO2 API Manager 简介 随着软件工程的增多,越来越多的软件提供各种不同格式.不同定义的 Rest API 作为资源共享,而由于这些 API 资源的异构性,很难对其进行复用.WSO2 A ...

  3. angular学习的一些小笔记(中)之双向数据绑定

    <!doctype html> <html ng-app=""> <head> <script src="https://aja ...

  4. Walkway.js – 用线条制作简约的 SVG 动画

    Walkway.js 是一个使用线条和路径元素组成 SVG 动画图像的简单方法.只需根据提供的配置对象创建一个新的 Walkway 实例就可以了.这种效果特别适合那些崇尚简约设计风格的网页.目前, W ...

  5. 读《数据结构与算法 Javascript描述》 | 平淡无奇

    “平淡无奇”,一句话总结. 当初买这本书的原因,在意的是有没有什么令人惊喜的东西,特别是针对Javascript代码的奇思妙想,所以就买下了这本书. 在买的几本书里面,最先看的也是这一本,但看起目录就 ...

  6. Servlet基础(二) Servlet的生命周期

    Servlet基础(二) Servlet的生命周期 Servlet的生命周期可以分为三个阶段: 1.初始化阶段 2.响应客户请求阶段 3.终止阶段 Servlet的初始化阶段 在下列时刻Servlet ...

  7. xmpp整理笔记:用户网络连接及好友的管理

    xmpp中的用户连接模块包括用户的上线与下线信息展现,用户登录,用户的注册: 好友模块包括好友的添加,好友的删除,好友列表的展示. 在xmpp中 负责数据传输的类是xmppStream,开发的过程中, ...

  8. WPF之Binding深入探讨

    原文:http://blog.csdn.net/fwj380891124/article/details/8107646 1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在 ...

  9. EMC Documentum DQL整理(一)

    1.Get user SELECT * FROM dm_user WHERE r_is_group = 0   2.Get Group SELECT * FROM dm_group WHERE gro ...

  10. JMS发布/订阅消息传送例子

    前言 基于上篇文章"基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送"很容易就可以编写一个发布/订阅消息传送例子,相关环境准备与该篇文章基本类似,主要 ...