热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

STM32与RS232的串口通信失败了

今天在验证RS232与STM32的串口通讯。板子上引出了TXRX两个脚,与RS232的RXTX对接,串口通讯失败!开始以为是线序的问题,反复检查了线序,确认没有问题,后来查阅了一些资料,发现问题

今天在验证RS232与STM32的串口通讯。板子上引出了TX/RX两个脚,与RS232的RX/TX对接,串口通讯失败!

 开始以为是线序的问题,反复检查了线序,确认没有问题,后来查阅了一些资料,发现问题的原因可能是STM32的TX/RX用的是TTL电平,RS232则用的是EIA电平,用正负电压来表示逻辑状态,这两个接口直接连是不能正常通讯的。

EIA RS-232C 与TTL转换:EIA RS-232C 是用正负电压来表示逻辑状态,与TTL以高低电平表示逻辑状态的规定不同。因此,为了能够同计算机接口或终端的TTL器件连接,必须在EIA RS-232C 与TTL电路之间进行电平和逻辑关系的变换。实现这种变换的方法可用分立元件,也可用集成电路芯片。目前较为广泛地使用集成电路转换器件,如MC1488、SN75150芯片可完成TTL电平到EIA电平的转换,而MC1489、SN75154可实现EIA电平到TTL电平的转换。MAX232芯片可完成TTL←→EIA双向电平转换。

 

解决方案如下:

 

简单的RS232C/TTL电平转换和串口取电

作者:温正伟 原载:无线电杂志

  在许多单片机的应用中都会使用到串行口与电脑的串行口相连接,进行数据的传输或控制命令的发送与接收。单片机的串口有很大一部分是使用TTL电平标准的(PIC的可以直接连接在电脑串口),它的逻辑1电平是5V,逻辑0电平是0V,而电脑串行口所使用的是RS232C的电平标准,它的逻辑1电平是-3V--12V,逻辑0电平是+3V-+12V。两者的电平范围相差很远,所以连接时需要用到电平转换电路。这样电路有好多种,一般来说商业化的成品会用到MAX232,DS275等专用的RS232、TTL电平转换集成电路,对于普通电子爱好者来说使用这样的器件一来不太好购买,二来使制作的费用提高,那用什么样的电路去代替它们呢?这也是我初初制作单片机结合电脑的应用中所遇到的问题之一,后来找到了一些相关的电路资料,解决了这些问题。以下我就结合自己在实际设计应用的经验来介绍一下这些电路资料,同时也介绍一些自己对串口取电电路设计应用的经验。

点击看大图
图1:NPN和PNP组成的RS232电平转换电路(点击放大)

  图一是使用小功率三极管搭建的电平转换电路,分别用了一个NPN管和PNP管,NPN可以使用常用的9014或BC547,PNP则可以使用常用的9012或BC557。电路分为传送和接收两部分,图一中已用虚线分开了。它们可以分开使用也可以合在一起使用。传送电路使用PNP管。当单片机的TxD信号是逻辑高电平时,Q1截止,RS232C的TxD(PIN3)提供-9V左右(实际电压根据电脑主板上使用的串行接口芯片有所不同)给RS232C的RxD(PIN2)。当单片机TxD信号变为逻辑低电平时,Q1导通,约+5V传给了RS232C的RxD(PIN2)。用这种办法传送数据时,RS232C的TxD(PIN3)必须稳定在-9V左右 。
  虚线以下的接收电路,它把RS232C电平转换成TTL逻辑电平。当PC发送数据给RS232C的TxD(PIN3)时,逻辑1电平时是-9V,Q2截止,此时单片机的RxD约为+5V。当RS232C的TxD为逻辑低电平是+9V,Q2导通,单片机RxD此时约为0V。
  图一的电路我在自己的单片机应用中也经常用它来代替MAX232,DS275这样的芯片,它不单可以单独使用传送或接收部份,在部分要求双向传输的项目中也可以很好的工作。我通常是使用9600波特率的,但实际也可以工作中更高一点的波特率。也可以把它焊到一个小的8脚IC插座或PCB上直接代换DS275(DS275引脚功能说明请看图二)。

图2:DS275引脚图

点击看大图
图3:两个NPN组成的RS232电平转换电路(点击放大)

  图三是另一种RS232/TTL电平转换电路,对于接收电路,它是和图一的电路是一样的。该电路用2个NPN小功率晶体管,转送电路不需要从RS232C的TxD引用负的电压,而这样做的话,当单片机TxD为高电平时RS232C的RxD为0V(不是如图一的-9V左右),为低电平时RS232C的RxD为+5V,显然这和RS232C的标准不同,但多数PC机串口可以接受这样的电平范围。这个电路可以像图一那样用来代换直接代换DS275芯片。
  这两个电路中的晶体管可以使用大部分常用的小功率晶体管去替换,我自己常用9012,9014,BC547,BC557,它们都可以很好的工作。要注意的是它们所产生的电平范围不是标准的RS232电平,所以也不能达到RS232的标称传输距离。
  在一些小的应用中通常只要用到一块2051或PIC芯片和少许的小元件,它们的耗电量是很小的,一般有十几毫安就足够了。在我自己的PC遥控器项目中用到一块AT89C2051,一个一体化红外接收头和一个小LED,少许阻容器件和上面所说到的电路的传送部分,总的耗电量只有十毫安多点。我用图四的电路从PC串口直接窃电,效果很好,可以提供5V,二十多毫安的电流。也可以用图五的电路。但要注意的是这两种电路都要求上位软件使串口的7和4引脚变为高电平才可以正常取电,否则无法从串口窃取所需的电压。

点击看大图
图4:简单实用的串口窃电电路(点击放大)

图5:用到7805的串口取电电路


推荐阅读
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 处理docker容器时间和宿主机时间不一致问题的方法
    本文介绍了处理docker容器时间和宿主机时间不一致问题的方法,包括复制主机的localtime到容器、处理报错情况以及重启容器的步骤。通过这些方法,可以解决docker容器时间和宿主机时间不一致的问题。 ... [详细]
  • 集合的遍历方式及其局限性
    本文介绍了Java中集合的遍历方式,重点介绍了for-each语句的用法和优势。同时指出了for-each语句无法引用数组或集合的索引的局限性。通过示例代码展示了for-each语句的使用方法,并提供了改写为for语句版本的方法。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • 开发笔记:Docker 上安装启动 MySQL
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker上安装启动MySQL相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了Java的公式汇总及相关知识,包括定义变量的语法格式、类型转换公式、三元表达式、定义新的实例的格式、引用类型的方法以及数组静态初始化等内容。希望对读者有一定的参考价值。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 本文介绍了一种图片处理应用,通过固定容器来实现缩略图的功能。该方法可以实现等比例缩略、扩容填充和裁剪等操作。详细的实现步骤和代码示例在正文中给出。 ... [详细]
  • C++语言入门:数组的基本知识和应用领域
    本文介绍了C++语言的基本知识和应用领域,包括C++语言与Python语言的区别、C++语言的结构化特点、关键字和控制语句的使用、运算符的种类和表达式的灵活性、各种数据类型的运算以及指针概念的引入。同时,还探讨了C++语言在代码效率方面的优势和与汇编语言的比较。对于想要学习C++语言的初学者来说,本文提供了一个简洁而全面的入门指南。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 本文介绍了Python函数的定义与调用的方法,以及函数的作用,包括增强代码的可读性和重用性。文章详细解释了函数的定义与调用的语法和规则,以及函数的参数和返回值的用法。同时,还介绍了函数返回值的多种情况和多个值的返回方式。通过学习本文,读者可以更好地理解和使用Python函数,提高代码的可读性和重用性。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
author-avatar
支持骸云
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有