55337575 发表于 2024-6-7 15:23:19

不确定“CDC协议规范”例程中此处是否存在BUG

前段时间做一个特别应用,使用CDC方式,发现在实时数据传输过程中改变波特率出现串口助手死锁情况。
后来对usb_reg_class.c中的usb_uart_setting()进行了修改,死锁现象消失。

原代码:

void usb_uart_settings()
{
    if (Setup.bRequest == SET_LINE_CODING)
    {
      LineCoding.bCharFormat = 0;
      LineCoding.bDataBits = 8;
      
      uart_set_parity(LineCoding.bParityType);
      uart_set_baud(reverse4(LineCoding.dwDTERate));
    }
}


修改后代码:(对计数器和中断进行了管理)

void usb_uart_settings()
{
    if (Setup.bRequest == SET_LINE_CODING)
    {
      ES2=0;T2R=0;//关串口中断和计数器

      LineCoding.bCharFormat = 0;
      LineCoding.bDataBits = 8;
      
      uart_set_parity(LineCoding.bParityType);
      uart_set_baud(reverse4(LineCoding.dwDTERate));

       T2R=1; ES2=1;//开串口中断和计数器
    }
}

xxxevery 发表于 2024-6-7 19:08:38

学习了

zhange 发表于 2024-6-8 08:21:21

{:4_174:}{:4_174:}{:4_174:}

xxkj2010 发表于 2024-6-8 08:22:11

本帖最后由 xxkj2010 于 2024-6-8 08:25 编辑

不管有没有BUG,这个得先收藏下来,以后用到的时候可以注意一下。
页: [1]
查看完整版本: 不确定“CDC协议规范”例程中此处是否存在BUG