xxkj2010 发表于 2024-12-12 10:33:07

CDC范例中,怎样实现波特率自适应的?

<p>如题,在 STC8H8K64U-DEMO-CODE-V9.6-20231025\61-CDC(Communication Device Class)协议范例中,哪个地方实现了波特率自适应的?</p>
<p>我看设置波特率的,好像是这个函数,但又不能理解它的具体意思,请大家指教,谢谢!</p>
<pre><code>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));
    }
}
</code></pre>

DebugLab 发表于 2024-12-12 10:35:09

CDC是可以忽略波特率的,USB直接传输,只有需要转UART时才需要波特率

xxkj2010 发表于 2024-12-12 10:59:48

DebugLab 发表于 2024-12-12 10:35
CDC是可以忽略波特率的,USB直接传输,只有需要转UART时才需要波特率

串口数据输出输入,一定需要适配的波特率

xxkj2010 发表于 2024-12-12 11:08:16

<p>也就是说,上位机选择115200时,单片机的串口就会设置好115200的波特率收发数据。上位机选择9600,单片机的串口就会设置好9600的波特率收发数据。这是怎么识别的?</p>

bkeuqoaq 发表于 2024-12-12 11:26:59

xxkj2010 发表于 2024-12-12 11:08
也就是说,上位机选择115200时,单片机的串口就会设置好115200的波特率收发数据。上位机选择9600,单片机的 ...

肯定会有个请求指令的

VCC 发表于 2024-12-12 11:34:48

xxkj2010 发表于 2024-12-12 11:08
也就是说,上位机选择115200时,单片机的串口就会设置好115200的波特率收发数据。上位机选择9600,单片机的 ...
USB-CDC的整个通讯链路都是USB Full-speed协议,没有出现过UART通讯,没有出现过真正的串口,没有用到串口外设,因此这里设置的波特率仅仅是个代号,没有任何实际意义的

也就不存在“自适应”波特率的这种说法。


当然,单片机确实知道你设置的波特率是多少,这是以整数形式传输过去的USB-CDC配置信息。不过它完全不care。这并不影响通讯。



换个角度来说。

”波特率“对于传统串口的使用来说,它是一种重要参数

而对于USB-CDC串口的使用来说,”波特率“只是一种附加的信息

你甚至可以做到,不通过USB-CDC发送任何字节,仅仅通过反复改变波特率设定,就完成某些信息的传输。
例如通过编写一些有趣的程序,可以做到:

电脑设定波特率为100,风扇以100转速工作;

电脑设定波特率为200,风扇以200转速工作;
电脑设定波特率为1200,风扇以1200转速工作;

xxkj2010 发表于 2024-12-12 11:39:48

VCC 发表于 2024-12-12 11:34
USB-CDC的整个通讯链路都是USB Full-speed协议,没有出现过UART通讯,没有出现过真正的串口,没有用到串口 ...

难怪在串口初始化函数void uart_init()中,只看到    LineCoding.dwDTERate = 0x00c20100;//115200这只是初始化的波特率。而通讯过程中,没有再出现设置dwDTERate或串口波特率。

VCC 发表于 2024-12-12 11:42:16

xxkj2010 发表于 2024-12-12 11:39
难怪在串口初始化函数void uart_init()中,只看到这只是初始化的波特率。而通讯过程中,没有再出现设置dw ...

USB-CDC转双串口一定会用到波特率数据。USB-CDC和单片机内部通讯,完全不需要用到波特率数据

xxkj2010 发表于 2024-12-12 11:48:36

VCC 发表于 2024-12-12 11:42
USB-CDC转双串口一定会用到波特率数据。USB-CDC和单片机内部通讯,完全不需要用到波特率数据 ...

也就是说,单片机的USB端收到什么数据,它就会以上位机设置的波特率通过串口转发出去?

DebugLab 发表于 2024-12-12 11:55:15

xxkj2010 发表于 2024-12-12 10:59
串口数据输出输入,一定需要适配的波特率

设置波特率是通过set_line_coding实现的,波特率等信息会写入LineCoding结构体,然后调用uart_set_baud函数设置UART波特率




页: [1] 2
查看完整版本: CDC范例中,怎样实现波特率自适应的?