打印
[STM32F1]

printf重定向到usbCDC(VCP)

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

使用特权

评论回复
沙发
juventus9554| | 2021-8-14 23:04 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
songqian17|  楼主 | 2021-8-14 23:07 | 只看该作者
#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|  楼主 | 2021-8-14 23:11 | 只看该作者
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;
}

使用特权

评论回复
5
morrisk| | 2021-8-14 23:13 | 只看该作者
虚拟串口发送数据需要考虑时序,波特率吗

使用特权

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

使用特权

评论回复
7
songqian17|  楼主 | 2021-8-14 23:16 | 只看该作者
虚拟串口的速率很高,不用考虑波特率的问题,而且误码率很低

使用特权

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

使用特权

评论回复
9
kangzj| | 2021-8-14 23:21 | 只看该作者
收到的数据不对,不知道哪里出了问题

使用特权

评论回复
10
kangzj| | 2021-8-14 23:23 | 只看该作者

使用特权

评论回复
11
kangzj| | 2021-8-14 23:26 | 只看该作者

使用特权

评论回复
12
chuxh| | 2021-8-14 23:28 | 只看该作者
CDC_Transmit_FS不是每次发送都能成功的。如果USB忙,发送失败,你送的字符就丢失了。在CDC_Transmit_FS发送后检验,失败重发直到成功就可以了。

使用特权

评论回复
13
juventus9554| | 2021-8-14 23:30 | 只看该作者
楼主,这个功能最终如何搞定的,能共享一下吗,谢谢!

使用特权

评论回复
14
songqian17|  楼主 | 2021-8-14 23:34 | 只看该作者
嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

评论回复
15
sonicll| | 2021-8-16 09:21 | 只看该作者
http://www.mcublog.cn/stm32/2020_04/stm32-cdc-printf/

参考这个**,不要重定义fputc()函数,fputc函数每次只发一个字节,对于USB来说,一次传输只发一个字节太浪费带宽了,正确的做法是重新定义一个printf函数

使用特权

评论回复
16
隐去| | 2021-8-27 15:13 | 只看该作者
能共享一下

使用特权

评论回复
17
观海| | 2021-9-9 16:33 | 只看该作者
如何进行重定向呢

使用特权

评论回复
18
guanjiaer| | 2021-9-9 17:07 | 只看该作者
能进入到发送函数里边吗

使用特权

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

本版积分规则

463

主题

5749

帖子

1

粉丝