谁是谁的谁520 发表于 2018-9-19 15:32:26

wenyangzeng 发表于 2018-9-19 15:17
那应该考虑接收中断如果发生溢出需要先读SR,再读DR寄存器

USART_ClearFlag(USART2,USART_FLAG_ORE);        // ...

加了一个溢出中断判定,好像还是不行

谁是谁的谁520 发表于 2018-9-19 15:33:31

{
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE) != RESET)
{
    Com1Recv.Buff = USART_ReceiveData(USART1);
    if(Com1Recv.Ptr >= MAX_BYTES_COM_RECV)//溢出了,丢掉
    {
      Com1Recv.Ptr = 0;
    }
}

if(USART_GetITStatus(USART1,USART_IT_ORE) != RESET)//接收一字节数据
{
    USART_ClearFlag(USART1, USART_FLAG_ORE);
    USART_ReceiveData(USART1);
}
}

谁是谁的谁520 发表于 2018-9-19 15:34:04

串口一是与上位机通讯,,,串口2是接收模块数据,模块一直主动上传

谁是谁的谁520 发表于 2018-9-19 15:37:34

1537342635(1)

wenyangzeng 发表于 2018-9-19 16:30:10

谁是谁的谁520 发表于 2018-9-19 15:34
串口一是与上位机通讯,,,串口2是接收模块数据,模块一直主动上传

ST官方文档可以参考:

谁是谁的谁520 发表于 2018-9-19 16:54:52

wenyangzeng 发表于 2018-9-19 16:30
ST官方文档可以参考:

现象如下,刚开始正常,后面发送没有回应,关闭串口,重新打开,又恢复正常,不过产品应该是重启过,数据恢复到0

谁是谁的谁520 发表于 2018-9-20 10:58:52

谁是谁的谁520 发表于 2018-9-19 16:54
现象如下,刚开始正常,后面发送没有回应,关闭串口,重新打开,又恢复正常,不过产品应该是重启过,数据 ...

问题已解决,原因是USART_GetFlagStatus和USART_GetITStatus,,,,,获取ORE标记,需用USART_GetFlagStatus,然后清0
页: 1 [2]
查看完整版本: STM32F051串口问题