打印

stm32usart串口问题

[复制链接]
3908|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
06006109|  楼主 | 2012-2-14 11:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我刚试了一个usart串口的输入输出,发现发一个字节给stm32的时候能够正确回应数据,超过一个字节后数据出现不正常。?????求解答
中断函数如下:
void USART1_IRQHandler(void)
{
       u8 recv_dat ;
       if(USART_GetITStatus(USART1,USART_IT_RXNE) == SET)              
         {
                  recv_dat =USART_ReceiveData(USART1);
                  USART_SendData(USART1,recv_dat);
                  while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET){} ;        
         }
}
沙发
zsf56| | 2012-2-14 11:28 | 只看该作者
程序里估计有问题吧

使用特权

评论回复
板凳
06006109|  楼主 | 2012-2-14 11:53 | 只看该作者
2# zsf56
。。。。。。具体点?

使用特权

评论回复
地板
行不改名| | 2012-2-14 12:30 | 只看该作者
没清标志

使用特权

评论回复
5
06006109|  楼主 | 2012-2-14 13:51 | 只看该作者
4# 行不改名 你说在配置处加一个清除标志吗?加了还是一样,一个字节的收发没问题,大于一个字节就出错

使用特权

评论回复
6
香水城| | 2012-2-14 14:14 | 只看该作者
看看你的程序:收到一个字节后,等到把这个字节发送出去后,再接收下一个字节;如果在发送前一个字节时,先后收到2个以上的字节,还能正确吗?

使用特权

评论回复
7
06006109|  楼主 | 2012-2-14 14:40 | 只看该作者
回复6# ????有点看不懂。你是说收函数一次不止接收一个字节?能不能直接说说怎么改进?

使用特权

评论回复
8
香水城| | 2012-2-14 14:55 | 只看该作者
我不会告诉你具体怎么做,我只会告诉你它的原理是什么——授人以渔。

接收是由硬件完成的,一旦有数据到来,硬件就会通过移位寄存器接收下来,等一个字节接收完毕就会把这个字节从移位寄存器拷贝到一个接收缓冲区中,这时硬件可以再通过移位寄存器接收下一个字节。

USART_ReceiveData的目的只是把收到的数据从接收缓冲区读出,一旦读出了接收缓冲区中的数据之后,如果在移位寄存器中有新的数据,就会再执行上述拷贝的动作。

如果你的软件没有读出接收缓冲区中的数据,但移位寄存器中却有了新的数据,那么上述拷贝动作就不能执行,这个新的数据就会丢失。

使用特权

评论回复
9
秋天落叶| | 2012-2-14 20:08 | 只看该作者
按香主的思路应该可以很快找到问题的

使用特权

评论回复
10
jxmzzr| | 2012-2-14 22:31 | 只看该作者
设置标置位,当标置位置位时接收,接收完清零,试试吧。

使用特权

评论回复
11
tianli1980| | 2012-2-14 22:40 | 只看该作者
新手,请多多指教。本人在单片机的串接接收上经常设置标置位。呵呵,怎么设置要看自己的需要了。

使用特权

评论回复
12
dahusng7890sdo1| | 2012-2-16 14:18 | 只看该作者
我也是新手,但是看明白了,香主威武

使用特权

评论回复
13
djqinqing| | 2013-7-10 14:47 | 只看该作者
mark

使用特权

评论回复
14
liang5319| | 2013-7-11 00:15 | 只看该作者
呵呵呵呵,个人觉得,你应该把收发的程序分开。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

8

帖子

1

粉丝