CH559L 串口0上升沿出现台阶

如图,UART0 上升沿不够陡峭。时间看起来是对的115200波特率8.6us。

串口输出接74HC04,走线距离不到2CM,阻抗应该不会有问题吧?

CH559L UART0 115200.png

/*******************************************************************************
* Function Name  : InitUART0()
* Description    : CH559串口0初始化,默认使用T1作UART0的波特率发生器,也可以使用T2
                   作为波特率发生器
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void InitUART0()
{
    UINT32 x;
    UINT8 x2; 

#ifdef DEBUG
    CH559UART0Alter();
#endif
    
    SM0 = 0;
    SM1 = 1;
    SM2 = 0;                                                                   //串口0使用模式1
                                                                               //使用Timer1作为波特率发生器
    RCLK = 0;                                                                  //UART0接收时钟
    TCLK = 0;                                                                  //UART0发送时钟
    PCON |= SMOD;
    x = 10 * FREQ_SYS / BUAD_RATE / 16;                                             //如果更改主频,注意x的值不要溢出                            
    x2 = x % 10;
    x /= 10;
    if ( x2 >= 5 ) x++;                                                       //四舍五入

    TMOD = TMOD & ~ bT1_GATE & ~ bT1_CT & ~ MASK_T1_MOD | bT1_M1;              //0X20,Timer1作为8位自动重载定时器
    T2MOD = T2MOD | bTMR_CLK | bT1_CLK;                                        //Timer1时钟选择
    TH1 = 0-x;                                                                 //12MHz晶振,buad/12为实际需设置波特率
    TR1 = 1;                                                                   //启动定时器1

	REN = 1;                                                                   //串口0接收使能
	
#ifdef DEBUG
	TI = 1;
#else
	TI = 0;

	ES = 1;
#endif
}
/*******************************************************************************
* Function Name  : UART_Send
* Description    : 串口0字节发送
* Input          : dat    串口待发送数据
* Output         : None
* Return         : None
*******************************************************************************/
void UART_Send( UINT8 dat )
{
    TI = 0;
    SBUF = dat;
    while( TI == 0 ) 
	{;}
}


建议测试一下去掉74HC04直接测试串口信号是否有问题,可以试试配置成推挽输出模式。


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