我有一个UART可编程的第三方设备。
我需要创建一个具有功能密码的USB - UART网桥(只有在输入正确的密码后才能编程)
已使用最新版本的STM32CubeMX生成代码,适用于STM32 9.3.0版的Atollic ...我通过一个缓冲区在USB和UART之间传输数据(一个用于usb- UART,另一个用于uart- USB )当我尝试传输几个字符时一切正常,但当我尝试传输一个大的数据包时,由于USB速度比UART高得多的事实,问题开始...
这里有两个问题:
1.如何告诉USB我需要停止传输数据并等待UART (缓冲区)繁忙
2.如何在微控制器一侧获得PC上的波特率设置(当终端连接到虚拟COM端口时设置)
发布于 2020-11-03 23:25:20
USB提供流量控制。这就是你需要实现的。在这里可以找到一般的介绍:
基本上,USB到UART方向的设置应为:
接收数据您不再准备接收USB数据包。
步骤0:初始设置
调用USBD_CDC_SetRxBuffer
设置接收USB数据的缓冲区。除非您使用多个缓冲区来实现更高的吞吐量,否则在程序开始时调用一次就足够了。
第1步:准备接收数据
给USBD_CDC_ReceivePacket
打电话。与名称所暗示的不同,此函数表示应用程序已准备好接收数据。它会在实际收到数据之前立即返回。
USB第2步:接收数据包
你不需要在这里做任何事情。这将会自动发生。一旦完成,就会调用CDC_Itf_Receive
。
USB第3步:表示您不再准备接收数据包
这里没什么可做的。只要接收到数据包,就会自动执行此操作(并且未启用双缓冲)。
第四步:通过UART传输数据
我猜你知道怎么做。你想以阻塞的方式还是使用DMA来完成它,这取决于你自己。
由于涉及回调,因此不能将此代码放入主循环中。如果使用阻塞UART,则可以将所有代码放入CDC_Itf_Receive
中。它将以2、3、4、1的顺序出现。此外,还需要初始化(0和1)。
在UART- to -USB方向,您需要在UART上实现流控制。USB流控制由主机管理。尽管USB比UART快得多,但流量控制是相关的,因为主机上的应用程序可以像它喜欢的那样缓慢地处理数据。
关于问题2:我不确定我是否理解它。微控制器无法在主机上设置波特率。主机可以指定波特率(通过USB传输并应用于UART),或者如果UART具有固定的波特率,您可以忽略波特率(主机侧设置的任何波特率都将起作用,因为它不适用于USB)。
https://stackoverflow.com/questions/64665255
复制相似问题