你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32利用MAX485进行串口通信延迟一位

[复制链接]
crashdown 提问时间:2016-4-23 21:53 /
本帖最后由 crashdown 于 2016-4-24 22:24 编辑

写了个程序,接受到缓存区内,并将整个缓存区发送回电脑,每次都返回前一次应该返回的数据,第一次发送不返回数据。
比方说缓存区为Buff[8]={0};
第一次发送01;无返回;
第二次发送01;返回 01 00 00 00 00 00 00 00;
第三次发送01;返回01 01 00 00 00 00 00 00;
感觉像是有个缓存器回先缓存一个字符,第二个字符来了才会将数据给STM32。
有没有大神解答一下,实在想不通。
源码:
void USART2_IRQHandler(void)
{
        u8 j;
        if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
  {
                USART_ClearITPendingBit(USART2,USART_IT_RXNE);
                if(i>7)
                        i=0;
                temp=USART_ReceiveData(USART2);
               while(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)==RESET);
//                mDelay(Modbus_Delay);
                Modbus_Transmit;
                mDelay(1);
                for(j=0;j<8;j++)
                {
                        USART_SendData(USART2,temp[j]);
                        while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
                }
                USART_SendData(USART2,'\n');
                while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
                mDelay(2);
                Modbus_Receive;
                i++;
        }
}
电脑端只是简单每次发送一位数据 01,先进行一个简单的测试,测试结果:
发送:01
发送:01
接收:01000000000000000A
发送:01
接收:01010000000000000A
发送:01
接收:01010100000000000A
发送:01
接收:01010101000000000A
发送:01
接收:01010101010000000A
发送:01
接收:01010101010100000A
发送:01
接收:01010101010101000A
发送:02
接收:01010101010101010A
发送:02
接收:02010101010101010A
收藏 评论1 发布时间:2016-4-23 21:53

举报

1个回答
xmshao 回答时间:2016-4-24 18:43:40
或许你第一个数据就没发出来吧。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版