1)实验平台:正点原子APM32F407最小系统板
2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html##
第六十二章 USB虚拟串口(Slave)实验
本章将介绍使用APM32F407作为USB从设备,虚拟出串口与PC进行通信。通过本章的学习,读者将学习到APM32F407作为USB从设备虚拟出串口的使用。
本章分为如下几个小节:
62.1 硬件设计
62.2 程序设计
62.3 下载验证
62.1 硬件设计
62.1.1 例程功能
- 程序运行后,模拟出虚拟串口,通过数据线与PC连接后,可通过PC上的串口调试助手进行数据通讯,开发板端会通过USB虚拟串口实时发送USB虚拟串口接收到的数据
- LED0闪烁,指示程序正在运行
62.1.2 硬件资源 - LED
LED0 - PF9 - 正点原子 2.8/3.5/4.3/7/10寸TFTLCD模块(仅限MCU屏,16位8080并口驱动)
- USB_OTG
62.1.3 原理图
请见第61.1.3小节中USB OTG接口与MCU的连接原理图的相关内容。
62.2 程序设计
62.2.1 Geehy的OTG驱动
请见第61.2.1小节中Geehy的OTG驱动的相关内容。
62.2.2 实验应用代码
本章实验的应用代码,如下所示:
int main(void)
{
/* 仅保留关键代码,其余代码省略 */
/* VCP初始化 */
USBD_VCP_Init();
while (1);
}
从上面的代码中可以看出,在调用完OTG驱动库中的VCP初始化函数USBD_VCP_Init()后便进入死循环了,其他相关的操作都由OTH驱动库和中断中完成了,在usbd_vcp.c文件中out endpoint传输完成回调函数USBD_VCP_OutEpCallback(),如下所示:
/*!
* @brief OUT endpoint transfer done handler(except EP0)
*
* @param ep: OUT endpoint
*
* @retval None
*/
void USBD_VCP_OutEpCallback(uint8_t ep)
{
uint32_t dataCnt;
if (ep == USB_EP_1)
{
dataCnt = g_usbDev.outBuf[USB_EP_1].xferCnt;
USBD_TxData(USB_EP_1, dataBuf, dataCnt);
}
}
从上面的代码中可以看到,在out endpoint传输完成后,也就是USB的虚拟串口接收到数据后,便将数据原封不动地通过虚拟串口发送回去,达到“回显”的目的。
62.3 下载验证
在完成编译和烧录操作后,可以看到LCD上显示了本实验的相关实验信息,此时可以将开发板通过USB OTG接口与PC进行连接,待PC自动完成驱动安装后,便可看到PC上多出了一个端口设备,此时可以通过串口调试助手与该端口进行通信,可以看到无论串口调试助手发送任何数据,都会在串口调试助手的接受区看到发送出去的数据,这是因为APM32F407将虚拟串口接收到的数据原封不动地通过虚拟串口发送回去,实现了“回显”的效果。