如何配置Keil uVision5通過MCU的USB接口重定向來自STM32F4xx的printf輸出?然後,USB將連接到Windows計算機,虛擬端口驅動程序和終端程序。如何將Keil printf通過STM32F4xx USB重定向到連接的Windows計算機
我找不到配置printf通過STM32F4xx MCU的USB接口輸出的示例uVision5項目。
如何配置Keil uVision5通過MCU的USB接口重定向來自STM32F4xx的printf輸出?然後,USB將連接到Windows計算機,虛擬端口驅動程序和終端程序。如何將Keil printf通過STM32F4xx USB重定向到連接的Windows計算機
我找不到配置printf通過STM32F4xx MCU的USB接口輸出的示例uVision5項目。
的STM32F4xx MCU的USB必須實現在主機模式(USB OTG)在其固件USB CDC作爲設備類或接口類(https://en.wikipedia.org/wiki/USB_communications_device_class)和。在PC的USB上必須創建一個虛擬COM端口(驅動程序)來處理STM32F4通過USB CDC(主機模式)發送的RS232協議。當STM32F4上的CDC固件工作正常時,在Linux上,STM32F4出現,即/dev/ttyACM0
,這可以通過標準RS232終端程序訪問。
基本 - >http://www.keil.com/support/man/docs/rlarm/rlarm_usb_create_cdc_acm.htm
這是一個基本的例子如何通過USB發送串行數據CDC(即PC上的USB顯示爲一個虛擬COM口即/dev/ttyACM0
):http://visualgdb.com/tutorials/arm/stm32/usb/
另請參閱此http://stm32f4-discovery.net/2014/08/library-24-virtual-com-port-vcp-stm32f4xx/
關注或修改上面的教程到linux(http://visualgdb.com/tutorials/arm/stm32/usb/)。
要將printf()
重定向到USB CDC ,請重寫標準I/O例程,如下所示。的printf()
ARM版本調用這些例程,然後,看到這個https://mcuoneclipse.com/2014/07/11/printf-and-scanf-with-gnu-arm-libraries/(的printf的ARM版本()是的printf()的在x86/x64版非常不同):
#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;
}
}
}
或者使用ARM半主機界面(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471c/Bgbjhiea.html)。它會自動提供功能printf()
重定向到USB CDC
的更多信息:
這是一個例子,如何實現a USB-RS232適配器:http://www.wolinlabs.com/blog/stm32f4.virtual.com.port.html
git還包含許多有趣的文件git clone https://github.com/rowol/stm32_discovery_arm_gcc