Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions cores/arduino/stm32/stm32yyxx_hal_conf.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,11 @@
#undef USE_HAL_PCD_MODULE
#endif
#define USE_HAL_PCD_MODULE 1U
#if defined(USBD_CDC_USE_SINGLE_BUFFER)
#define USE_HAL_PCD_USB_DOUBLE_BUFFER 0U
#else
#define USE_HAL_PCD_USB_DOUBLE_BUFFER 1U
#endif
#endif

#else /* HALv1 */
Expand Down
6 changes: 4 additions & 2 deletions libraries/SrcWrapper/inc/stm32_def.h
Original file line number Diff line number Diff line change
Expand Up @@ -203,11 +203,13 @@ __STATIC_INLINE void LL_RTC_SetBinMixBCDU(RTC_TypeDef *RTCx, uint32_t BinMixBcdU
}
#endif // STM32U0xx

/* STM32G0xx, STM32U0xx and some STM32U5xx defined USB_DRD_FS */
/* Some STM32 series define USB_DRD_FS instead of the legacy USB instance. */
#if !defined(USB) && defined(USB_DRD_FS)
#define USB USB_DRD_FS
#define PinMap_USB PinMap_USB_DRD_FS
#if defined(STM32H5xx) || defined(STM32U0xx) ||\
#if defined(STM32C5xx)
#define USB_BASE USB_DRD_FS_BASE
#elif defined(STM32H5xx) || defined(STM32U0xx) ||\
defined(STM32U3xx) || defined(STM32U5xx)
#define USB_BASE USB_DRD_BASE
#if !defined(__HAL_RCC_USB_CLK_ENABLE)
Expand Down
1 change: 1 addition & 0 deletions libraries/USBDevice/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ add_library(USBDevice_bin OBJECT EXCLUDE_FROM_ALL
src/usb_device_ctlreq.c
src/usb_device_ioreq.c
src/usbd_conf.c
src/usbd_confv2.c
src/usbd_desc.c
src/usbd_ep_conf.c
src/usbd_if.c
Expand Down
14 changes: 8 additions & 6 deletions libraries/USBDevice/inc/usbd_conf.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,6 @@ extern "C" {
/* Includes ------------------------------------------------------------------*/
#include "stm32_def.h"

#if defined(USE_HALV2_DRIVER)
#error "USB library is not yet compatible with HALv2 driver."
#else
#if !defined(USB_BASE) && !defined(USB_OTG_DEVICE_BASE)
#error "This board does not support USB! Select 'None' in the 'Tools->USB interface' menu"
#endif
Expand All @@ -40,8 +37,6 @@ extern "C" {
#endif
#if !defined(USB_BASE) && !defined(USB_OTG_FS) && defined(USB_OTG_HS) && !defined(USE_USB_HS)
#error "This board support only USB High Speed! Select 'High Speed' or 'High Speed in Full Speed mode' in the 'Tools->USB interface' menu"
#endif

#endif
#include <stdio.h>
#include <stdlib.h>
Expand Down Expand Up @@ -77,7 +72,7 @@ extern "C" {
#elif defined(STM32G0B1xx) || defined(STM32G0C1xx)
#define USB_IRQn USB_UCPD1_2_IRQn
#define USB_IRQHandler USB_UCPD1_2_IRQHandler
#elif defined(STM32C0xx) || defined(STM32H5xx) || defined(STM32U0xx)
#elif defined(STM32C0xx) || defined(STM32C5xx) || defined(STM32H5xx) || defined(STM32U0xx)
#define USB_IRQn USB_DRD_FS_IRQn
#define USB_IRQHandler USB_DRD_FS_IRQHandler
#elif defined(STM32U5xx) && !defined(USB_DRD_FS)
Expand All @@ -90,6 +85,13 @@ extern "C" {

#endif /* USB_BASE */

#if !defined(PCD_SNG_BUF) && defined(HAL_PCD_SNG_BUF)
#define PCD_SNG_BUF HAL_PCD_SNG_BUF
#endif
#if !defined(PCD_DBL_BUF) && defined(HAL_PCD_DBL_BUF)
#define PCD_DBL_BUF HAL_PCD_DBL_BUF
#endif

#ifndef __HAL_PCD_GATE_PHYCLOCK
#define __HAL_PCD_GATE_PHYCLOCK(_DUMMY_)
#endif
Expand Down
11 changes: 10 additions & 1 deletion libraries/USBDevice/inc/usbd_ep_conf.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@
#include <stdint.h>
#include "usbd_def.h"

#if defined (USE_HAL_PCD_USB_DOUBLE_BUFFER) && (USE_HAL_PCD_USB_DOUBLE_BUFFER == 0)
#define USBD_CDC_USE_SINGLE_BUFFER
#endif

typedef struct {
uint32_t ep_adress; /* Endpoint address */
uint32_t ep_size; /* Endpoint size */
Expand Down Expand Up @@ -69,9 +73,14 @@ typedef struct {

#ifdef USBD_USE_CDC
#define PMA_CDC_OUT_BASE (PMA_EP0_IN_ADDR + USB_MAX_EP0_SIZE)
#if !defined(USBD_CDC_USE_SINGLE_BUFFER)
#define PMA_CDC_OUT_ADDR ((PMA_CDC_OUT_BASE + USB_FS_MAX_PACKET_SIZE) | \
(PMA_CDC_OUT_BASE << 16U))
#define PMA_CDC_IN_ADDR (PMA_CDC_OUT_BASE + USB_FS_MAX_PACKET_SIZE * 2)
#else
#define PMA_CDC_OUT_ADDR PMA_CDC_OUT_BASE
#define PMA_CDC_IN_ADDR (PMA_CDC_OUT_BASE + USB_FS_MAX_PACKET_SIZE)
#endif
#define PMA_CDC_CMD_ADDR (PMA_CDC_IN_ADDR + CDC_CMD_PACKET_SIZE)
#endif /* USBD_USE_CDC */
#ifdef USBD_USE_HID_COMPOSITE
Expand All @@ -86,4 +95,4 @@ extern const ep_desc_t ep_def[DEV_NUM_EP + 1];
#endif /* USBCON */
#endif /* __USBD_EP_CONF_H */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
12 changes: 11 additions & 1 deletion libraries/USBDevice/src/cdc/usbd_cdc.c
Original file line number Diff line number Diff line change
Expand Up @@ -701,7 +701,11 @@ static uint8_t USBD_CDC_Setup(USBD_HandleTypeDef *pdev,
static uint8_t USBD_CDC_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum)
{
USBD_CDC_HandleTypeDef *hcdc;
#if defined(USE_HALV2_DRIVER)
hal_pcd_handle_t *hpcd = (hal_pcd_handle_t *)pdev->pData;
#else
PCD_HandleTypeDef *hpcd = (PCD_HandleTypeDef *)pdev->pData;
#endif

if (pdev->pClassDataCmsit[pdev->classId] == NULL) {
return (uint8_t)USBD_FAIL;
Expand All @@ -710,7 +714,13 @@ static uint8_t USBD_CDC_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum)
hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];

if ((pdev->ep_in[epnum & 0xFU].total_length > 0U) &&
((pdev->ep_in[epnum & 0xFU].total_length % hpcd->IN_ep[epnum & 0xFU].maxpacket) == 0U)) {
((pdev->ep_in[epnum & 0xFU].total_length %
#if defined(USE_HALV2_DRIVER)
hpcd->in_ep[epnum & 0xFU].max_packet
#else
hpcd->IN_ep[epnum & 0xFU].maxpacket
#endif
) == 0U)) {
/* Update the packet total length */
pdev->ep_in[epnum & 0xFU].total_length = 0U;

Expand Down
5 changes: 2 additions & 3 deletions libraries/USBDevice/src/usbd_conf.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
*
******************************************************************************
*/
#ifdef USBCON
#if defined(USBCON) && !defined(USE_HALV2_DRIVER)
/* Includes ------------------------------------------------------------------*/
#include "usbd_core.h"
#include "usbd_if.h"
Expand Down Expand Up @@ -718,6 +718,5 @@ void USBD_LL_Delay(uint32_t Delay)
HAL_Delay(Delay);
}
#endif /* HAL_PCD_MODULE_ENABLED */
#endif /* USBCON */
#endif /* USBCON && !USE_HALV2_DRIVER */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

Loading