CH573调试串口协议遇到问题,求教

最近在调试串口协议时遇到些问题,向大家请教一下。

首先通过UART1_RecvString(RxBuff)将接收到的数据存入数组RxBuff中,然后判断数组RxBuff前两位是否等于0xaa和0xc0,如果等于将RxBuff输出。调试中发现无法进行等于判断,请问大家是否遇到相似的问题。

#include "CH57x_common.h"


UINT8 TxBuff[] = "This is a tx exam\r\n";

UINT8 RxBuff[100];

UINT8 trigB;


int main()

{

  UINT8 len;


  SetSysClock( CLK_SOURCE_PLL_60MHz );


  /* 配置串口1:先配置IO口模式,再配置串口 */

  GPIOA_SetBits( GPIO_Pin_9 );

  GPIOA_ModeCfg( GPIO_Pin_8, GPIO_ModeIN_PU );// RXD-配置上拉输入

  GPIOA_ModeCfg( GPIO_Pin_9, GPIO_ModeOut_PP_5mA );    // TXD-配置推挽输出,注意先让IO口输出高电平

  UART1_DefInit();



  while( 1 )

  {

    len = UART1_RecvString( RxBuff );

    if ( RxBuff[0]==0xaa&&RxBuff[1]==0xc0)

    {

       UART1_SendString( RxBuff, len );

    }

  }


}


兄弟,你是不是串口一直没有下发数据啊,你不发数据,UART1_RecvString一直在死等啊?


我在上位机上发的数据,不错条件判断时,一发一收都正常,做判断不对了


主要是做串口协议,需要判断报头数据和校验数据,查到最后发现“==”等于运算符不起作用


您好,您是用的查询的方式去做的串口收发,您可以在您那个条件判断前面加上printf打印看一下您的那个RxBuff是不是这两个数据(0xAA,0xC0)。


串口使用,对于实际项目或工程优先用中断方式,不管是及时性还是控制,对于整个项目都是优先的选择。

对于的确需要使用串口轮询方式,可以添加如下方式查看原因

在while(1)循环内,可以添加打印len的长度。

while(1)

{

     len = UART1_RecvString( RxBuff );

    if(len){

        PRINT("len=%d\n",len);

    }

}

PC串口工具打印如截图,UART1接收到的数据长度并不是一次性发送完成。

每次发送完成后都会对RxBuff,len重新赋值,所以if ( RxBuff[0]==0xaa&&RxBuff[1]==0xc0)不会成立

urt1.jpg



只有登录才能回复,可以选择微信账号登录