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