WCH沁恒单片机
直播中

xymbmcu

12年用户 1025经验值
擅长:可编程逻辑
私信 关注
[问答]

串口透传例子中串口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;
  }


}

回帖(2)

李子邯

2022-8-18 10:00:17
你的代码,实际上是进入了中断,只是你没处理,
你的代码如果只是这些初始化,在该外设其他寄存器是默认值的情况下, 其只会进入这个case:
UART_II_RECV_RDY
而你却未作任何处理.
举报

王莉淳

2022-8-18 10:00:29
首先,确保你的芯片和例程对的上, 并且硬件连接,是正常的


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

直接烧录里面的hex文件:UART1.hex
这个代码默认115200波特率 给其发什么收到什么,


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

举报

更多回帖

发帖
×
20
完善资料,
赚取积分