4306|5

66

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

有关str710串口问题请教各位 [复制链接]

我用的是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);
  }
}
此帖出自stm32/stm8论坛

最新回复

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

回复
举报

65

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

有关str710串口问题请教各位

                                 怎么都没一个人回答啊?各位大虾帮忙分析下问题所在不胜感激!谢谢
此帖出自stm32/stm8论坛
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

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

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

LZ还是好好分析一下吧。
此帖出自stm32/stm8论坛
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

4
 

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

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

回复

64

帖子

0

TA的资源

一粒金砂(初级)

5
 

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

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

LZ能否有示波器看一下你的发送和接收的启动时间是否匹配。
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 

时序应该没问题的!

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

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表