查看: 5819|回复: 8

[已解决] KL25串口收发问题(已解决)

[复制链接]

该用户从未签到

13

主题

86

帖子

0

新手上路

Rank: 1

积分
130
最后登录
1970-1-1
发表于 2013-4-23 09:54:41 | 显示全部楼层 |阅读模式
 昨天调程序,uart 9600波特率,收到数据后立即发送,接收和发送缓冲区独立,发现发送不正常,丢数据或错误数据发出。去掉2个delay就不正常,前面那个延时不加的话,乱码,后面延时不加——丢字节。
==================================================
 delay_time(12000);

          g_comm_send[3] = g_comm_buf[1];
          g_comm_send[4] = g_comm_buf[2];
          g_comm_send[5] = (retVal >> 24) & 0xff;
          g_comm_send[6] = (retVal >> 16) & 0xff;
          g_comm_send[7] = (retVal >> 8) & 0xff;
          g_comm_send[8] = (retVal ) & 0xff;
          g_comm_send[9] = 0;
          gpio_write(gpio1,1); 
          
          uart_send(uart1,g_comm_send,10); 
          delay_time(50000);
          gpio_write(gpio1,0);
----------------------------------------------------------------------------------------------------
 
void uart_send(DevObject *obj,uint8_t *ptr,uint16_t length)
{
  uint16_t i;
  UART_Type *uart = GET_UART(obj);  


  for (i = 0;i < length;i++) 
  {
    while (! (uart->S1 & UART_S1_TDRE_MASK));
    uart->D = (uint8_t) ptr;     
  }
}

 
=========================================================
 
gpio是用来使能485发送;如果单独发送好像没问题,我这个发送是接收到命令后,送应答的。两个缓冲是分开的且没别的地方有修改,给人感觉uart忙不过来,没有fifo的弊病。
 
我知道答案 目前已有8人回答
回复

使用道具 举报

该用户从未签到

85

主题

790

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2279
最后登录
1970-1-1
发表于 2013-4-23 11:09:40 | 显示全部楼层

RE:KL25串口收发问题

请问,你是使用哪种方式收数据的呢?中断?
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-4-23 14:37:53 | 显示全部楼层

    RE:KL25串口收发问题

    请问楼主,用中断还是查询的方式发送?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13

    主题

    86

    帖子

    0

    新手上路

    Rank: 1

    积分
    130
    最后登录
    1970-1-1
     楼主| 发表于 2013-4-23 15:32:34 | 显示全部楼层

    回复:KL25串口收发问题

    回复第 3 楼 于2013-04-23 22:37:53发表:
    请问楼主,用中断还是查询的方式发送?
    发送跟接收都是轮询
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13

    主题

    86

    帖子

    0

    新手上路

    Rank: 1

    积分
    130
    最后登录
    1970-1-1
     楼主| 发表于 2013-4-23 15:32:54 | 显示全部楼层

    回复:KL25串口收发问题

    回复第 2 楼 于2013-04-23 19:09:40发表:
    请问,你是使用哪种方式收数据的呢?中断?
    发送跟接收都是轮询
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    30

    帖子

    0

    注册会员

    Rank: 2

    积分
    94
    最后登录
    1970-1-1
    发表于 2013-4-23 16:54:07 | 显示全部楼层

    RE:KL25串口收发问题(正解)

    从你的描述看,似乎是收和发之间的延时处理有问题。你是用什么标志判断数据接收完成,又是用什么什么标志判断数据发送完成呢?用你的数据发送函数来说,TDRE是发送寄存器空标志,这个标志说明发送寄存器已经清空,可以写入下一个待发数据,但实际上数据的串行发送还没有完成,如果此时就停止发送并进入数据接收模式,则必然会丢数据。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-4-23 17:34:06 | 显示全部楼层

    RE:KL25串口收发问题

    应该在处理一下TC这个标志位,Transmission Complete Flag
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    66

    帖子

    0

    注册会员

    Rank: 2

    积分
    137
    最后登录
    1970-1-1
    发表于 2013-9-4 16:18:17 | 显示全部楼层

    回复:KL25串口收发问题(已解决)

    回复第 2 楼 于2013-04-23 11:09:40发表:
    请问,你是使用哪种方式收数据的呢?中断? 

    你好,我想问下,我在KL25串口接收时用查询方式,用:while (!(UART_S1_REG(channel) & UART_S1_RDRF_MASK));这是个死循环,我怎么在串口没有收到数据的时候退出,而不是一直处于死循环?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6

    主题

    63

    帖子

    0

    注册会员

    Rank: 2

    积分
    180
    最后登录
    1970-1-1
    发表于 2014-9-22 21:44:55 | 显示全部楼层
    增加超时处理程序,可用一个定时器产生超时脉冲,每接收到一个字节复位一下定时器,当定时器触发时,也就是超时了,
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 00:33 , Processed in 0.103015 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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