首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

LPC2138串口通信问题

LPC2138串口通信问题

你们好,我在做LPC2138串口通信的时候遇到这样个问题,找了很久都没答案。请各位指教!
做串口通信时,ARMPC串口相连,使用串口助手时可以接到数据,但是无论我在源代码如何修改发送的字符,串口助手接到的数据都是一样的不变。
此外,连接超级终端的时候,超级终端却显示不出什么。请问这是什么问题呢?谢谢!
(
串口线测过,波特率都设置好的了)
源代码:
/**************************************************************
*
文件名:uart0.c
*
功能:向串口发送数据
*
说明:使用外部11.0592MHz晶振、根据CONFIG.H文件配置,
*      Fpclk=11.0592MHz,
通信波特率为1152008位数据位,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()
*
功能:主函数,向串口发送字符串“Helloworld
**********************************************************/
int main(void)
{
  PINSEL0=0x00000005; //
设置I/O口为UART0
  
  UARTO_Ini();
  while(1)
  {
    UART0_SendStr(SEND_STRING);
    DelayNS(10);
  }
}
如果你觉得硬件有问题,还有一个方法。在2138的发送和接收管脚处断开,然后将不是靠近2138处的两边短路,用终端发送,看接收是否和发送是一样的,如果一样说是硬件也是好的。
做人要做懒羊羊啊!
返回列表