USBDevice with support for STM32F3

Fork of F042K6_USBDevice by Norimasa Okamoto

Files at this revision

API Documentation at this revision

Comitter:
Bradley Scott
Date:
Thu Oct 11 11:12:35 2018 -0400
Parent:
74:f9c09a6c750f
Commit message:
Add USB suspend support for STM32L1 (and other STM32 devices with same USB peripheral)

Changed in this revision

USBDevice/USBHAL.h Show annotated file Show diff for this revision Revisions of this file
USBDevice/USBHAL_STM32L1.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r f9c09a6c750f -r a394ea726048 USBDevice/USBHAL.h
--- a/USBDevice/USBHAL.h	Wed Oct 03 21:41:29 2018 +0000
+++ b/USBDevice/USBHAL.h	Thu Oct 11 11:12:35 2018 -0400
@@ -124,6 +124,7 @@
     void DataOutStageCallback(uint8_t epnum);
     void ResetCallback();
     void SOFCallback();
+    void SuspendCallback();
 
 private:
     class PacketBufferAreaManager {
diff -r f9c09a6c750f -r a394ea726048 USBDevice/USBHAL_STM32L1.cpp
--- a/USBDevice/USBHAL_STM32L1.cpp	Wed Oct 03 21:41:29 2018 +0000
+++ b/USBDevice/USBHAL_STM32L1.cpp	Thu Oct 11 11:12:35 2018 -0400
@@ -83,13 +83,13 @@
 }
 
 void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd) {
-    __USB_CLK_ENABLE();
+    __HAL_RCC_USB_CLK_ENABLE();
     HAL_NVIC_SetPriority(USB_LP_IRQn, 0, 0);
 }
 
 void HAL_PCD_MspDeInit(PCD_HandleTypeDef* hpcd) {
     HAL_NVIC_DisableIRQ(USB_LP_IRQn); // Peripheral interrupt Deinit
-    __USB_CLK_DISABLE(); // Peripheral clock disable
+    __HAL_RCC_USB_CLK_DISABLE(); // Peripheral clock disable
 }
 
 USBHAL::~USBHAL(void) {
@@ -367,11 +367,16 @@
 }
 
 void USBHAL::ResetCallback() {
+    suspendStateChanged(0);
     PktBufArea.reset();
     realiseEndpoint(EP0IN, MAX_PACKET_SIZE_EP0, 0);
     realiseEndpoint(EP0OUT, MAX_PACKET_SIZE_EP0, 0);
 }
 
+void USBHAL::SuspendCallback() {
+    suspendStateChanged(1);
+}
+
 void USBHAL::SOFCallback() {
     SOF(hpcd_USB_FS.Instance->FNR & USB_FNR_FN);
 }
@@ -397,6 +402,7 @@
 }
 
 void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd) {
+    reinterpret_cast<USBHAL*>(hpcd->pData)->SuspendCallback();
     if (hpcd->Init.low_power_enable) {
         SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
     }