[size=15.555556297302246px]OTG_HS的移植在原子F7的 实验56 USB读卡器(Slave) 的基础上做的修改,因为原子的是没有外接PHY芯片的,我自己的[size=15.555556297302246px]开发板[size=15.555556297302246px]上现在是有接一个USB3300的芯片
[size=15.555556297302246px]这个是USB3300芯片。
[size=15.555556297302246px]我现在这端的接口都是直接接在F7上的。宏定义在工程中添加了USE_ULPI_PHY,USE_USB_OTG_HS这两个。在usb.bsp.c中做了相关初始化如下
//USB OTG 底层IO初始化
//pdev:USB OTG内核结构体指针
void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOI_CLK_ENABLE();
__HAL_RCC_USB_OTG_FS_CLK_ENABLE(); //使能OTG FS时钟
//D0
GPIO_InitStruct.Pin=GPIO_PIN_3; //PA3
GPIO_InitStruct.Mode=GPIO_MODE_AF_PP; //复用
GPIO_InitStruct.Pull=GPIO_NOPULL; //无上下拉
GPIO_InitStruct.Speed=GPIO_SPEED_HIGH; //高速
GPIO_InitStruct.Alternate=GPIO_AF10_OTG_HS; //复用为OTG FS
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); //初始化
//D1-D7 //PB0,1,5,10,11,12,13
GPIO_InitStruct.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_5|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13;
GPIO_InitStruct.Mode=GPIO_MODE_AF_PP; //复用
GPIO_InitStruct.Pull=GPIO_NOPULL; //无上下拉
GPIO_InitStruct.Speed=GPIO_SPEED_HIGH; //高速
GPIO_InitStruct.Alternate=GPIO_AF10_OTG_HS; //复用为OTG FS
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); //初始化
//CLK
GPIO_InitStruct.Pin=GPIO_PIN_5; //PA5
GPIO_InitStruct.Mode=GPIO_MODE_AF_PP; //复用
// GPIO_InitStruct.Pull=GPIO_NOPULL; //无上下拉
GPIO_InitStruct.Speed=GPIO_SPEED_HIGH; //高速
GPIO_InitStruct.Alternate=GPIO_AF10_OTG_HS; //复用为OTG FS
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); //初始化
//STP
GPIO_InitStruct.Pin=GPIO_PIN_0; //PC0
GPIO_InitStruct.Mode=GPIO_MODE_AF_PP; //复用
// GPIO_InitStruct.Pull=GPIO_NOPULL; //无上下拉
GPIO_InitStruct.Speed=GPIO_SPEED_HIGH; //高速
GPIO_InitStruct.Alternate=GPIO_AF10_OTG_HS; //复用为OTG FS
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); //初始化
//NXT
GPIO_InitStruct.Pin=GPIO_PIN_4; //PH4
GPIO_InitStruct.Mode=GPIO_MODE_AF_PP; //复用
// GPIO_InitStruct.Pull=GPIO_NOPULL; //无上下拉
GPIO_InitStruct.Speed=GPIO_SPEED_HIGH; //高速
GPIO_InitStruct.Alternate=GPIO_AF10_OTG_HS; //复用为OTG FS
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); //初始化
//DIR
GPIO_InitStruct.Pin=GPIO_PIN_11; //PI11
GPIO_InitStruct.Mode=GPIO_MODE_AF_PP; //复用
// GPIO_InitStruct.Pull=GPIO_NOPULL; //无上下拉
GPIO_InitStruct.Speed=GPIO_SPEED_HIGH; //高速
GPIO_InitStruct.Alternate=GPIO_AF10_OTG_HS; //复用为OTG FS
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); //初始化
}
//USB OTG 中断设置,开启USB HS中断
//pdev:USB OTG内核结构体指针
void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev)
{
HAL_NVIC_SetPriority(OTG_HS_IRQn,0,0); //抢占优先级0,子优先级3
HAL_NVIC_EnableIRQ(OTG_HS_IRQn); //使能OTG USB FS中断
}
//USB OTG 中断设置,开启USB FS中断
//pdev:USB OTG内核结构体指针
void USB_OTG_BSP_DisableInterrupt(void)
{
}
//USB OTG 端口供电设置(本例程未用到)
//pdev:USB OTG内核结构体指针
//state:0,断电;1,上电
void USB_OTG_BSP_DriveVBUS(USB_OTG_CORE_HANDLE *pdev, uint8_t state)
{
}
//USB_OTG 端口供电IO配置(本例程未用到)
//pdev:USB OTG内核结构体指针
void USB_OTG_BSP_ConfigVBUS(USB_OTG_CORE_HANDLE *pdev)
{
}
//USB_OTG us级延时函数
//本例程采用SYSTEM文件夹的delay.c里面的delay_us函数实现
//官方例程采用的是定时器2来实现的.
//usec:要延时的us数.
void USB_OTG_BSP_uDelay (const uint32_t usec)
{
delay_us(usec);
}
//USB_OTG ms级延时函数
//本例程采用SYSTEM文件夹的delay.c里面的delay_ms函数实现
//官方例程采用的是定时器2来实现的.
//msec:要延时的ms数.
void USB_OTG_BSP_mDelay (const uint32_t msec)
{
delay_ms(msec);
} |