如何通过STM32F4xx USB将Keil printf out重定向到连接的Windows计算机
如何配置Keil uVision5以通过MCU的USB接口重定向STM32F4xx的printf输出?然后,USB将连接到Windows计算机、虚拟端口驱动程序和终端程序如何通过STM32F4xx USB将Keil printf out重定向到连接的Windows计算机,windows,usb,printf,keil,Windows,Usb,Printf,Keil,如何配置Keil uVision5以通过MCU的USB接口重定向STM32F4xx的printf输出?然后,USB将连接到Windows计算机、虚拟端口驱动程序和终端程序 我找不到将printf配置为通过STM32F4xx MCU的USB接口输出的示例uVision5项目。STM32F4xx MCU的USB必须在其固件中实现USB CDC作为设备类或接口类()和主机模式(USB OTG)。必须在PC的USB上创建一个虚拟COM端口(驱动程序),以处理STM32F4通过USB CDC发送的RS23
我找不到将printf配置为通过STM32F4xx MCU的USB接口输出的示例uVision5项目。STM32F4xx MCU的USB必须在其固件中实现USB CDC作为设备类或接口类()和主机模式(USB OTG)。必须在PC的USB上创建一个虚拟COM端口(驱动程序),以处理STM32F4通过USB CDC发送的RS232协议(在主机模式下)。当STM32F4上的CDC固件正常工作时,在linux上,STM32F4显示为
/dev/ttyACM0
,可通过标准RS232终端程序访问
基础知识->
下面是一个如何通过USB CDC发送串行数据的基本示例(在pc的USB上显示为虚拟COM端口,即/dev/ttyACM0
):
也见此
按照上面的教程进行操作或使其适应linux()
将printf()
重定向到USB CDC覆盖标准I/O例程如下所示。ARM版本的printf()
调用这些例程,请参见以下内容(ARM版本的printf()与x86/x64版本的printf()非常不同):
#包括
外部“C”
{
int _fstat(int fd,结构统计*pStat)
{
pStat->st_mode=S_IFCHR;
返回0;
}
int _close(int)
{
返回-1;
}
int_write(int-fd,char*pBuffer,int-size)
{
返回VCP_写入(pBuffer,大小);
}
int_isatty(int fd)
{
返回1;
}
int(int,int,int)
{
返回-1;
}
整数读取(整数fd,字符*pBuffer,整数大小)
{
对于(;;)
{
int done=VCP_读取(pBuffer,大小);
如果(完成)
已完成的返回;
}
}
}
或者使用ARM半宿主接口()。它将自动提供将printf()
重定向到USB CDC的功能
更多信息:
- (usbd_STM32F4xx_FS.c)
git克隆https://github.com/rowol/stm32_discovery_arm_gcc
#include<sys/stat.h>
extern"C"
{
int _fstat (int fd, struct stat *pStat)
{
pStat->st_mode = S_IFCHR;
return 0;
}
int _close(int)
{
return -1;
}
int _write (int fd, char *pBuffer, int size)
{
return VCP_write(pBuffer, size);
}
int _isatty (int fd)
{
return 1;
}
int _lseek(int, int, int)
{
return -1;
}
int _read (int fd, char *pBuffer, int size)
{
for (;;)
{
int done = VCP_read(pBuffer, size);
if (done)
return done;
}
}
}