原创 改正了每次只能发送一个字节的USB虚拟串口例程

2010-4-23 11:04 12062 17 35 分类: MCU/ 嵌入式

目前发布的STM32_USB-FS-Device_Lib中有一个USB虚拟串口的例程,这个例程演示了把STM32配置为一个USB虚拟串口设备,STM32从它的USART接口接收数据并通过USB传送到上位机,反之STM32也从USB接收上位机送来的数据并从USART接口发送出去。


在从USART接口接收数据再向USB端口发送数据的这个方向上,例程采取的策略是:在每次从USART接口收到一个字节后,就做成一个USB数据包并发送出去。这种方法的好处是程序简单明了,但如果USART端出现连续的数据流时,容易造成数据丢失的问题。


下面的附件是经过改进的例程,解决了上传时数据丢失的问题:


文章评论18条评论)

登录后参与讨论

用户3830892 2016-4-8 09:29

学习中,感谢分享!

用户1834442 2015-4-13 10:19

为什么没有工程,只有.c和.h文件

用户1655933 2015-3-4 13:42

学习中

用户1665792 2014-12-16 14:11

好东西,还没看......

用户442613 2013-8-15 21:02

谢谢楼主分享。参考一下做USB驱动

用户1468552 2013-8-8 17:06

赞一个,感谢楼主分享!

用户1636286 2013-7-5 10:03

正在做usb转串口,学习下

用户1028102 2013-3-2 10:22

将您的代码重新稍作修改,主要是在EWARM650中加入工程,并通过升级STM3210B板载STLink下载。我的测试环境是SSCOM32和PythonSerial,发现一个问题:从USART->USB方向通讯中,每次发送完毕字符串后关闭串口,接收方会接受到0x00。倒过来则不会。 原生串口关闭应该在电气上没有任何改变,只是OS中状态变化。不知为何在USB这段出现0x00作为结束符?

用户1028102 2013-2-28 13:42

已经是非常成熟的芯片了。问个和芯片关系不大的问题。

之前我使用串口的时候,采用的STX/ETX协议,即二进制协议:

STX+TYPE+STATUS+LEN+CRC+ETX。

主要是比ASCII协议效率高,可以校验错误。也可以知道封包起始(STX)和结束(ETX)。

不知道在VCP工程中,在USB的IN/OUT中是否也有必要加入STX/ETX?还是直接以64B为一个包进行通讯?

用户1028102 2013-2-28 13:21

没有想到ST放出的例子没有经过实测。不太严谨,现在总算找到了。
相关推荐阅读
用户1090342 2010-08-05 12:33
使用STM32定时器输出任意相位差的方波
记得曾经有不少人问起这个问题,方法十分简单,不用说明,看图即知(这里画了2路输出,同样道理可以产生3路甚至4路输出)。此方法不但可以在STM32上实现,因为STM8定时器的多数功能与STM32一样,所...
用户1090342 2010-05-06 16:11
STM32的功能引脚重映射和复用功能
STM32中有很多内置外设的输入输出引脚都具有重映射(remap)的功能,本文对一些在使用引脚重映射时所遇到的有关问题加以说明。我们知道每个内置外设都有若干个输入输出引脚,一般这些引脚的输出脚位都是固...
用户1090342 2010-03-06 12:30
STM32定时器的预装载寄存器与影子寄存器之间的关系
本文的说明依据STM32参考手册(RM0008)第10版:英文:http://www.st.com/stonline/products/literature/rm/13902.pdf中译文:http:...
用户1090342 2010-02-26 12:18
使用BSRR和BRR寄存器直接操作STM32的I/O端口
STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置'1'或置'0'。GPIOx_BSRR的高16位中每一...
用户1090342 2010-01-28 16:23
如何使用STM32的USB库支持延迟HID的GET_REPORT请求
首先,请参考我的另一篇博客:以HID的SET REPORT为例说明如何使用STM32的USB库支持控制端点0如果要支持HID的GET_REPORT请求,按照上一篇博客中的说明,只需要在STM32 US...
我要评论
18
17
关闭 站长推荐上一条 /2 下一条