在使用两个STM串口来实现收发数据,为什么在接受数据时,延迟打印后,每当发送4个数据后就会有一个数据被覆盖。

2019-08-14 03:46发布

发送程序
//while(++time%500 != 0);
                                        usart3_send(0xff);
                                delay_ms(30);
                                //while(++time%500 != 0);
                                  usart3_send(0xfe);
                  delay_ms(30);                               
                                //while(++time%500 != 0);
                                  usart3_send(2);
                                  delay_ms(30);
                                //while(++time%500 != 0);
                                  usart3_send(1);
                                delay_ms(30);
                                //while(++time%500 != 0);
                                  usart3_send(72);
                                delay_ms(30);
                                //while(++time%500 != 0);
                                  usart3_send(10);
                                delay_ms(30);
                                //while(++time%500 != 0);
                                  usart3_send(20);
                                delay_ms(30);
                                //while(++time%500 != 0);
                                  usart3_send(30);
                                        delay_ms(30);
                                //while(++time%500 != 0);
                                  usart3_send(40);
                                        delay_ms(30);

发送的函数
void usart3_send(u8 data)
{
        USART3->DR = data;
        while((USART3->SR&0x40)==0);       
}

接受程序
int USART3_IRQHandler(void)
{       
        if(USART3->SR&(1<<5))//接收到数据
        {             
                u8 res;       
                res=USART3->DR;
                delay_ms(20);
                printf( " USART3接收到的数据=%d ",res );
               
   }
return 0;       
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
simms01
1楼-- · 2019-08-14 04:29
不带你这么玩的  ,1 要用双缓冲 1组缓冲最少1K   2.收到数据不要处理先扔缓冲   3.要用定时器判断数据超时
wxjhby
2楼-- · 2019-08-14 04:50
中断不要做延时和printf()函数
少爷在哪里
3楼-- · 2019-08-14 07:54
。。我知道是delay(20)出的问题,但和printf没有关系吧,我是想问我在发送那边搞了个delay(30);在延迟打印搞了个delay(20);这不相当于在发送端延迟了delay(10);为什么,下面还是会出现我说的错误,我是想搞明白30是怎样被40覆盖的。麻烦知道的说具体点
hstar
4楼-- · 2019-08-14 12:33
首先在接收中断里面放延时这就是错误的写法。。中断的时间越短越好,你应该在你的循环里面做文章,肯定没问题。
huanghan
5楼-- · 2019-08-14 13:14
 精彩回答 2  元偷偷看……
zey
6楼-- · 2019-08-14 16:05
首先,中断函数就有问题,中断函数可以有返回值吗???还有出了中断要清中断

一周热门 更多>