CH579 CH573 CH582 UART中断

以串口1为例子
串口初始化
  GPIOA_SetBits(bTXD1);
  GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA);//设置TXD输出
  UART1_DefInit( );//串口1初始化,默认波特率115200
中断设置和开启 
UART1_ByteTrigCfg( UART_7BYTE_TRIG );//串口自带8字节FIFO,设置7字节触发 trigB = 7; UART1_INTCfg( ENABLE, RB_IER_RECV_RDY|RB_IER_LINE_STAT );//开启线路中断和接收中断 PFIC_EnableIRQ( UART1_IRQn );//使能串口1中断
中断函数
__attribute__((interrupt("WCH-Interrupt-fast"))) //573 582 必加 __attribute__((section(".highcode"))) //573 582 必加 void UART1_IRQHandler( void ) { UINT8V i; switch ( UART1_GetITFlag() ) { case UART_II_LINE_STAT : // 线路状态错误 { UART2_GetLinSTA(); break; } case UART_II_RECV_RDY : // 数据达到设置触发点 for ( i = 0; i != trigB; i++ ) { RxBuff[Rcvlen] = UART1_RecvByte(); // UART1_SendByte( RxBuff[i] ); Rcvlen++; } break; case UART_II_RECV_TOUT : // 接收超时,暂时一帧数据接收完成 i = UART1_RecvString( &RxBuff[Rcvlen] ); // UART1_SendString( RxBuff, i ); Rcvlen+=i; break; case UART_II_THR_EMPTY : // 发送缓存区空,可继续发送 break; case UART_II_MODEM_CHG : // 只支持串口0 break; default : break; } }

如果是串口0  串口2 串口3,修改一下端口和调用的函数即可

 
posted @ 2022-01-24 10:18  debugdabiaoge  阅读(841)  评论(0编辑  收藏  举报