3845|6

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

串口TTL电平异常 [复制链接]

平台:s3c2440 + wince5.0

同一块PCB板上使用UART1与单片机的UART相连,3线制,TTL,都是3.3v供电

现象:
(1)CE中使用串口调试器从UART1发送指令1,通信正常,使用示波器查看信号,信号幅值为3.3v;
(2)发完指令1后,发送指令2,CE串口调试器没收到数据,用示波器查看,串口有发送数据,单片机也有回送数据,但是信号幅值只有750mv,没达到TTL电平要求,所以数据没收到,而且现象一直可以重现。

这是什么原因?前一条指令正常,第二条指令TTL电平就出现异常,GPHCON配置UART1的TxD和RxD管脚时是否都要上拉?TTL电平异常与PCB板干扰有关???

最新回复

对呀,要添加延时代码,串口的数据才会正确完整的发送出去,可这个延时该如何设置呢?命令有长有短,延时也就不固定了,不好设置。  详情 回复 发表于 2009-9-25 16:55
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1.先排除硬件是否有问题,你可以电脑接个RS232转TTL转换器,直接接到,你的板子上.用串口调试助手,直接发送数据,查看是否通信正常,来确定电路板是否有问题?
2.如果电路板没有问题的情况下,再来确定软件是否有问题?
分布调试.
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
经过调试,原因是:需求特殊,在串口的设置上出现问题
特殊需求:
s3c2440中UART1的TxD1和RxD1管脚是连在一起,然后与外部单片机的UART相连,所以在串口的收发驱动上就要对接收和发送的状态进行转换。
现在我的问题是设置的地方都不是很理想,驱动修改如下:

  1. 文件 pdds3c2440_ser.cpp

  2. CPdd2440Uart::XmitInterruptHandler()
  3. {
  4.        。。。。。
  5.         for (DWORD dwByteWrite = 0; ....)
  6.        {
  7.            ......
  8.            dwDataAvaiale--;
  9.        }
  10. [color=#FF0000]

  11.        //测试发现,这里还应该添加延时,这样数据才能正常完整地发送出去,可发送的指令不同,
  12.         //回送数据的时间是不同的,这里怎么添加延时呀??????????

  13.        //添加的状态转换控制代码
  14.         g_ps3c2440IOPRegs->GPHCON &= 0X3FFCFF  //Close TxD1

  15.        g_ps3c2440IOPRegs->GPHCON &= 0x3ff3ff   //Open RxD1
  16.        g_ps3c2440IOPRegs->GPHCON |= 0x00800

  17.        g_ps3c2440IOPRegs->GPHUP  &= 0xfcf
  18. [/color]   
  19.        EnableXmitInterrupt(TRUE);
  20.     }
  21.     ClearInterrupt(S2440UART_INT_TXD)
  22. [color=#FF0000]
  23.     //还是放在这里?????????????
  24.      
  25. [/color]
  26. }
复制代码


所以出现开始的TTL电平问题的原因就是在状态转换时,出现了数据的叠加干扰,

请教各位该如何才能稳定的做到转换而不会影响到数据的接受呢???
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
自己顶起

串口配置使用驱动中默认的,关键是如何判断数据已经正确发送完毕
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

5
 
不需要上拉的
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

6
 

  1. //添加的状态转换控制代码
  2. [color=#FF0000]g_ps3c2440IOPRegs->GPHCON &= 0X3FF3FF   //Close RxD1

  3. g_ps3c2440IOPRegs->GPHCON &= 0x3ffcff   //Open TxD1
  4. g_ps3c2440IOPRegs->GPHCON |= 0x000200

  5. g_ps3c2440IOPRegs->GPHUP  &= 0xfcf[/color]

  6. for (DWORD dwByteWrite = 0; dwByteWrite < dwWriteSize && ....)
  7. {
  8.     m_pReg2440Uart->Write_UTXH(*pTxBuffer);
  9.     pTxBuffer++;
  10.     dwDataAvaiale--;
  11. }
  12. [color=#0000FF]//外设响应非常快,1ms左右,所以需要在这里添加状态转换控制代码,但是发现在这里必须需要添加延时
  13. 为什么要添加延时呢?上面的for()循环不是已经把数据发送完了吗?那该如何正确判断数据都已经发送
  14. 完毕呢?[/color]

  15. //添加的状态转换控制代码
  16. [color=#FF0000]g_ps3c2440IOPRegs->GPHCON &= 0X3FFCFF  //Close TxD1

  17. g_ps3c2440IOPRegs->GPHCON &= 0x3ff3ff   //Open RxD1
  18. g_ps3c2440IOPRegs->GPHCON |= 0x00800

  19. g_ps3c2440IOPRegs->GPHUP  &= 0xfcf[/color]
复制代码
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
对呀,要添加延时代码,串口的数据才会正确完整的发送出去,可这个延时该如何设置呢?命令有长有短,延时也就不固定了,不好设置。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表