CH582 UART3死活不工作 江湖救急

  //串口配置1=RXD3_/TXD3_ on PB[20]/PB[21]

  GPIOPinRemap(ENABLE, RB_PIN_UART3);                       // 重新映射串口3

  GPIOB_SetBits(bSCL_);                                                     // PB21输出高

  GPIOB_ModeCfg(bSDA_, GPIO_ModeIN_PU);                // PB20上拉输入

  GPIOB_ModeCfg(bSCL_, GPIO_ModeOut_PP_5mA);      // 推挽输出1

  UART3_DefInit( );                                                             // 波特率等设置

  UART3_INTCfg(ENABLE, RB_IER_RECV_RDY|RB_IER_THR_EMPTY);   // 开启中断,

  PFIC_EnableIRQ(UART3_IRQn);                                       // 使能串口中断



__INTERRUPT

__HIGH_CODE

void UART3_IRQHandler(void)

{

  switch(UART3_GetITFlag())

  {

    case  UART_II_RECV_RDY:  //接收到数据

          Finger_Rx_Buf[Finger_Rx_Buf_Write_Count]=R8_UART3_RBR;

          if((Finger_Tx_Count==0)&&(0x55==Finger_Rx_Buf[Finger_Rx_Buf_Write_Count]))Finger_Timer=100;  //1S

          Finger_Write_Rx_Buf();

          break;

    case  UART_II_THR_EMPTY: //发送缓存区空,可以继续发送数据

          if(Finger_Tx_Buf_Write_Count!=Finger_Tx_Buf_Read_Count)

          {

            R8_UART3_THR=Finger_Tx_Buf[Finger_Tx_Buf_Read_Count];

            PRINT("%x", Finger_Tx_Buf[Finger_Tx_Buf_Read_Count]);

            Finger_Read_Tx_Buf();

          }

          else

          {

            Finger_Tx_Busy_0;     //3位=0发送空闲

            Finger_Timer=0;

          }

          break;

    case  UART_II_MODEM_CHG: //硬件流控制

          break;

    default:

          break;

  }

}




您好,串口3不工作有什么样的现象,能否添加串口打印监控代码运行到哪一步,在串口3的中断服务函数中置标志变量检查能否正常进入接收中断,在主函数中根据标志打印监控。

排查一下硬件线路有没有问题,连接线材是否有内部断裂,USB转串口模块是否工作正常。

建议完全参考串口1例程修改代码,在串口3的中断服务函数开头加上线路状态错误分支,防止出现错误,出现错误后需要及时提取出接收FIFO中的数据,或置位R8_UARTx_FCR寄存器的RB_FCR_RX_FIFO_CLR,直接清空接收FIFO。


不好意思啊!线有问题。多有打扰。


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