Genglilai 发表于 2015-12-29 17:27:28

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

我使用的是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;
}

watershade 发表于 2015-12-29 20:16:25

楼主的做法没问题,如果你用的板子是别人的建议看一下原理图。另外你可以用uart单纯的发送数据做个实验。然后在重定向。

dsjsjf 发表于 2015-12-30 20:04:40

帮顶      

秋水之下 发表于 2016-12-16 19:08:48

CDC_Transmit_FS((uint8_t*)&ch, 1);
return ch;不应该这样吗

斜阳__ 发表于 2016-12-17 09:17:53

帮顶                     

jayyf1 发表于 2017-11-22 18:13:12

楼主,USB CDC重定向问题解决了吗?我也是printf发不出数据,CDC_Transnit_FS没问题

血亦友 发表于 2017-12-13 09:23:07

int fputc(int ch,FILE *F)
{
        CDC_Transmit_FS((uint8_t *)&ch,1);
        return ch;
}
我使用重定向函数是这个,但是只只能发储区printf字符串的第一个符号,后面的都发不出去

g921002 发表于 2017-12-13 18:50:46

建議用sprinf做比較彈性。
uint8_t usbtxbuf;
#define usbMsg(...) sprintf((char*)usbtxbuf, __VA_ARGS__);CDC_Transmit_FS(usbtxbuf,strlen((char*)usbtxbuf))

li170. 发表于 2018-2-4 21:52:49

int fputc(int ch, FILE *f)
{

while(CDC_Transmit_FS((uint8_t*)(&ch),1)!=USBD_OK){}
return ch;
}
这样就可以发送了,但是需要关闭串口助手,再开启串口助手,不知道为什么:(,望大神指点下

Kevin201707 发表于 2019-8-8 16:23:11

感谢感谢
页: [1] 2
查看完整版本: 关于printf重定向到usbCDC(VCP)的问题