|
本帖最后由 Mark 于 2018-4-9 11:43 编辑
OTG_HS的移植在原子F7的 实验56 USB读卡器(Slave) 的基础上做的修改,因为原子的是没有外接PHY芯片的,我自己的开发板上现在是有接一个USB3300的芯片
这个是USB3300芯片。
我现在这端的接口都是直接接在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);
- }
复制代码
查询了下相关资料不知道还有其他什么需要配置的部分了。来个大佬指点下!
|
|