文章目录
概要
- 初始化相关配置
首先需要包含必要的头文件,配置系统时钟、引脚复用以及 USB 相关的初始化等操作。
#include “stm32f10x.h”
#include “usb_lib.h”
#include “usb_desc.h”
#include “usb_pwr.h”
// 定义USB相关的缓冲区大小
#define RX_BUFF_SIZE 64
#define TX_BUFF_SIZE 64
// USB接收和发送缓冲区
uint8_t USB_Rx_Buffer[RX_BUFF_SIZE];
uint8_t USB_Tx_Buffer[TX_BUFF_SIZE];
// 端点相关定义
#define ENDP0_RXADDR 0x40
#define ENDP0_TXADDR 0x80
#define ENDP1_RXADDR 0x88
#define ENDP1_TXADDR 0xC8
// USB设备相关状态变量等
__IO uint8_t USB_Configuration = 0;
__IO uint8_t USB_Rx_Cnt = 0;
// 系统时钟配置函数(以72MHz为例,可根据实际需求调整)
void SystemClock_Config(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if (HSEStartUpStatus == SUCCESS)
{
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(TRUE);
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
;
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while (RCC_GetSYSCLKSource()!= 0x08)
;
}
}
// USB中断初始化
void USB_Interrupts_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
// USB引脚复用及相关初始化
void USB_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// PA11 - USB D-
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;<