WCH沁恒单片机
直播中

周煌煦

7年用户 1016经验值
私信 关注
[问答]

CH573调试串口协议无法进行等于判断是为什么?

最近在调试串口协议时遇到些问题,向大家请教一下。
首先通过UART1_RecvString(RxBuff)将接收到的数据存入数组RxBuff中,然后判断数组RxBuff前两位是否等于0xaa和0xc0,如果等于将RxBuff输出。调试中发现无法进行等于判断,请问大家是否遇到相似的问题。
#include "CH57x_common.h"

UINT8 TxBuff[] = "This is a tx examrn";

UINT8 RxBuff;

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 );

}

}



}

回帖(2)

张凤英

2022-9-5 09:20:11
您是用的查询的方式去做的串口收发,您可以在您那个条件判断前面加上printf打印看一下您的那个RxBuff是不是这两个数据(0xAA,0xC0
举报

彭丞峥

2022-9-5 09:20:31
串口使用,对于实际项目或工程优先用中断方式,不管是及时性还是控制,对于整个项目都是优先的选择。
对于的确需要使用串口轮询方式,可以添加如下方式查看原因
在while(1)循环内,可以添加打印len的长度。
while(1)

{

len = UART1_RecvString( RxBuff );

if(len){

PRINT("len=%dn",len);

}

}


PC串口工具打印如截图,UART1接收到的数据长度并不是一次性发送完成。
每次发送完成后都会对RxBuff,len重新赋值,所以if ( RxBuff[0]==0xaa&&RxBuff[1]==0xc0)不会成立
举报

更多回帖

发帖
×
20
完善资料,
赚取积分