FR8018H 芯片的串口1中断数据接收问题



  • 串口1本来是调试打印串口,但是现在在设计中要用到两个串口,所以这个串口用来接外设了,但是现在初始化了,数据发送没问题,PC端串口助手可以收到,但是PC端发到mcu端没有收到数据,是需要还要配置什么吗?
    已经加了以下两条代码,关闭log输出。
    __jump_table.system_option &= ~SYSTEM_OPTION_PRINT_MASK;
    __jump_table.system_option |= SYSTEM_OPTION_PRINT_SWO;



  • @rain 那你的串口1的初始化里面打开中断了吗



  • 打开了
    system_set_port_pull (GPIO_PA2, true) :
    system_set_port_mux(GPIO_PORT_A, GPIO_BIT_2, PORTA2_FUNC_UARTI_RXD) ;
    system_set_port_mux(GPIO_PORT_A,GPIO_BIT 3,PORTA3_FUNC_UARTI_TXD) ;
    uart_init(UART1,BAUD_RATE_57600):

    NVIC_EnableIRQ(UART1_IROn):



  • void uart1_init(void)
    {
    system_set_port_pull(GPIO_PA2, true);
    system_set_port_mux(GPIO_PORT_A, GPIO_BIT_2, PORTA2_FUNC_UART1_RXD);
    system_set_port_mux(GPIO_PORT_A, GPIO_BIT_3, PORTA3_FUNC_UART1_TXD);
    uart_param_t param =
    {
    .baud_rate = 115200,
    .data_bit_num = 8,
    .pari = 0,
    .stop_bit = 1,
    };
    uart_init1(UART1,param);
    NVIC_EnableIRQ(UART1_IRQn);
    NVIC_SetPriority(UART1_IRQn, 3);
    }



  • @mars 改了还是一样。中断函数有问题吗。
    attribute((section("ram_code"))) void uart1_isr_ram(void)
    {
    uint8_t int_id;
    uint8_t c;
    volatile struct uart_reg_t * const uart_reg_ram = (volatile struct uart_reg_t )UART1_BASE;
    int_id = uart_reg_ram->u3.iir.int_id;
    if(int_id == 0x04 || int_id == 0x0c ) /
    Receiver data available or Character time-out indication */
    {
    c = uart_reg_ram->u1.data;
    }
    else if(int_id == 0x06)
    {
    volatile uint32_t line_status = uart_reg_ram->lsr;
    }
    }



  • 不进中断还是什么

    attribute((section("ram_code"))) void uart1_isr_ram(void)
    {
    uint8_t int_id;
    volatile uint8_t c;
    volatile struct uart_reg_t *uart_reg = (volatile struct uart_reg_t *)UART1_BASE;

    int_id = uart_reg->u3.iir.int_id;
    
    if(int_id == 0x04 || int_id == 0x0c )   /* Receiver data available or Character time-out indication */
    {
        c = uart_reg->u1.data;
    uart_putc_noint(UART1,c);  // 串口输出 接收的数据	
    }
    else if(int_id == 0x06)
    {
        volatile uint32_t line_status = uart_reg->lsr;
    }
    

    }



  • @mars 上电时PC发数据,会有回,但当我调接口发送数据后,感觉就没有进中断了。PC端发数据都没有回。



  • 串口1的PA2和PA3打印可以改成串口0 的PD0和PD1打印吗?



  • @rain 可以,把之前的串口引脚配置会io口,然后重新初始化PD口为串口



  • @mars 改了PD口串口初始化,但是打印没有任何反应。这几个参数需要改吗?
    #define SYSTEM_OPTION_PRINT_UART0 0x00//
    #define SYSTEM_OPTION_PRINT_UART1 CO_BIT(6)
    #define SYSTEM_OPTION_PRINT_SWO CO_BIT(7)
    #define SYSTEM_OPTION_PRINT_MASK (CO_BIT(6)|CO_BIT(7))



  • @Rain 用我这个改成你的PD口就好了



  • @rain 你怎么判断没有进中断呢