通过STM32CubeMX芯片图形化配置工具简单快速的实现一个基于STM32F407的USB接口通信。

接口框图--FS全速模式

注:

      1. 只有在构建由 VBUS 供电的器件时才需要外部调压器。
      2. 只有在应用必须支持由 VBUS 供电的器件时才需要 STMPS2141STR。如果应用电路板提供 5V 电源,则可以使用基本电源开关。
      3. VDD 范围介于 2V 到 3.6V 之间。

接口框图--HS高速模式

注:

      1. HS高速模式必须外接PHY芯片才能实现,例如USB3300等。
      2. PHY通过ULPI接口与处理器相连。

USB的具体功能说明和相关寄存器配置可以参考---STM32F4xx中文参考手册,本文仅描述通过STM32CubeMX最快实现USB接口的通信。

-------------------------------------------------------------------------------------

STM32CubeMX版本:5.6.1

处理器型号:STM32F407ZG

开发工具:Keil V5.14

-------------------------------------------------------------------------------------

第一步:通过选择处理器进入工程配置。

第二步:配置高速时钟,使能外部晶振。

第三步:根据硬件情况配置USB硬件接口,有外接ULPI接口的PHY选USB_OTG_HS,无则选USB_OTG_FS,勾选上中断,其他保持默认。

第三步:根据硬件情况配置串口,用于打印信息。

 

第四步:Middleware中间件选择CDC,虚拟端口通信。

第五步:根据硬件情况配置时钟,红框内时钟是USB接口用到的,必须配置为48MHz。

第六步:修改Heap Size大小,选择开发工具版本,点击右上角GENERATE CODE生成代码。

第七步:打开工程,找到文件usbd_cdc_if.c,修改CDC_Receive_HS()函数,完成USB自发自收,串口数据打印。

代码如下:

static int8_t CDC_Receive_HS(uint8_t* Buf, uint32_t *Len)
{
  /* USER CODE BEGIN 11 */
	int i;
	uint8_t my_RxBuf[100];
        uint32_t my_RxLength;
	
	memcpy(my_RxBuf,Buf,*Len);
        my_RxLength=*Len;
	
	CDC_Transmit_HS(my_RxBuf, my_RxLength);	
	for(i=0;i<my_RxLength;i++)
		{printf("%02x ",my_RxBuf[i]);}
	
      USBD_CDC_SetRxBuffer(&hUsbDeviceHS, &Buf[0]);
      USBD_CDC_ReceivePacket(&hUsbDeviceHS);
      return (USBD_OK);
  /* USER CODE END 11 */
}

第八步:安装ST VCP虚拟端口驱动。将串口和USB插入PC进行简单的通信测试,如下:

其中,左为USB接口自发自收,右为串口打印数据。

如果不需要串口打印数据,可以去掉串口配置的步骤。

------------------------------------------------------------------------------

工程在这儿!

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐