【正点原子STM32连载】 第六十二章 USB虚拟串口(Slave)实验 摘自【正点原子】APM32F407最小系统板使用指南

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 例程功能

  1. 程序运行后,模拟出虚拟串口,通过数据线与PC连接后,可通过PC上的串口调试助手进行数据通讯,开发板端会通过USB虚拟串口实时发送USB虚拟串口接收到的数据
  2. LED0闪烁,指示程序正在运行
    62.1.2 硬件资源
  3. LED
    LED0 - PF9
  4. 正点原子 2.8/3.5/4.3/7/10寸TFTLCD模块(仅限MCU屏,16位8080并口驱动)
  5. 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将虚拟串口接收到的数据原封不动地通过虚拟串口发送回去,实现了“回显”的效果。

你可能感兴趣的:(stm32,嵌入式硬件,单片机)