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

[复制链接]
 楼主| genglilai 发表于 2015-12-29 17:30 | 显示全部楼层 |阅读模式
我使用的是IAR+F103+CUBE在写程序
最近想搞一下USB CDC虚拟串口,我想把虚拟串口的输出,重定义到printf上
首先参考了printf重定义到uart的方法,把uart发送函数改为虚拟串口发送函数
结果发送不出来东西,而使用虚拟串口发送函数直接发送的东西却能发送到电脑上
有没有搞过相关开发的大侠们,求各位指点

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



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
虚拟串口发送数据需要考虑时序,波特率吗

虚拟串口的速率很高,不用考虑波特率的问题,而且误码率很低
cocoasuny 发表于 2016-4-12 18:06 | 显示全部楼层
貌似按照楼主的方法不得行,按串口输出的方式,应该是这样子移植的,但是就是发现不对,不知道为什么....
cornrn 发表于 2016-12-16 19:36 | 显示全部楼层
cocoasuny 发表于 2016-4-12 18:06
貌似按照楼主的方法不得行,按串口输出的方式,应该是这样子移植的,但是就是发现不对,不知道为什么.... ...

收到的数据不对,不知道哪里出了问题
QQ截图20161216193534.jpg
QQ截图20161216193526.jpg
碧云天书 发表于 2016-12-22 11:21 来自手机 | 显示全部楼层
CDC_Transmit_FS不是每次发送都能成功的。如果USB忙,发送失败,你送的字符就丢失了。在CDC_Transmit_FS发送后检验,失败重发直到成功就可以了。
fuconghua2422 发表于 2018-3-5 12:02 | 显示全部楼层
楼主,这个功能最终如何搞定的,能共享一下吗,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

8

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部