在使用两个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条回答
少爷在哪里
1楼-- · 2019-08-14 18:16
zey 发表于 2017-8-29 15:01
首先,中断函数就有问题,中断函数可以有返回值吗???还有出了中断要清中断

哥,return 0 是C语言的写法没错的,而且,只要读取寄存器的数据他就自动将RXNE清除了
少爷在哪里
2楼-- · 2019-08-14 23:10
实话,跟你说吧,我只要注释掉DELAY(20),就实现正常的收发了,就是在那里加延迟才错的,你在看看我是怎么问的
zey
3楼-- · 2019-08-15 01:39
少爷在哪里 发表于 2017-8-29 15:33
哥,return 0 是C语言的写法没错的,而且,只要读取寄存器的数据他就自动将RXNE清除了

int USART3_IRQHandler(void)我说你这个写法不对,中断函数怎么可能又返回值?
少爷在哪里
4楼-- · 2019-08-15 03:47
 精彩回答 2  元偷偷看……
正点原子
5楼-- · 2019-08-15 07:31
自己去计算时间printf,很耗时间。。。
少爷在哪里
6楼-- · 2019-08-15 13:27
正点原子 发表于 2017-8-30 00:35
自己去计算时间printf,很耗时间。。。

兄弟,打印很耗时间吗,这个我不知道耶,能不能叫我怎么计算啊,拜托了,大佬

一周热门 更多>