OpenEdv-开源电子网

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

STM32F4 UCOS ii 串口中断接收数据丢失

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2015-7-14
在线时间
4 小时
发表于 2015-8-1 15:37:11 | 显示全部楼层 |阅读模式
5金钱

目前是这样的情况,中断接收数据,有时候数据少一个字节,或者两个字节,并且出现 的时间不定,有时候收几W个字节丢一个,有时候几K个字节就丢了,

一但数据丢失,系统就不能正常运行(当然STM32F4这边是没有问题可以正常运行,但通讯的另一块板就无法正常运行,)

问一下有什么办法可以解决这个问题?

贴中断代码:

uint32_t TotalCnt = 0;
__IO uint8_t USART2_Rcv_Index = 0;
extern __IO uint8_t SendPrintIndex;
extern uint8_t RecendCnt;
void USART2_IRQHandler (void)
{  
 #ifdef OS_TICKS_PER_SEC   //如果时钟节拍数定义了,说明要使用ucosII了.
  OSIntEnter();  
 #endif
  
 if(USART_GetITStatus(USART2,USART_IT_ORE) == SET)
 {
  USART_ReceiveData(USART2);
  SendPrintIndex++;
 }
 else if(USART_GetITStatus(USART2,USART_IT_RXNE) == SET)
 {
  USART2_RX_BUFFER[USART2_Rcv_Index] = USART_ReceiveData(USART2);   //读取串口2接收到的数据
  USART2_Rcv_Index++;
  TotalCnt++;
  if(USART2_RX_BUFFER[USART2_Rcv_Index - 1] == 0x0A)  //data receive over;
  {
    memcpy(cmdbuffer[bufindw],USART2_RX_BUFFER,USART2_Rcv_Index);
    bufindw = (bufindw + 1)%BUFSIZE;
    buflen = (buflen + 1);
    USART2_Rcv_Index = 0;
  }
 }
 
 #ifdef OS_TICKS_PER_SEC   //如果时钟节拍数定义了,说明要使用ucosII了.
  OSIntExit();
 #endif
}

最佳答案

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

加入协议栈处理吧。 大批量数据传输,丢一两个字节,是无可避免的。 为了稳定,肯定要协议控制。 参考,modbus
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-8-1 15:37:12 | 显示全部楼层
加入协议栈处理吧。
大批量数据传输,丢一两个字节,是无可避免的。
为了稳定,肯定要协议控制。
参考,modbus
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2015-7-14
在线时间
4 小时
 楼主| 发表于 2015-9-10 13:07:37 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
目前是增加了别一个接收端的数据空间,测试还没有发现问题,当然也想用相应的协议,不过另一个系统太大了,一时半会儿改起来也不容易!最主要还是AVR写的!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 06:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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