[STM32F1] stm32和stm8串口通信问题

[复制链接]
1446|9
 楼主| neonny 发表于 2015-5-20 17:20 | 显示全部楼层 |阅读模式
        串口通信,stm8发送数据,stm32接收数据,两个IC波特率,停止位等设置一样。现在stm8数据发送正常,stm32接收单个字节也正常,但如果连续发送数据,接收就不准确了,请问是什么原因?stm32中断接收程序如下:
        void USART1_IRQHandler(void){
        if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
        {
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);
                  bright = USART_ReceiveData(USART1);
        }
        /*溢出-如果发生溢出需要先读SR,再读DR寄存器 则可清除不断入中断的问题*/
        if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)
    {
        USART_ClearFlag(USART1,USART_FLAG_ORE);
        USART_ReceiveData(USART1);
    }
}
mmuuss586 发表于 2015-5-20 19:29 | 显示全部楼层
接收不正确:是接收不到数据,还是丢数据,还是无法进入中断呢?
尤彼卡 发表于 2015-5-20 20:25 | 显示全部楼层
会不会是时序问题
desertsailor 发表于 2015-5-20 21:23 | 显示全部楼层
用中断接收的方式如果发送数据速度太快可能会丢数据
周董 发表于 2015-5-21 10:00 | 显示全部楼层
发生溢出需要先读SR,再读DR寄存器 。楼主再看看。
 楼主| neonny 发表于 2015-5-21 11:45 | 显示全部楼层
mmuuss586 发表于 2015-5-20 19:29
接收不正确:是接收不到数据,还是丢数据,还是无法进入中断呢?

是接收到是数据和最后发送的数据不一样
 楼主| neonny 发表于 2015-5-21 11:47 | 显示全部楼层
desertsailor 发表于 2015-5-20 21:23
用中断接收的方式如果发送数据速度太快可能会丢数据

把波特率调小,也无法解决这个问题
 楼主| neonny 发表于 2015-5-21 11:51 | 显示全部楼层
周董 发表于 2015-5-21 10:00
发生溢出需要先读SR,再读DR寄存器 。楼主再看看。

加了这两句,然后再这两句设置断点,不能进入,就表示没有溢出吧
/*溢出-如果发生溢出需要先读SR,再读DR寄存器 则可清除不断入中断的问题*/
        if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)
    {
        USART_ClearFlag(USART1,USART_FLAG_ORE);
        USART_ReceiveData(USART1);
    }
justtest111 发表于 2015-5-21 17:10 | 显示全部楼层
stm8和stm32的大小端是否一致?我没确认过,仅提问一下。
 楼主| neonny 发表于 2015-5-21 17:52 | 显示全部楼层
justtest111 发表于 2015-5-21 17:10
stm8和stm32的大小端是否一致?我没确认过,仅提问一下。

百度了一下大小端,应该不是这个问题吧,单个字节发送是可以正确读出来的,连续发送才不正确
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部