打印

LPC2138串口通信问题

[复制链接]
4452|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yueyinji1989|  楼主 | 2012-10-16 15:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yueyinji1989 于 2012-10-16 15:37 编辑

你们好,我在做LPC2138串口通信的时候遇到这样个问题,找了很久都没答案。请各位指教!

做串口通信时,ARM与PC串口相连,使用串口助手时可以接到数据,但是无论我在源代码如何修改发送的字符,串口助手接到的数据都是一样的不变。
此外,连接超级终端的时候,超级终端却显示不出什么。请问这是什么问题呢?谢谢!
(串口线测过,波特率都设置好的了)
源代码:
/**************************************************************
*文件名:uart0.c
*功能:向串口发送数据
*说明:使用外部11.0592MHz晶振、根据CONFIG.H文件配置,
*      Fpclk=11.0592MHz,通信波特率为115200,8位数据位,1位停止位,
*      无奇偶效验
**************************************************************/
#include"config.h"
#include"Target.h"
#define UART_BPS 115200

uint8 const SEND_STRING[]="Hello world!";
/***********************************************************
*名称:DelayNS()
*功能: 长软件延时
*入口参数: dly
*出口参数: 无
**********************************************************/
void DelayNS(uint32 dly)
{
  uint32 j;
  for(; dly>0; dly--)
    for(j=0; j<50000; j++);
}
/***********************************************************
*名称:UART0_Ini()
*功能: 初始化串口。设置为8位数据位,1位停止位,无奇偶校验位
*      ,波特率为115200
*入口参数: 无
*出口参数: 无
**********************************************************/
void UARTO_Ini()
{
  uint16 Fdiv;
  U0LCR=0x83;     //DLAB=1,可设置波特率,8位字符长度,
  Fdiv=(Fpclk/16)/UART_BPS; //设置波特率
  U0DLM=Fdiv/256;
  U0DLL=Fdiv%256;
  U0LCR=0x03;   //DLAB=0;
}
/***********************************************************
*名称:UART0_SendByte()
*功能: 向串口发送字节数据,并等待发送完毕
*入口参数: data,要发送的数据
*出口参数: 无
**********************************************************/
void UART0_SendByte(uint8 data)
{
  U0THR=data;       //发送数据
  while((U0LSR&0X40)==0); //等待数据发送完毕
}
/***********************************************************
*名称:UART0_SendStr()
*功能: 向串口发送一字符串
*入口参数: str,要发送字符串的指针
*出口参数: 无
**********************************************************/
void UART0_SendStr(uint8 const *str)
{
  while(1)
  {
    if(*str=='\0') break;
    UART0_SendByte(*str++); //发送数据
  }
}
/***********************************************************
*名称:main()
*功能: 主函数,向串口发送字符串“Hello world!”
**********************************************************/
int main(void)
{
  PINSEL0=0x00000005; //设置I/O口为UART0
  
  UARTO_Ini();
  while(1)
  {
    UART0_SendStr(SEND_STRING);
    DelayNS(10);
  }
}

相关帖子

沙发
yueyinji1989|  楼主 | 2012-10-16 15:56 | 只看该作者
换了一块板,然后再把程序烧下去,情况就好了,串口和终端都有数据。应该是板的问题,只不过不清楚是否是原来那块板其他的问题造成的。谢谢了!

使用特权

评论回复
板凳
阿南| | 2012-10-16 17:54 | 只看该作者
你坏的板,接收到的数据是什么?对吗?用示波器测试的波特率对吗?
或者你把那块板的程序也重新烧一下,看是否是好的?以排除是硬件问题。

使用特权

评论回复
地板
yueyinji1989|  楼主 | 2012-10-17 16:09 | 只看该作者
接收到的是反复的E0 00 00 E0,数据肯定不是这个的。波特率设置正确的,不过没用示波器观察,只是自发自收可以做到正确接收。代码的话,烧到另外一个板上是可以的,所以代码是正确的。具体原因还真找不着,谢谢了!
3# 阿南

使用特权

评论回复
5
阿南| | 2012-10-17 16:27 | 只看该作者
自发自收,那发送的变成E0 00 00 E0,接收也是这个,那不是永远正确。

使用特权

评论回复
6
阿南| | 2012-10-17 16:30 | 只看该作者
如果你觉得硬件有问题,还有一个方法。在2138的发送和接收管脚处断开,然后将不是靠近2138处的两边短路,用终端发送,看接收是否和发送是一样的,如果一样说是硬件也是好的。

使用特权

评论回复
7
yueyinji1989|  楼主 | 2012-10-17 16:55 | 只看该作者
不是的,我说的那个自发收是用串口调试工具发,再收,发什么,就收到什么。至于说的那个E0 00 00 E0,是在2138里发hello world,收到的就这个。无论怎么改都是这样。

您说的这个检测方法我待会去试试,板子不在我这里,谢谢你了!

使用特权

评论回复
8
鸿影2010| | 2012-11-2 21:49 | 只看该作者
楼主,我用的事LPC2119,程序和你一样,在使用串口助手的时候,一直都是乱码,我调了好一段时间都没找到原因,何故? 1# yueyinji1989

使用特权

评论回复
9
阿南| | 2012-11-3 11:39 | 只看该作者
楼上兄弟,检查下波特率是否正确

使用特权

评论回复
10
33号逆时针| | 2013-7-23 14:37 | 只看该作者

使用特权

评论回复
11
dong1021| | 2013-7-24 16:03 | 只看该作者

使用特权

评论回复
12
zdhlixiang2006| | 2013-8-23 19:32 | 只看该作者
有这样的怪异事情??

使用特权

评论回复
13
庄吉| | 2013-10-11 12:01 | 只看该作者
#include"config.h"有没有定义了PLL啊?

使用特权

评论回复
14
海飏之心| | 2018-3-20 11:19 | 只看该作者
学习学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

281

帖子

0

粉丝