基本信息
文件名称:STMicroelectronics 系列:STM32L4 系列_(26).STM32L4系列的USB接口.docx
文件大小:25.19 KB
总页数:21 页
更新时间:2025-06-19
总字数:约1.44万字
文档摘要

PAGE1

PAGE1

STM32L4系列的USB接口

1.USB接口概述

STM32L4系列微控制器集成了一个全速USB2.0设备控制器,支持USB1.1标准,并且可以配置为多种不同的设备类型,如HID(人机接口设备)、CDC(通信设备类)、MassStorage(存储设备类)等。USB接口具有以下特点:

全速:支持12Mbps的数据传输速率。

集成的片上电荷泵:在使用3.3V电源时,可以省去外部的5V电源。

多端点支持:支持最多6个端点,包括控制端点、批量端点和中断端点。

DMA支持:可以通过DMA直接访问USB缓冲区,提高数据传输效率。

USBOTG支持:部分型号支持USBOn-The-Go,允许设备在主机和设备模式之间切换。

2.USB接口硬件配置

2.1USB引脚配置

STM32L4系列的USB接口使用了两个引脚,分别是USB_D+和USB_D-。这些引脚通常位于PA11和PA12,但具体位置取决于不同的封装类型。在使用USB接口时,需要正确配置这些引脚:

//配置USB引脚

voidUSB_GPIO_Config(void){

GPIO_InitTypeDefGPIO_InitStruct={0};

//使能GPIO时钟

__HAL_RCC_GPIOA_CLK_ENABLE();

//配置PA11(USB_D-)和PA12(USB_D+)

GPIO_InitStruct.Pin=GPIO_PIN_11|GPIO_PIN_12;

GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;

GPIO_InitStruct.Pull=GPIO_NOPULL;

GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_VERY_HIGH;

GPIO_InitStruct.Alternate=GPIO_AF14_USB;

HAL_GPIO_Init(GPIOA,GPIO_InitStruct);

}

2.2USB时钟配置

USB接口需要一个48MHz的时钟源。STM32L4系列可以通过配置PLL(锁相环)来生成这个时钟源。以下是配置PLL的示例代码:

//配置USB时钟

voidUSB_Clock_Config(void){

RCC_OscInitTypeDefRCC_OscInitStruct={0};

RCC_ClkInitTypeDefRCC_ClkInitStruct={0};

//使能HSE时钟

RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;

RCC_OscInitStruct.HSEState=RCC_HSE_ON;

RCC_OscInitStruct.HSEPredivValue=RCC_HSE_PREDIV_DIV1;

RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;

RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;

RCC_OscInitStruct.PLL.PLLMUL=RCC_PLL_MUL6;

RCC_OscInitStruct.PLL.PLLDIV=RCC_PLL_DIV3;

if(HAL_RCC_OscInit(RCC_OscInitStruct)!=HAL_OK){

Error_Handler();

}

//配置系统时钟

RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;

RCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV1;

RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DI