打印

GD32F470ZG UART3串口接收中断导致触发hardfault问题

[复制链接]
783|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hedan12|  楼主 | 2023-10-13 10:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我对比官方的例程做的感觉没啥不同啊,不过官方是用的usart0,是uart3不能用USART_INT_RBNE??这边中断一触发直接死机进入hardfault实在无法理解,工程中只有一个systick中断,把systick中断的优先级和工程堆栈加大都没有用,照样死
void uart3_config(void)
{
    /* enable GPIO clock */
    rcu_periph_clock_enable(UART3_GPIO_TX_CLOCK);
    rcu_periph_clock_enable(UART3_GPIO_RX_CLOCK);

    /* enable USART clock */
    rcu_periph_clock_enable(UART3_CLOCK);

    /* connect port to USARTx_Tx */
    gpio_af_set(UART3_GPIO_TX, UART3_GPIO_TX_AF, UART3_TX_PIN);

    /* connect port to USARTx_Rx */
    gpio_af_set(UART3_GPIO_RX, UART3_GPIO_RX_AF, UART3_RX_PIN);

    /* configure USART Tx as alternate function push-pull */
    gpio_mode_set(UART3_GPIO_TX, GPIO_MODE_AF, GPIO_PUPD_PULLUP, UART3_TX_PIN);
    gpio_output_options_set(UART3_GPIO_TX, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, UART3_TX_PIN);

    /* configure USART Rx as alternate function push-pull */
    gpio_mode_set(UART3_GPIO_RX, GPIO_MODE_AF, GPIO_PUPD_PULLUP, UART3_RX_PIN);
    gpio_output_options_set(UART3_GPIO_RX, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, UART3_RX_PIN);

    /* configure USART */
    usart_deinit(UART3);
    usart_baudrate_set(UART3, 115200U);
    usart_receive_config(UART3, USART_RECEIVE_ENABLE);
    usart_transmit_config(UART3, USART_TRANSMIT_ENABLE);
  //  usart_dma_receive_config(UART3, USART_RECEIVE_DMA_ENABLE);
    usart_enable(UART3);

   nvic_irq_enable(UART3_IRQn, 0, 0);
   usart_interrupt_enable(UART3, USART_INT_RBNE);
}

uint16_t val=0;

void UART3_IRQHandler(void)
{
    if(RESET != usart_interrupt_flag_get(UART3, USART_INT_RBNE)){
        /* clear IDLE flag */
     val=   usart_data_receive(UART3);


    }
}

使用特权

评论回复
沙发
hedan12|  楼主 | 2023-10-13 10:17 | 只看该作者
使用DMA+空闲中断是正常接收不会死

使用特权

评论回复
板凳
zeshoufx| | 2023-10-13 10:34 | 只看该作者
RBNE标志是不是需要手动清除

使用特权

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

本版积分规则

4

主题

7

帖子

0

粉丝