CH71F BLE-UART例程低波特率重启

我们在BLE-UART例程基础上开发的,使能看门狗后,发现当设置1200波特率时候,发送16字节内容会导致看门狗复位,每次必现。

调用的发送函数是app_uart_tx_data(data,length);发送16字节内容,调整波特率为2400以上后,就不复位了。这个uart3的发送函数我改成了uart1,测量uart1是可以正确发出来的。

第一个想到是发送函数阻塞导致不能及时喂狗导致的,但是研究看看送函数那里并没有阻塞,最多阻塞8个字节的时间,在此处加喂狗指令,故障依旧。

void app_uart_process(void)

{

    UINT32 irq_status;

    SYS_DisableAllIrq(&irq_status);

    if(uart_rx_flag)

    {

        tmos_start_task(Peripheral_TaskID, UART_TO_BLE_SEND_EVT, 2);

        uart_rx_flag = false;

    }

    SYS_RecoverIrq(irq_status);



    //tx process

    if(R8_UART1_TFC < UART_FIFO_SIZE)

    {


//PRINT("R8_UART1_TFC:%d\n",R8_UART1_TFC);

        app_drv_fifo_read_to_same_addr(&app_uart_tx_fifo, (uint8_t *)&R8_UART1_THR, UART_FIFO_SIZE - R8_UART1_TFC);

    }

}

继续研究,在主循环里发现两个函数,一个是TMOS系统的轮询,一个是串口发送处理函数,通过添加复位、置位io看发现TMOS_SystemProcess();函数执行时间超过400ms左右,用示波器看低电平时间在400ms左右。因为TMOS的没有源码,我向问官网技术人员,怎么看TMOS哪个任务占用CPU时间过长了,有没有好的方法查这个问题

__attribute__((section(".highcode")))

void Main_Circulation()

{

    while(1)

    {

    GPIOA_ResetBits(GPIO_Pin_12);

        TMOS_SystemProcess();

        *((unsigned char*)0x40001043) = 0;//喂狗

        GPIOA_SetBits(GPIO_Pin_12);

        app_uart_process();

    }

}



请技术人员回复下,需要我怎么配合才能找出这个问题点,我可以发工程出来,有负责这块的技术人员电话吗?比较着急,感谢了!


@TECH13 TECH46 TECH0-100 麻烦有空回复下


我们这边测试没有复现问题。工程文件可以发送至以下邮箱hy@wch.cn。


感谢@TECH_JW,我今天发现是我们串口连接的设备发生了自发自收现场,ch573串口接收处理函数里面放了以下log打印,但是ch573调试串口也调成1200了,导致PRINT时间边长了导致重启,后来我在另一个帖子中问了usb cdc的问题,现在我已经把log打印都重定向到usb cdc了,现在没有楼主为提到的问题了,感谢!


只有登录才能回复,可以选择微信账号登录