请选择 进入手机版 | 继续访问电脑版

迪文科技论坛

 找回密码
 立即注册
搜索
热搜: T5L 视频屏 DGUS OS
查看: 592|回复: 14

【提问】UART4接收数据问题

[复制链接]

2

主题

9

帖子

45

积分

新手上路

Rank: 1

积分
45
发表于 2020-6-23 11:31:03 | 显示全部楼层 |阅读模式
做一个串口4的收发数据程序,目前调试发送数据可以,但接收数据无论如何接收不到,测试到后来检测到,com_data_len(4)函数返回数据为0;硬件结构测试无问题。测试程序如下:        
        liDtu = com_data_len(4);        if(liDtu > 0)
        {
                send_data_com(4,gcCap,10);
        }


       其中 liDtu为 long int   等同于 int,两种类型都测过了,不工作。send_data_com(4,gcCap,10);在其他段测试过,这里无问题。
       串口在上电后设置为com_config(4,0,19200);

      哪位有经验,或遇到过类似问题分享一下,谢谢!
回复

使用道具 举报

0

主题

15

帖子

504

积分

高级会员

Rank: 4

积分
504
发表于 2020-6-23 13:18:18 | 显示全部楼层
楼主,这里有个写好的DEMO 您可以参考下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

79

帖子

453

积分

中级会员

Rank: 3Rank: 3

积分
453
发表于 2020-6-23 14:32:50 | 显示全部楼层
liDtu = com_data_len(4);    有可能是这个函数没有工作 ,根本没有返回值 你参考例子
例子:
uint16_t uart4_rx_count=0;
uint8_t xdata Uart4_Rx[UART4_MAX_LEN]


//´串口4配置
void Uart4Init(void)
{
  uart4_rx_count=0;
  SCON2T     = 0x80;       / /开启UART4·发送
  SCON2R     = 0x80;        //*开启ôUART4接接收*/
  BODE2_DIV_H= 0x00;        /*FCLK/(8*DIV)*/
  BODE2_DIV_L= 0xE0;
  //ES2T=1;
  ES2R=1;
}

//串口4发送字节数据
void Uart4SendByte(uint8_t dat)
{
  SBUF2_TX = dat;    //数据发送到缓冲区里去
  while((SCON2T&0x01) == 0);
  SCON2T &= 0xFE;    //发送完成了  清零标志
}
//串口4发送字符串数据
void Uart4SendStr(uint8_t *pstr,uint8_t strlen)
{
  if((NULL == pstr)||(0 == strlen))
  {
    return;
  }
  while(strlen--)
  {
    Uart4SendByte(*pstr);
    pstr++;
  }  
}



//接收中断数据
void UART4_RX_ISR_PC(void)    interrupt 11
{
  uint8_t res=0;
  EA=0;     //关闭中断,稳定接收
  if((SCON2R&0x01)==0x01)
  {
    res=SBUF2_RX;       //接收发送过来数据暂存区
    Uart4_Rx[uart4_rx_count]=res; //数据接收处理
    uart4_rx_count++;   //地址偏移
    SCON2R&=0xFE;       //清零接收标志
  }
  EA=1;  开启中断
}
回复

使用道具 举报

2

主题

9

帖子

45

积分

新手上路

Rank: 1

积分
45
 楼主| 发表于 2020-6-23 14:45:56 | 显示全部楼层
kehu20190527 发表于 2020-6-23 14:32
liDtu = com_data_len(4);    有可能是这个函数没有工作 ,根本没有返回值 你参考例子
例子:
uint16_t uar ...

你好,是的,我觉得com_data_len(4)没有工作。你的函数是迪文T5单片机的底层函数吧,那么波特率该怎么设定呢,或者资料哪里有?
回复

使用道具 举报

2

主题

9

帖子

45

积分

新手上路

Rank: 1

积分
45
 楼主| 发表于 2020-6-23 14:49:42 | 显示全部楼层
Frieda 发表于 2020-6-23 13:18
楼主,这里有个写好的DEMO 您可以参考下

参照你的例子,单独做了一个函数处理串口接收数据问题,梦想着函数结构改变,这个编译器能编译的好一些,但是还是没工作,还没搞清楚啥原因,为啥com_data_len(4)返回值总是0。好多bug都绕道过了,这个问题太简单了,没法绕了,卡死我了。
回复

使用道具 举报

0

主题

162

帖子

830

积分

高级会员

Rank: 4

积分
830
发表于 2020-6-23 16:30:28 | 显示全部楼层
mengxuan1303 发表于 2020-6-23 14:49
参照你的例子,单独做了一个函数处理串口接收数据问题,梦想着函数结构改变,这个编译器能编译的好一些, ...

用的是T5L的屏还是T5的屏?可以参考以下链接:http://forum.dwin.com.cn/forum.p ... amp;_dsign=18d839cb
回复

使用道具 举报

2

主题

9

帖子

45

积分

新手上路

Rank: 1

积分
45
 楼主| 发表于 2020-6-23 16:34:15 | 显示全部楼层
mengxuan1303 发表于 2020-6-23 14:45
你好,是的,我觉得com_data_len(4)没有工作。你的函数是迪文T5单片机的底层函数吧,那么波特率该怎么设 ...

T5的屏,不能做成类似Keil的编译软件。
回复

使用道具 举报

0

主题

68

帖子

813

积分

高级会员

Rank: 4

积分
813
发表于 2020-6-24 09:51:38 | 显示全部楼层
测过返回正常的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

2

主题

9

帖子

45

积分

新手上路

Rank: 1

积分
45
 楼主| 发表于 2020-6-30 08:36:26 | 显示全部楼层
终于找到原因了,我用的是这个HDLUSB供电调试的,但这个默认的短路环给UART4-Rx引脚短接到地上了,谢谢各位关注。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

32

主题

94

帖子

335

积分

中级会员

Rank: 3Rank: 3

积分
335
发表于 2020-9-27 13:41:21 | 显示全部楼层
kehu20190527 发表于 2020-6-23 14:32
liDtu = com_data_len(4);    有可能是这个函数没有工作 ,根本没有返回值 你参考例子
例子:
uint16_t uar ...

请问这个中断接收函数,我没用Uart4_Rx[uart4_rx_count]=res数组来接收,而是一个一个的接收字符,发现好像有点问题,请问必须使用数组接收字符比较好吗
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2020-10-25 21:22 , Processed in 0.018617 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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