再请教关于串口的一个问题

2019-08-18 18:51发布

RT,我想实现的功能是,串口1向串口2发送一个字符串,然后通过串口2打印出来,我这么写的
                        for(t=0;t<len;t++)
                {
                        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
                        USART_SendData(USART1, p[t]);
                        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
                        buf[t] =USART_ReceiveData(USART2);
                        USART_ClearFlag(USART2, USART_IT_RXNE);
                       
                       
                }
               
                                for(t=0;t<len;t++)
                        {
                                while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
                                USART_SendData(USART2, buf[t]);
                               
                        }

然后串口打印出来的数据不完整,串口1发送的字符串长是12位,但是串口2只能打印出7位,请问一下是什么原因?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
cromarti
1楼-- · 2019-08-20 16:01
这代码有点鬼畜啊,串口速度比较低一般都是dma和中断方式接受的……不过就这段的问题应该就是速度慢了,串口1没发送完就过了if,当前解决方法是发送完加延时。但是实际应用最好别这么干
18323054303
2楼-- · 2019-08-20 16:31
 精彩回答 2  元偷偷看……
cromarti
3楼-- · 2019-08-20 17:43
18323054303 发表于 2017-5-25 22:06
我不想把接收写到中断服务函数里面,想在main里面实现这个。。。请教一下怎么写才好

发送完之后加2ms的延时或者改成带超时判断的while
沧海
4楼-- · 2019-08-20 22:42
18323054303 发表于 2017-5-25 17:35
新手学习中,见笑了。。。

你不用中断能知道数据什么时候接受完毕??不会被覆盖??
oyixi001
5楼-- · 2019-08-21 00:19
18323054303 发表于 2017-5-25 17:34
兄弟,我明白你的意思,我是不想把串口2发送,放到中断服务函数里面,想在main函数里面做,但是if(USART ...

是啊,所以我给你写了这么多。让你用while也可以么诶。

一周热门 更多>