串口的数据解析代码

 /**
   * 函数名:UART1_Handler()
   * 功能: 串口1的中断服务函数
   * 入口参数:无
   * 引脚: 无 
   * USART1_RX_STA:串口一的接收状态标志位
   * USART1_BUFF[USART1_Length]:缓冲区(存储数据),串口长度
   */
u16 USART1_RX_STA;
u16 USART1_BUFF[USART1_Length];

void USART1_IRQHandler()
{
    u8 Res;
    if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
    {
        Res=USART_ReceiveData(USART1);
        
        if((USART1_RX_STA&0X8000)==0)
        {
            if(USART1_RX_STA&0x4000)
            {
                if(Res == 0x0a)
                {
                    USART1_RX_STA = USART1_RX_STA|0x8000;
                }
                else
                {
                    USART1_RX_STA = 0;
                }
            }
            else
            {
                if(Res != 0x0d)
                {
                    USART1_BUFF[USART1_RX_STA&0x3FFF]=Res;
                    USART1_RX_STA++;
                    if(USART1_RX_STA>(USART1_Length-1))
                    {
                        USART1_RX_STA=0;
                    }
                }
                else
                {
                    USART1_RX_STA = USART1_RX_STA|0x4000;
                }
            }
        }
    }
}


15bit 14bit 13bit~0bit
判断0x0d 判断0x0a 数据位,用来存储数据

代码流程图推导:假设接收到 a,b , c , d , 0x0d , 0x0a(0x0d,0x0a是\r\n的ascii码)

  • 流程图

总而言之,你假设几个接收数据(a,b,c,d,0x0d,0x0a),然后带进函数里面跑一下,就能清楚它的原理

相关知识

问:串口中断中能用延迟函数吗

答:

相关代码:串口通信数据包解析

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐