打印

关于STM3F103VET6 串口1中断里 求校验和的问题

[复制链接]
2021|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lqab1983|  楼主 | 2013-3-28 15:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
库函数:STM32F10x_StdPeriph_Lib_V3.5.0
MCU: STM32F103VET6
我用串口1中断收数据,查询发!这些收到的数据均有固定长度,数据头开始后的第7位为这一帧数据的长度;现在想对收到的数据先进行判断如果头几位是0x24  0x44 0x57 0x53 0x51的话  就接收;
然后这一帧数据的末尾是校验和;这个校验和是从头开始到检验和前一字节按位异或的结果,这个校验和占一个字节。

我中断收发是网上找的例子,可以进行判断;这个求校验和我写的,怎么出来的结果是 串口1只能显示0x24;不知道为什么?请大家帮助!

void USART1_IRQHandler()
{
     while(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET) //中断产生
     {
        USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志
        Usart1_Buffer[Usart1_Rx] = USART_ReceiveData(USART1);
        Usart1_Rx++;
        Usart1_Rx &= 0xFF;
     }

     if((Usart1_Buffer[Usart1_Rx-1] == 0x51)&&(Usart1_Buffer[Usart1_Rx-2] == 0x53)&&(Usart1_Buffer[Usart1_Rx-3] == 0x57)&&(Usart1_Buffer[Usart1_Rx-4] == 0x44)&&(Usart1_Buffer[Usart1_Rx-5] == 0x24))
     {
            
  Usart1_Tx = Usart1_Rx-5;
  n = Usart1_Rx-5;
  checksum = Usart1_Buffer[Usart1_Tx];
/****************************************************************************
                                填充检验和
*******************************************************************************/
  for(i = 0;i < Usart1_Buffer[Usart1_Tx+7]-1;i++,++Usart1_Tx)
  {
   checksum = checksum ^ Usart1_Buffer[Usart1_Tx];
  }
  
  Usart1_Buffer[Usart1_Tx] = checksum;
  Usart1_Len = Usart1_Tx-n;
  
  Usart1_Sta=1; //标志位
  
   }

     if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) == SET) //溢出
     {
            USART_ClearFlag(USART1,USART_FLAG_ORE); //读SR
            USART_ReceiveData(USART1); //读DR
     }
}

int main(void)
{
  u8 tx1;
  Rcc_Configuration();
  UsartGPIO_Configuration();
  Usart_Configuration();
  USART_NVIC_Config();

while(1)
  {
  if( Usart1_Sta )
    {
          for(tx1=0;tx1 <= Usart1_Len;tx1++,n++)
             //USART2_SendByte(Uart2_Buffer[Uart2_Tx]); //发送数据
          {
     USART_ClearFlag(USART1,USART_FLAG_TC);
     USART_SendData(USART1, Usart1_Buffer[n]);
     while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
     USART_ClearFlag(USART1,USART_FLAG_TC);
    }
    Usart1_Rx = 0; //初始化
          Usart1_Tx = 0;
          Usart1_Sta = 0;
    n = 0;
   }  
  }
}



沙发
lqab1983|  楼主 | 2013-3-29 10:55 | 只看该作者
怎么没人回答了

使用特权

评论回复
板凳
IJK| | 2013-3-29 15:12 | 只看该作者
碰到问题怎么办?
建议LZ连仿真器调试一下...

使用特权

评论回复
地板
lqab1983|  楼主 | 2013-4-1 11:16 | 只看该作者
现在整的 连任何数据都收不到了 头疼

使用特权

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

本版积分规则

17

主题

53

帖子

0

粉丝