打印

解决GD32F470芯片上串口3无法进入中断的问题,需要仔细检查以下几个方面:

[复制链接]
612|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wailian1265k|  楼主 | 2024-1-16 12:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
中断优先级配置: 确保已正确配置中断优先级。在使用串口3时,它会引发不同类型的中断,如接收中断(RXNE)和发送中断(TXE)。确保这些中断的优先级设置正确。



NVIC_InitTypeDef NVIC_InitStructure;

// 配置串口3接收中断优先级
NVIC_InitStructure.NVIC_IRQ = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQPreemptPriority = 0;  // 优先级设置为合适的值
NVIC_InitStructure.NVIC_IRQSubPriority = 0;
NVIC_InitStructure.NVIC_IRQCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);



使用特权

评论回复
沙发
wailian1265k|  楼主 | 2024-1-16 12:21 | 只看该作者
中断使能: 确保已启用串口3的中断。在初始化串口的代码中,确保已启用接收和发送中断。
USART_INTConfig(USART3, USART_INT_RXIEN, ENABLE);  // 使能接收中断
USART_INTConfig(USART3, USART_INT_TXIEN, ENABLE);  // 使能发送中断

使用特权

评论回复
板凳
wailian1265k|  楼主 | 2024-1-16 12:21 | 只看该作者
中断服务函数: 编写正确的中断服务函数。中断服务函数的原型和名称应符合标准,并且在函数体中处理相应的中断事件。
void USART3_IRQHandler(void) {
    if (USART_GetIntBitState(USART3, USART_INT_FLAG_RXNE) != RESET) {
        // 处理接收中断事件
        // ...
    }

    if (USART_GetIntBitState(USART3, USART_INT_FLAG_TXE) != RESET) {
        // 处理发送中断事件
        // ...
    }
}

使用特权

评论回复
地板
wailian1265k|  楼主 | 2024-1-16 12:21 | 只看该作者
硬件连接和配置: 确保串口3的硬件连接和寄存器配置正确。检查波特率、数据位、停止位等配置是否与期望一致。
USART_InitPara USART_InitStructure;

USART_InitStructure.USART_BRR = 115200;  // 波特率设置
USART_InitStructure.USART_WL = USART_WL_8B;  // 数据位长度设置为8位
USART_InitStructure.USART_STBits = USART_STBITS_1;  // 1位停止位
USART_InitStructure.USART_Parity = USART_PARITY_RESET;  // 无校验
USART_InitStructure.USART_HardwareFlowCtrl = USART_HardwareFlowCtrl_None;  // 无硬件流控制
USART_InitStructure.USART_Mode = USART_MODE_Rx | USART_MODE_Tx;  // 同时启用接收和发送
USART_Init(USART3, &USART_InitStructure);

使用特权

评论回复
5
wailian1265k|  楼主 | 2024-1-16 12:22 | 只看该作者
通过仔细检查以上几个方面,您应该能够解决串口3无法进入中断的问题。如果问题仍然存在,可以进一步调试或查看芯片手册

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

372

帖子

0

粉丝