[STM32F1]

printf重定向到usbCDC(VCP)

[复制链接]
785|14
手机看帖
扫描二维码
随时随地手机跟帖
songqian17|  楼主 | 2019-9-14 09:35 | 显示全部楼层 |阅读模式
我使用的是IAR+F103+CUBE在写程序
最近想搞一下USB CDC虚拟串口,我想把虚拟串口的输出,重定义到printf上
首先参考了printf重定义到uart的方法,把uart发送函数改为虚拟串口发送函数
结果发送不出来东西,而使用虚拟串口发送函数直接发送的东西却能发送到电脑上
有没有搞过相关开发的大侠们,求各位指点

使用特权

评论回复
juventus9554| | 2019-9-14 09:38 | 显示全部楼层

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
songqian17|  楼主 | 2019-9-14 09:42 | 显示全部楼层
#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__ */

使用特权

评论回复
songqian17|  楼主 | 2019-9-14 09:42 | 显示全部楼层
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;
}

使用特权

评论回复
morrisk| | 2019-9-14 09:45 | 显示全部楼层

虚拟串口发送数据需要考虑时序,波特率吗

使用特权

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

使用特权

评论回复
songqian17|  楼主 | 2019-9-14 09:51 | 显示全部楼层
虚拟串口的速率很高,不用考虑波特率的问题,而且误码率很低

使用特权

评论回复
wenfen| | 2019-9-14 10:15 | 显示全部楼层
貌似按照楼主的方法不得行,按串口输出的方式,应该是这样子移植的,但是就是发现不对,不知道为什么....

使用特权

评论回复
kangzj| | 2019-9-14 10:18 | 显示全部楼层
收到的数据不对,不知道哪里出了问题

使用特权

评论回复
chuxh| | 2019-9-14 10:21 | 显示全部楼层
CDC_Transmit_FS不是每次发送都能成功的。如果USB忙,发送失败,你送的字符就丢失了。在CDC_Transmit_FS发送后检验,失败重发直到成功就可以了。

使用特权

评论回复
juventus9554| | 2019-9-14 10:26 | 显示全部楼层

楼主,这个功能最终如何搞定的,能共享一下吗,谢谢!

使用特权

评论回复
songqian17|  楼主 | 2019-9-14 10:32 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家,结贴喽

使用特权

评论回复
木木guainv| | 2019-10-12 15:14 | 显示全部楼层
帮楼主顶一下吧

使用特权

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

本版积分规则

463

主题

5749

帖子

1

粉丝