打印
[STM32F1]

关于printf重定向到usbCDC(VCP)的问题

[复制链接]
3012|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
genglilai|  楼主 | 2015-12-29 17:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我使用的是IAR+F103+CUBE在写程序
最近想搞一下USB CDC虚拟串口,我想把虚拟串口的输出,重定义到printf上
首先参考了printf重定义到uart的方法,把uart发送函数改为虚拟串口发送函数
结果发送不出来东西,而使用虚拟串口发送函数直接发送的东西却能发送到电脑上
有没有搞过相关开发的大侠们,求各位指点

#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
   set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the USART1 and Loop until the end of transmission */
  CDC_Transmit_FS( (uint8_t*)ch, 1);
  return ch;
}



沙发
309030| | 2015-12-29 22:03 | 只看该作者
虚拟串口发送数据需要考虑时序,波特率吗

使用特权

评论回复
板凳
598330983| | 2015-12-29 23:04 | 只看该作者
1.按照图示的stm32cubemx配置,先设置好硬件外设
2. usb相关的参数都不要去改!任它默认就行!
3. 生成工程后,会提示是否要用keil打开,切记选择不打开,后面有地方要改
4. 找到你刚才生成的工程文件夹,在文件夹上面点[右键]选择[属性][只读]的钩钩去掉,应用到所有文件
5. 现在可以去文件夹中找到工程打开了
6. 打开后,首先别编译,直接打开找到图片中的文件,打开后,将Heap Size 改为1500
人家不让转载,你去看吧,
http://www.stm32cube.com/question/160

使用特权

评论回复
地板
genglilai|  楼主 | 2015-12-30 09:05 | 只看该作者
309030 发表于 2015-12-29 22:03
虚拟串口发送数据需要考虑时序,波特率吗

虚拟串口的速率很高,不用考虑波特率的问题,而且误码率很低

使用特权

评论回复
5
cocoasuny| | 2016-4-12 18:06 | 只看该作者
貌似按照楼主的方法不得行,按串口输出的方式,应该是这样子移植的,但是就是发现不对,不知道为什么....

使用特权

评论回复
6
cornrn| | 2016-12-16 19:36 | 只看该作者
cocoasuny 发表于 2016-4-12 18:06
貌似按照楼主的方法不得行,按串口输出的方式,应该是这样子移植的,但是就是发现不对,不知道为什么.... ...

收到的数据不对,不知道哪里出了问题

QQ截图20161216193534.jpg (234.45 KB )

QQ截图20161216193534.jpg

QQ截图20161216193526.jpg (223.58 KB )

QQ截图20161216193526.jpg

使用特权

评论回复
7
碧云天书| | 2016-12-22 11:21 | 只看该作者
CDC_Transmit_FS不是每次发送都能成功的。如果USB忙,发送失败,你送的字符就丢失了。在CDC_Transmit_FS发送后检验,失败重发直到成功就可以了。

使用特权

评论回复
8
fuconghua2422| | 2018-3-5 12:02 | 只看该作者
楼主,这个功能最终如何搞定的,能共享一下吗,谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

8

帖子

2

粉丝