搜索

GD32F207 USART3可以发送内容,进入不了中断

[复制链接]
566|15
 楼主 | 2019-12-10 16:02 | 显示全部楼层 |阅读模式
发送内容是正常的,但是pc发送给单片机进入不了中断,单片机引脚焊接正常,用示波器量也有波形产生
void USART_GPIOConfiguation(void)
{
    GPIO_InitPara  GPIO_InitStructure;

    /* 开启IO时钟和复用时钟 */
    RCC_APB2PeriphClock_Enable( RCC_APB2PERIPH_GPIOC , ENABLE );
    RCC_APB2PeriphClock_Enable( RCC_APB2PERIPH_AF, ENABLE );   
    GPIO_InitStructure.GPIO_Pin     = GPIO_PIN_10 ;         
    GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_AF_PP;
    GPIO_InitStructure.GPIO_Speed   = GPIO_SPEED_50MHZ;
    GPIO_Init( GPIOC , &GPIO_InitStructure);
   
    GPIO_InitStructure.GPIO_Pin     = GPIO_PIN_11;
    GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_IN_FLOATING;;
    GPIO_Init( GPIOC , &GPIO_InitStructure);

    GPIO_PinRemapConfig(GPIO_PARTIAL_REMAP_USART3, ENABLE);  

  void USART_InitConfiguation(u32 bound)
{
        USART_InitPara USART_InitStructure;

        USART_DeInit( USART3 );

        USART_InitStructure.USART_BRR                           = bound;
        USART_InitStructure.USART_WL                            = USART_WL_8B;
        USART_InitStructure.USART_STBits                    = USART_STBITS_1;
        USART_InitStructure.USART_Parity                = USART_PARITY_RESET;
        USART_InitStructure.USART_HardwareFlowControl         = USART_HARDWAREFLOWCONTROL_NONE;
        USART_InitStructure.USART_RxorTx                = USART_RXORTX_RX | USART_RXORTX_TX;
        USART_Init(USART3, &USART_InitStructure);

        /* USART enable */
        USART_Enable(USART3, ENABLE);
}
void NVIC_Configuration(void)
{
        NVIC_InitPara NVIC_InitStructure;
       
       

        NVIC_InitStructure.NVIC_IRQ                                 = USART3_IRQn;                // 串口3中断通道
        NVIC_InitStructure.NVIC_IRQPreemptPriority  = 0;
        NVIC_InitStructure.NVIC_IRQSubPriority                  = 0;
        NVIC_InitStructure.NVIC_IRQEnable                         = ENABLE;                        // IRQ通道使能
        NVIC_Init(&NVIC_InitStructure);                                                                        // 根据指定的参数初始化NVIC寄存器
        USART_INT_Set(USART3, USART_INT_RBNE, ENABLE);                                        // 开启相关中断
}
void USART3_IRQHandler(void)
{
    if(USART_GetIntBitState( USART3, USART_FLAG_RBNE) != RESET)
    {
                                USART_ClearBitState(USART3,USART_FLAG_RBNE);
        printf("%c",USART_DataReceive(USART3));
    }
                us_flag = 1;
}

使用特权

评论回复
 楼主 | 2019-12-10 16:34 | 显示全部楼层
有没有遇到类似情况的,请各位大神帮忙看一下。

使用特权

评论回复
| 2019-12-10 16:54 | 显示全部楼层
nvic_irq_enable(USART0_IRQn, 0, 0);
//usart_interrupt_enable(USART0, USART_INTEN_TBEIE);
USART_CTL0(USART0)|=(unsigned int)1<<6;
usart_interrupt_enable(USART0, USART_INTEN_RBNEIE);
USART_CTL1(USART0)=0;
我这个是GD32F450的串口中断配置,好像你的库文件不是GD的啊,是参考STM的吗??

使用特权

评论回复
| 2019-12-10 17:03 | 显示全部楼层
你这库有点老了

使用特权

评论回复
 楼主 | 2019-12-10 17:08 | 显示全部楼层
xdqfc 发表于 2019-12-10 16:54
nvic_irq_enable(USART0_IRQn, 0, 0);
//usart_interrupt_enable(USART0, USART_INTEN_TBEIE);
USART_CTL0( ...

这个库是GD的,实现的功能是一样的。

使用特权

评论回复
 楼主 | 2019-12-10 17:08 | 显示全部楼层
xdqfc 发表于 2019-12-10 16:54
nvic_irq_enable(USART0_IRQn, 0, 0);
//usart_interrupt_enable(USART0, USART_INTEN_TBEIE);
USART_CTL0( ...

这个库是GD的,实现的功能是一样的。

使用特权

评论回复
| 2019-12-10 18:13 | 显示全部楼层
库不库,就不要管他了,我上面那个中断设置后,是可以进入发送中断的。有兴趣的话可以试试看。

使用特权

评论回复
| 2019-12-10 18:15 | 显示全部楼层
原文没有看清楚,是PC发数据给单片机啊,等于讲没有接收中断,我上面那个就是跟PC通信的,可以接收中断的。

使用特权

评论回复
 楼主 | 2019-12-10 18:18 | 显示全部楼层
xdqfc 发表于 2019-12-10 18:13
库不库,就不要管他了,我上面那个中断设置后,是可以进入发送中断的。有兴趣的话可以试试看。[em:3 ...

我这边还是进入不了中断,不知道为什么。非常感谢你能够帮忙。

使用特权

评论回复
| 2019-12-11 08:51 | 显示全部楼层
楼主可以将中断函数里清除标志和printf输出掉换一下位置试试,,,,先printf然后再清除标志

使用特权

评论回复
| 2019-12-11 09:13 | 显示全部楼层
本帖最后由 sonicll 于 2019-12-11 09:27 编辑

楼主先确认一下USART的数据寄存器有没有接收到数据,如果确实接收到数据,但是进不了中断,那就检查一下你的中断服务函数名字和启动文件里是否一致,还有USART3_IRQn这个中断编号是否正确。楼主你这个库应该不是GD最新的,你这里的USART3,实际应该对应的是手册里的USART2吧?


我看了下GD的1.0库,USART_GetIntBitState()这个函数的第二个参数,应该用USART_INT_RBNE而不是USART_FLAG_RBNE吧?楼主看看是不是已经进中断了,但是这个判断标志位的语句写错了?


使用特权

评论回复
 楼主 | 2019-12-11 18:06 | 显示全部楼层
sonicll 发表于 2019-12-11 09:13
楼主先确认一下USART的数据寄存器有没有接收到数据,如果确实接收到数据,但是进不了中断,那就检查一下你 ...

你好,非常感谢提供帮助。我看了下启动文件 EXPORT  USART0_IRQHandler                   [WEAK]
                    EXPORT  USART1_IRQHandler                   [WEAK]
                    EXPORT  USART2_IRQHandler                   [WEAK]
                    EXPORT  EXTI10_15_IRQHandler                [WEAK]
                    EXPORT  RTC_Alarm_IRQHandler                [WEAK]
                    EXPORT  USBFS_WKUP_IRQHandler               [WEAK]
                    EXPORT  TIMER7_BRK_TIMER11_IRQHandler       [WEAK]
                    EXPORT  TIMER7_UP_TIMER12_IRQHandler        [WEAK]
                    EXPORT  TIMER7_TRG_CMT_TIMER13_IRQHandler   [WEAK]
                    EXPORT  TIMER7_Channel_IRQHandler           [WEAK]
                    EXPORT  ADC2_IRQHandler                     [WEAK]
                    EXPORT  EXMC_IRQHandler                     [WEAK]
                    EXPORT  SDIO_IRQHandler                     [WEAK]  
                    EXPORT  TIMER4_IRQHandler                   [WEAK]
                    EXPORT  SPI2_IRQHandler                     [WEAK]
                    EXPORT  UART3_IRQHandler                    [WEAK]
                    EXPORT  UART4_IRQHandler                    [WEAK]
里面确实有USART0 USART1 USART2  UART3_IRQHandler ,这样问题来了,到底是用USART2,还是UART3?

使用特权

评论回复
| 2019-12-11 18:17 | 显示全部楼层
本帖最后由 sonicll 于 2019-12-11 18:18 编辑
vince001 发表于 2019-12-11 18:06
你好,非常感谢提供帮助。我看了下启动文件 EXPORT  USART0_IRQHandler                   [WEAK]
       ...

如果是这样的话,你的中断服务函数名应该要用USART2_IRQHandler了,还有USART3_IRQn这个你也要检查一下是否需要修改为USART2_IRQn
感觉你这套固件库是新旧文件混合着用的,容易出问题,还是建议你全更新到最新版吧

使用特权

评论回复
 楼主 | 2019-12-11 18:27 | 显示全部楼层
sonicll 发表于 2019-12-11 18:17
如果是这样的话,你的中断服务函数名应该要用USART2_IRQHandler了,还有USART3_IRQn这个你也要检查一下是 ...

这个用USART2—IRQHandler也是进不了中断,我先换下库试一下。

使用特权

评论回复
| 2019-12-12 22:33 | 显示全部楼层
用新版本改吧

使用特权

评论回复
 楼主 | 2019-12-16 11:20 | 显示全部楼层
非常感谢各位,现在用新版本的库做了下,已经可以了。建议以后还是用新库。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表