今天在验证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的串口取电电路 |