串口透传例子中 串口1不能接收数据 不进入中断

代码:

void uart1_init()

{

    GPIOA_SetBits(bRXD1);

    GPIOA_ModeCfg(bRXD1, GPIO_ModeIN_PU);

    GPIOA_SetBits(bTXD1);

    GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA);

    UART1_DefInit();

    UART1_INTCfg( ENABLE, RB_IER_RECV_RDY|RB_IER_LINE_STAT );

    PFIC_EnableIRQ( UART1_IRQn );

}

__attribute__((interrupt("WCH-Interrupt-fast")))

__attribute__((section(".highcode")))

void UART1_IRQHandler( void )

{

  switch ( UART1_GetITFlag() )

  {

    case UART_II_LINE_STAT :        // 线路状态错误

    {

      UART1_GetLinSTA();

      break;

    }


    case UART_II_RECV_RDY :          // 数据达到设置触发点

      break;


    case UART_II_RECV_TOUT :         // 接收超时,暂时一帧数据接收完成

      len1 = UART1_RecvString( Rx1Buff );

      UART1_SendString(Rx1Buff,len1);

      SendToBle(Rx1Buff,len1);

      break;


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

      break;


    case UART_II_MODEM_CHG :         // 只支持串口0

      break;


    default :

      break;

  }


}


你的代码,实际上是进入了中断,只是你没处理,

你的代码如果只是这些初始化,在该外设其他寄存器是默认值的情况下, 其只会进入这个case:

UART_II_RECV_RDY

而你却未作任何处理.



非常感谢你的回答,但是还是不能进入中断,即使我代码这样写:

__attribute__((interrupt("WCH-Interrupt-fast")))

__attribute__((section(".highcode")))

void UART1_IRQHandler( void )

{

    UART1_SendByte( 0x11 );

}



首先,确保你的芯片和例程对的上, 并且硬件连接,是正常的


其次,你应该首先尝试官方例程的工程 EVT>EXAM>UART1

直接烧录里面的hex文件:UART1.hex

这个代码默认115200波特率 给其发什么收到什么,


在上面跑通后,

然后打开该工程,修改两个宏,即可实现中断接收,收到什么发送什么出来,波特率同样是115200,

image.png



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