Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过STM32F4xx USB将Keil printf out重定向到连接的Windows计算机_Windows_Usb_Printf_Keil - Fatal编程技术网

如何通过STM32F4xx USB将Keil printf out重定向到连接的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

如何配置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发送的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
这是一个如何实现USB-RS232适配器的示例:

git还包含许多有趣的文件
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;
        }
    }
}