打印

有关str710串口问题请教各位

[复制链接]
2722|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tony007|  楼主 | 2007-10-27 09:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是str710的片子,用的是串口2,现在有个问题,就是在接收数据时假如一次接收25个字节的一帧数据,有时会出现前面几个字节丢失了,这种现像时有时无,出现概率大约为10%,我的串品设置如下:
USART_Init(UART2,9600, UART_NO_PARITY,UART_1_StopBits,UARTM_8D);

void USART_Init(UART_TypeDef *UARTx, u32 BaudRate, UARTParity_TypeDef Parity,
                 UARTStopBits_TypeDef StopBits, UARTMode_TypeDef Mode)
{
 UART_Init(UARTx);
 UART_FifoConfig(UARTx, ENABLE);            // Enable FIFOs
 UART_FifoReset(UARTx, UART_RxFIFO);        // Reset the UART_RxFIFO
 UART_FifoReset(UARTx, UART_TxFIFO);        // Reset the UART_TxFIFO
 UART_LoopBackConfig(UARTx, DISABLE);        // Disable Loop Back
        
 UART_Config(UARTx, BaudRate, Parity,StopBits,Mode);
 
 UART_ItConfig(UARTx,UART_RxHalfFull,ENABLE);   //接受半满中断
    
    
 UART_RxConfig(UARTx, ENABLE);          // Enable Rx
 UART_OnOffConfig(UARTx, ENABLE);

}

void UART2_IRQHandler(void)    //UART2口接收到MC55应答后产生中断,发送信号量SEM_Read告诉UartTask任务收到MC55的应答
{
 u16 stat;
 u8 Timeout;
 
 stat=UART_FlagStatus(UART2);
 if(stat&0x00C0) Timeout=0;
 else Timeout=100;
 while(stat&1)
 {
   stat=UART_ByteReceive(UART2,&command.Ptr[command.Top],255);
       command.Top++;
       command.Top%=UART0_MODE_R;
 }  //将接收到的数据放入command.Ptr中,即放入接收缓冲RX2_buff中
  
 Fin_Rev(Timeout,SEM_Read,UART2);//发送信号量SEM_Read告诉UartTask任务收到应答数据
   
}

void Fin_Rev(u8 Timeout,OS_EVENT *p,UART_TypeDef *UARTx)
{
  if(!Timeout)
  {
    UART_ItConfig(UARTx,UART_TimeOutNotEmpty,DISABLE);
    UART_ItConfig(UARTx,UART_TimeOutIdle,DISABLE);
    UART_FifoReset(UARTx, UART_RxFIFO);
    OSSemPost(p);//如果空超时表示接收完成
  }
  else
  {
    UART_ItConfig(UARTx,UART_TimeOutNotEmpty,ENABLE);
    UART_ItConfig(UARTx,UART_TimeOutIdle,ENABLE);
  }
}
沙发
tony007|  楼主 | 2007-10-30 10:00 | 只看该作者

有关str710串口问题请教各位

怎么都没一个人回答啊?各位大虾帮忙分析下问题所在不胜感激!谢谢

使用特权

评论回复
板凳
浪淘沙| | 2007-10-30 10:24 | 只看该作者

发送方是谁?发送方发送数据时你的接收程序是否准备好?

张三李四两人对话,张三说话,李四没有听全或没听到,你说是什么问题?—— 李四的耳朵坏了?李四心不在焉?李四不在场?张三没说清?张三说太快?

LZ还是好好分析一下吧。

使用特权

评论回复
地板
tony007|  楼主 | 2007-10-31 09:24 | 只看该作者

发送方是谁?发送方发送数据时你的接收程序是否准备好?

我的程序先通过串口发送一条指令给GPRS模块,模块给我回应,我接收程序是通过中断来接收的,发送方和接收方都准备好了,这种丢数据情况时而出现时而不出现,找了很久也不知道原因,还请各位高人帮我看下代码,是不是哪出问题了?谢谢

使用特权

评论回复
5
香水城| | 2007-10-31 13:51 | 只看该作者

通常这种“丢数据情况时而出现时而不出现”的问题是时序

根据你的描述,好像是接受方进入接收状态时恰好是发送方开始发送,如果接受方进入接收状态的时间早一点就不会丢数据,如果接受方进入接收状态的时间晚一点就会丢数据。

LZ能否有示波器看一下你的发送和接收的启动时间是否匹配。

使用特权

评论回复
6
Tony007| | 2007-11-1 11:45 | 只看该作者

时序应该没问题的!

时序应该没问题的!各位高人看下我的程序看有没问题!当串口收到数据时就会产生中断,进入中断程序,中断程序把收到的数据放入接收缓冲,除非是我的GPRS模块在发送数据给STR710串口时STR710还没准备好(可以肯定GPRS模
块送出的数据是正确的),这样就可能导致STR710的RXFIFO少接收一到两个字节,但是我的串口在程序一启动就初始化成功了,这种情况要是出现也只有可能是STR710串口本身的不稳定导致的,我用的是串口2,是不是有什么特别的设置才行啊?

使用特权

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

本版积分规则

10

主题

27

帖子

0

粉丝