WCH沁恒单片机
直播中

刘杰

7年用户 1327经验值
私信 关注
[问答]

CH573串口发送和接收中断都进不了是为什么?怎么解决?

UART1_ByteTrigCfg(UART_1BYTE_TRIG);
UART1_INTCfg(ENABLE,RB_IER_RECV_RDY);
UART1_INTCfg(ENABLE,RB_IER_THR_EMPTY);
PFIC_EnableIRQ(UART1_IRQn);
串口如上配置,死活发送和接收中断都进不了,例子里面全是查询方式和阻塞发送不实用啊。   

回帖(1)

张洁

2022-9-20 10:18:35
/* 配置串口1:先配置IO口模式,再配置串口 */
GPIOA_SetBits(GPIO_Pin_9);
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU); // RXD-配置上拉输入
GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
UART1_DefInit();



UART1_ByteTrigCfg(UART_7BYTE_TRIG);
trigB = 7;
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)
{
volatile uint8_t i;

switch(UART1_GetITFlag())
{
case UART_II_LINE_STAT: // 线路状态错误
{
UART1_GetLinSTA();
break;
}

case UART_II_RECV_RDY: // 数据达到设置触发点
for(i = 0; i != trigB; i++)
{
RxBuff = UART1_RecvByte();
UART1_SendByte(RxBuff);
}
break;

case UART_II_RECV_TOUT: // 接收超时,暂时一帧数据接收完成
i = UART1_RecvString(RxBuff);
UART1_SendString(RxBuff, i);
break;

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

case UART_II_MODEM_CHG: // 只支持串口0
break;

default:
break;
}
}
举报

更多回帖

×
20
完善资料,
赚取积分