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

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条回答
18323054303
1楼-- · 2019-08-19 17:59
本帖最后由 18323054303 于 2017-5-24 23:45 编辑
wmaxwell 发表于 2017-5-24 17:18
这特么写的什么代码啊!!!?中断和DMA都不用 ……

兄弟,我串口2接收数据的时候好像并未发生中断啊。。。我if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)这一句下面的东西好像没执行
oyixi001
2楼-- · 2019-08-19 21:50
本帖最后由 oyixi001 于 2017-5-25 08:31 编辑
18323054303 发表于 2017-5-24 23:37
兄弟,我串口2接收数据的时候好像并未发生中断啊。。。我if(USART_GetITStatus(USART2, USART_IT_RXNE) ! ...

你接收要么用中断,要么用DMA。
你用的查询法也不是不可以,但是你用了if(USART_GetITStatus(USART2, USART_IT_RXNE)来检查,你有没有想过一个问题:
上面串口一刚发送,你下面串口2就检查有没有收到,怎么会不出错呢?所以,一定要用的话,可以换用while试试,就是说一直在循环反复检查串口2有没有接收完标志,然后在这循环里要加上超时退出,不然可能死在这个循环里,或者在你的if前加上一小段延时1ms啥的。
我没有试嗷,看了你的代码感觉差不多是这么回事。
wmaxwell
3楼-- · 2019-08-19 23:25
 精彩回答 2  元偷偷看……
沧海
4楼-- · 2019-08-20 02:17
你会串口吗?????
18323054303
5楼-- · 2019-08-20 08:05
oyixi001 发表于 2017-5-25 08:29
你接收要么用中断,要么用DMA。
你用的查询法也不是不可以,但是你用了if(USART_GetITStatus(USART2, U ...

兄弟,我明白你的意思,我是不想把串口2发送,放到中断服务函数里面,想在main函数里面做,但是if(USART_GetITStatus(USART2, USART_IT_RXNE)放在main里面好像又要出事
18323054303
6楼-- · 2019-08-20 12:33
沧海 发表于 2017-5-25 11:03
你会串口吗?????

新手学习中,见笑了。。。

一周热门 更多>