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>
CDC是可以忽略波特率的,USB直接传输,只有需要转UART时才需要波特率 DebugLab 发表于 2024-12-12 10:35
CDC是可以忽略波特率的,USB直接传输,只有需要转UART时才需要波特率
串口数据输出输入,一定需要适配的波特率 <p>也就是说,上位机选择115200时,单片机的串口就会设置好115200的波特率收发数据。上位机选择9600,单片机的串口就会设置好9600的波特率收发数据。这是怎么识别的?</p>
xxkj2010 发表于 2024-12-12 11:08
也就是说,上位机选择115200时,单片机的串口就会设置好115200的波特率收发数据。上位机选择9600,单片机的 ...
肯定会有个请求指令的 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转速工作;
VCC 发表于 2024-12-12 11:34
USB-CDC的整个通讯链路都是USB Full-speed协议,没有出现过UART通讯,没有出现过真正的串口,没有用到串口 ...
难怪在串口初始化函数void uart_init()中,只看到 LineCoding.dwDTERate = 0x00c20100;//115200这只是初始化的波特率。而通讯过程中,没有再出现设置dwDTERate或串口波特率。
xxkj2010 发表于 2024-12-12 11:39
难怪在串口初始化函数void uart_init()中,只看到这只是初始化的波特率。而通讯过程中,没有再出现设置dw ...
USB-CDC转双串口一定会用到波特率数据。USB-CDC和单片机内部通讯,完全不需要用到波特率数据 VCC 发表于 2024-12-12 11:42
USB-CDC转双串口一定会用到波特率数据。USB-CDC和单片机内部通讯,完全不需要用到波特率数据 ...
也就是说,单片机的USB端收到什么数据,它就会以上位机设置的波特率通过串口转发出去? xxkj2010 发表于 2024-12-12 10:59
串口数据输出输入,一定需要适配的波特率
设置波特率是通过set_line_coding实现的,波特率等信息会写入LineCoding结构体,然后调用uart_set_baud函数设置UART波特率
页:
[1]
2