CH554 uart1的串口使用问题

请问如果我想实现CH554串口UART1接收,发送引脚作为普通IO口。串口接收完成后,控制TX脚拉高拉低,再接收,再控制TX脚拉高拉低。。。。如此循环。

  1. 能否实现这样的功能?

  2. 如果可以实现,需要注意什么?

谢谢!!

1、可以实现的,在UART1的RX功能正常的时候,操作P1寄存器可以正常的控制P17端口的高低电平。

2、直接正常操作P17位就可以


感谢!我发现串口接收处理完成后,调用mDelaymS()延时120ms,但是上位机一直以100ms发送数据,有概率造成串口死掉,请问有发现过这种问题吗?谢谢!


icon_rar.gifEXAM.zip



#include "..\Public\CH554.H"                                                  

#include "..\Public\Debug.H"

#include "./GPIO/GPIO.h"

#include "UART_TEST.h"

#include "UART1.H"

#include "stdio.h"

#include


#pragma  NOAREGS


UINT8   cmmnctRcvDataOffset;

UINT8   gCmmnRevDataBuf[COM_REC_PACK_LENGTH];//接收数据缓存


/*********************************************************************

 * @fn      UartRecIRQHandler

 *

 * @brief   串口中断处理函数

 *

 * @param   none

 *

 * @return  none

 */

void UartRecIRQHandler(UINT8 _recdata)

{

    if(cmmnctRcvDataOffset >= COM_REC_PACK_LENGTH)

    {

        cmmnctRcvDataOffset = 0;

    }

    gCmmnRevDataBuf[cmmnctRcvDataOffset++] = _recdata;

    if(cmmnctRcvDataOffset == 2 && (gCmmnRevDataBuf[0] != CMMNCT_HEADER1 || gCmmnRevDataBuf[1] != CMMNCT_HEADER2))

    {

        cmmnctRcvDataOffset = 0;

    }

}


/*********************************************************************

 * @fn      CommRevPacket

 *

 * @brief   接收数据处理函数

 *

 * @param   none

 *

 * @return  none

 */

UINT8 CommRevPacket(void)

{

    if(cmmnctRcvDataOffset >= 32)

    {

        EA = 0;

        cmmnctRcvDataOffset = 0;

        EA = 1;

        mDelaymS(120);

        printf("rec\n");

    }

    

    return 0;

}


/*********************************************************************

 * @fn      PeripheralUartInit

 *

 * @brief   串口初始化

 *

 * @param   none

 *

 * @return  none

 */

void PeripheralUartInit(void)

{

    UART1Init();

}



我在串口例程中加入上面的代码,CommRevPacket在main里轮询,UartRecIRQHandler()在串口中断处理。上位机一直以100ms发送数据,这样串口就会死掉,发送没有反应了,工程已经上传,在最上方


在您的代码基础上加上了一些打印信息,电脑端串口模块的TX接P1.6RXD1,电脑端串口模块RX接P3.1监控打印信息

电脑端发送一个字节数据可以收回7个字节的打印信息。

image.png

电脑端配置成100ms发送一个字节数据,发送752字节数据,收到了5264字节打印信息,同时会看打印信息,数据接收全部正确。串口接收、中断功能本身功能应该是没有问题的,可以再查一下应用代码逻辑是否有问题。

image.png


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