OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9556|回复: 7

STC15 开发板 串口收不到数据 !

[复制链接]

60

主题

225

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
483
金钱
483
注册时间
2013-7-27
在线时间
4 小时
发表于 2014-10-11 16:20:35 | 显示全部楼层 |阅读模式
5金钱
程序在51单片机上测试没有问题,现在我想在另一个板子(stc15w408as)上测试一下串口,程序做了相应的修改,这个板子是自己做的,程序下载都没有问题。
问题是这样:直接用USB转TTL模块测试串口,将模块的usb口用数据线连到电脑,模块上的收发引脚直接和单片机的下载口直连,晶振啥的都没有问题,就是串口助手上收不到数据,也找不出原因,很纳闷。
希望大家帮忙分析一下原因,不胜感激!

最佳答案

查看完整内容[请看2#楼]

回复【4楼】正点原子: --------------------------------- 好的,谢谢。问题已经解决,问题处在定时器的初始化部分。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

60

主题

225

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
483
金钱
483
注册时间
2013-7-27
在线时间
4 小时
 楼主| 发表于 2014-10-11 16:20:36 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
好的,谢谢。问题已经解决,问题处在定时器的初始化部分。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-10-3
在线时间
4 小时
发表于 2014-10-12 16:23:12 | 显示全部楼层
我用了stc15F2k61s2的开发板,串口通信只能用原装的数据线,其它的数据线都下载不了程序,波特率要调好,接收数据是文本模式的。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-10-3
在线时间
4 小时
发表于 2014-10-12 16:26:03 | 显示全部楼层
51的开发板和15的开发板不一样,15的开发板运算速度更快,适当调一下波特率试一下。
例程:
/*-------------------------------------
UART1测试:使用波特率9600发送到单片机上
   单片机将收到的程序发回PC。
   可采用STC下载软件自带串口调试助手观察
---------------------------------------*/

#include "STC15F2K.h"
#include <intrins.H>

typedef unsigned char uchar;
typedef unsigned int  uint;


bit busy;
bit Flag;
uchar GetC;

void InitUART(void);
void SendData(uchar dat);
void SendString(uchar *s);

void main()
{
P2=0x01;
InitUART();
    SendString("IAP15F2K61S2\r\nUart Test !\r\n");
    while(1)
{
  if(Flag)
  {
 SendString("IAP15F2K61S2\r\nUart Test !\r\n");
     SendData(GetC);
 Flag=0;
  }
}
}
/*----------------------------
    UART1初始化
-----------------------------*/
void InitUART(void)
{
    SCON = 0x50;                //8位可变波特率
AUXR1= AUXR1 & 0x3F; 
    AUXR = 0x40;                //定时器1为1T模式
    TMOD = 0x20;                //定时器1为模式2(8位自动重载)
    TL1 = 0xDC;   //设置波特率重装值
    TH1 = 0xDC;
    TR1 = 1;                    //定时器1开始工作
    ES = 1;                     //使能串口中断
    EA = 1;

}


/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4 using 1
{
    if (RI)
    {
        RI = 0;                 //清除RI位
        GetC = SBUF;              //P0显示串口数据
Flag=1;
    }
    if (TI)
    {
        TI = 0;                 //清除TI位
        busy = 0;               //清忙标志
    }
}

/*----------------------------
发送串口数据
----------------------------*/
void SendData(uchar dat)
{
    while (busy);               //等待前面的数据发送完成
    busy = 1;
    SBUF = dat;                 //写数据到UART数据寄存器
}

/*----------------------------
发送字符串
----------------------------*/
void SendString(uchar *s)
{
    while (*s)                  //检测字符串结束标志
    {
        SendData(*s++);         //发送当前字符
    }
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-10-12 23:17:25 | 显示全部楼层
帮顶....
回复

使用道具 举报

60

主题

225

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
483
金钱
483
注册时间
2013-7-27
在线时间
4 小时
 楼主| 发表于 2014-10-13 11:48:01 | 显示全部楼层
回复【3楼】钟高奎:
---------------------------------


好的,谢谢。问题已经解决,问题处在定时器的初始化部分。
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-10-19
在线时间
7 小时
发表于 2015-10-19 20:26:32 | 显示全部楼层
回复【3楼】钟高奎:
---------------------------------
不知道该如何感谢您,看了您的代码,困扰了我好久的问题今天终于解决了,串口终于能够接收数据了,我谨代表我自己向您致以诚致的感谢,正是有你们这些愿意分享的人,我们这些菜鸟才少走了好多弯路,以后我也会向您一样,努力分享的。
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-10-19
在线时间
7 小时
发表于 2015-10-19 20:56:03 | 显示全部楼层
回复【3楼】钟高奎:
---------------------------------
请问一下,为什么最开始P2要初始化为0x01?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 12:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表