/**USB检测**/
void App_USB_State_IRQHandler(USBD_HandleTypeDef *pdev)
{
static uint8_t old_state = 0;
/* 如果usb设备状态发生变化 */
if( pdev->dev_state!=old_state)
{
/* USB连接 */
if(pdev->dev_state == USBD_STATE_CONFIGURED)
{
osSignalSet (SysRunLedTaskHandle, LedRunEventBit_USBConnect);
}
/* USB断开 */
else if(pdev->dev_state==USBD_STATE_SUSPENDED)
{
osSignalSet (SysRunLedTaskHandle, LedRunEventBit_USBDisconnect);
}
old_state = pdev->dev_state;
}
}
这里用了FreeRTOS的任务通知,当判断到USB插拔动作后向任务发送了相关通知值。将这个函数放到中断处理函数中。
void OTG_FS_IRQHandler(void)
{
/* USER CODE BEGIN OTG_FS_IRQn 0 */
/* USER CODE END OTG_FS_IRQn 0 */
HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS);
/* USER CODE BEGIN OTG_FS_IRQn 1 */
App_USB_State_IRQHandler(&hUsbDeviceFS);
/* USER CODE END OTG_FS_IRQn 1 */
}