如图,UART0 上升沿不够陡峭。时间看起来是对的115200波特率8.6us。
串口输出接74HC04,走线距离不到2CM,阻抗应该不会有问题吧?
/******************************************************************************* * 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 ) {;} }
热门产品 :
CH390:以太网控制器芯片