STM32做485通讯,发送接收到的数据时丢数据的问题。

[复制链接]
 楼主| hackthree 发表于 2011-9-1 10:48 | 显示全部楼层 |阅读模式
初学485通讯,遇到了些问题。。
之前用232调了个接收串口精灵发送的数据然后发送到串口精灵。。
是正常的。。见下图:
232.jpg
现在换成485,结果发现,数据接收是正常的。。
但是发送后,数据丢了两位。。
见下图:
485BUG.jpg

程序的话也就中断中处理的,和232的程序没啥区别,就加了个485控制端。。
程序如下:

void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_IT_RXNE) == SET)   // 接收
中断有效 ;
   {
  
     /* Read one byte from the receive data register */
     RxBuffer[RxCounter++] = USART_ReceiveData(USART2);//
(USART_ReceiveData(USART2) & 0x7F); // 返回USARTx最近接收到的数据 ;  
  /* Clear the USART2 Receive interrupt */
     USART_ClearITPendingBit(USART2, USART_IT_RXNE);  // 清除
USART2的接收中断 ;              
     if(RxCounter == RxBufferSize)
     {
        /* Disable the USART2 Receive interrupt */
        USART_ITConfig(USART2, USART_IT_RXNE, DISABLE); // 失能
USART2的接收中断 ;
   TX_EN_485;      
    //发送状态
   USART_ITConfig(USART2, USART_IT_TXE, ENABLE);   
// 使能指定的USART2发送中断 ;
   RxCounter=0;      
   //接收计数标志清零   
     }
   }
   if(USART_GetITStatus(USART2, USART_IT_TXE) == SET)   
// 发送中断有效 ;
   {   
     /* Write one byte to the transmit data register */
     USART_SendData(USART2, RxBuffer[TxCounter++]);   // 发送
数据 ;                  
     /* Clear the USART2 transmit interrupt */
     USART_ClearITPendingBit(USART2, USART_IT_TXE);   // 清除
USART2的发送中断 ;
     if(TxCounter == RxBufferSize)
     {
        /* Disable the USART2 Transmit interrupt */
        USART_ITConfig(USART2, USART_IT_TXE, DISABLE);  // 失能
USART2的发送中断 ;
   RX_EN_485;      
    //接收状态
   USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);  
//使能接收中断
   TxCounter=0;      
   //接收计数标志清零
     }   
   }
}

注:其中RxBufferSize=8;

各位帮忙分析下是啥原因。。
香水城 发表于 2011-9-1 12:24 | 显示全部楼层
sjnh 发表于 2011-9-1 13:11 | 显示全部楼层
USART_IT_TXE中断是传输寄存器空(数据已经传输到移位寄存器),最后一个字节数据并没有发送出去,可以用TC中断
 楼主| hackthree 发表于 2011-9-1 14:00 | 显示全部楼层
2# 香水城

THX香主。。。
 楼主| hackthree 发表于 2011-9-1 14:00 | 显示全部楼层
3# sjnh

关键是丢了两个数据。。
yujie870705 发表于 2011-9-1 14:26 | 显示全部楼层
发送之后需要等待发送完成
while ( USART_GetFlagStatus(COM_USART[UART_PORT],  USART_FLAG_TC ) == RESET )
                    {}
加上这句试一下
 楼主| hackthree 发表于 2011-9-1 16:10 | 显示全部楼层
6# yujie870705

谢谢,我再琢磨琢磨。。
qnqanger 发表于 2012-11-24 10:57 | 显示全部楼层
现在我也遇到同样的问题了,楼主解决了吗?怎么解决的,告诉一下方法,万分感谢
zcl_l 发表于 2013-5-18 10:25 | 显示全部楼层
这个问题我也遇到过,用TC标志解决了,但效率是不是不如TXE高啊?
aaa1125456 发表于 2015-5-5 16:19 | 显示全部楼层
我也遇到这个问题 了 无论多长 都是最后2个发布了
aaa1125456 发表于 2015-5-5 16:21 | 显示全部楼层
我的要是后面加个延迟  最后一个 会跑到下轮接收到
zzwcn2012 发表于 2015-5-7 16:42 | 显示全部楼层
学习一下!
zh113214 发表于 2015-5-7 22:20 | 显示全部楼层

有没有DAC产生固定电压的程序,可以设置的。。
yangguangchenju 发表于 2016-11-28 16:47 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

220

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部