STM32F4xx HAL Driver master
STM32CubeF4 HAL / LL Drivers API Reference
Loading...
Searching...
No Matches
stm32f4xx_ll_usb.h
Go to the documentation of this file.
1
18
19/* Define to prevent recursive inclusion -------------------------------------*/
20#ifndef STM32F4xx_LL_USB_H
21#define STM32F4xx_LL_USB_H
22
23#ifdef __cplusplus
24extern "C" {
25#endif /* __cplusplus */
26
27/* Includes ------------------------------------------------------------------*/
28#include "stm32f4xx_hal_def.h"
29
30#if defined (USB_OTG_FS) || defined (USB_OTG_HS)
34
38
39/* Exported types ------------------------------------------------------------*/
40#ifndef HAL_USB_TIMEOUT
41#define HAL_USB_TIMEOUT 0xF000000U
42#endif /* define HAL_USB_TIMEOUT */
43
44#ifndef HAL_USB_CURRENT_MODE_MAX_DELAY_MS
45#define HAL_USB_CURRENT_MODE_MAX_DELAY_MS 200U
46#endif /* define HAL_USB_CURRENT_MODE_MAX_DELAY_MS */
47
51
52typedef enum
53{
54 USB_DEVICE_MODE = 0,
55 USB_HOST_MODE = 1,
56 USB_DRD_MODE = 2
57} USB_ModeTypeDef;
58
62typedef enum
63{
64 URB_IDLE = 0,
65 URB_DONE,
66 URB_NOTREADY,
67 URB_NYET,
68 URB_ERROR,
69 URB_STALL
70} USB_URBStateTypeDef;
71
75typedef enum
76{
77 HC_IDLE = 0,
78 HC_XFRC,
79 HC_HALTED,
80 HC_ACK,
81 HC_NAK,
82 HC_NYET,
83 HC_STALL,
84 HC_XACTERR,
85 HC_BBLERR,
86 HC_DATATGLERR
87} USB_HCStateTypeDef;
88
89
93typedef struct
94{
95 uint8_t dev_endpoints;
98
99 uint8_t Host_channels;
102
103 uint8_t dma_enable;
105
106 uint8_t speed;
109
110 uint8_t ep0_mps;
111
112 uint8_t phy_itface;
114
115 uint8_t Sof_enable;
116
117 uint8_t low_power_enable;
118
119 uint8_t lpm_enable;
120
121 uint8_t battery_charging_enable;
122
123 uint8_t vbus_sensing_enable;
124
125 uint8_t use_dedicated_ep1;
126
127 uint8_t use_external_vbus;
128
129} USB_CfgTypeDef;
130
131typedef struct
132{
133 uint8_t num;
135
136 uint8_t is_in;
138
139 uint8_t is_stall;
141
142 uint8_t is_iso_incomplete;
144
145 uint8_t type;
147
148 uint8_t data_pid_start;
150
151 uint32_t maxpacket;
153
154 uint8_t *xfer_buff;
155
156 uint32_t xfer_len;
157
158 uint32_t xfer_count;
159
160 uint8_t even_odd_frame;
162
163 uint16_t tx_fifo_num;
165
166 uint32_t dma_addr;
167
168 uint32_t xfer_size;
169} USB_EPTypeDef;
170
171typedef struct
172{
173 uint8_t dev_addr;
175
176 uint8_t ch_num;
178
179 uint8_t ep_num;
181
182 uint8_t ep_is_in;
184
185 uint8_t speed;
188
189 uint8_t do_ping;
190 uint8_t do_ssplit;
191 uint8_t do_csplit;
192 uint8_t ep_ss_schedule;
193 uint32_t iso_splt_xactPos;
194
195 uint8_t hub_port_nbr;
196 uint8_t hub_addr;
197
198 uint8_t ep_type;
200
201 uint16_t max_packet;
203
204 uint8_t data_pid;
206
207 uint8_t *xfer_buff;
208
209 uint32_t XferSize;
210
211 uint32_t xfer_len;
212
213 uint32_t xfer_count;
214
215 uint8_t toggle_in;
217
218 uint8_t toggle_out;
220
221 uint32_t dma_addr;
222
223 uint32_t ErrCnt;
224 uint32_t NyetErrCnt;
225
226 USB_URBStateTypeDef urb_state;
228
229 USB_HCStateTypeDef state;
231} USB_HCTypeDef;
232
233typedef USB_ModeTypeDef USB_OTG_ModeTypeDef;
234typedef USB_CfgTypeDef USB_OTG_CfgTypeDef;
235typedef USB_EPTypeDef USB_OTG_EPTypeDef;
236typedef USB_URBStateTypeDef USB_OTG_URBStateTypeDef;
237typedef USB_HCStateTypeDef USB_OTG_HCStateTypeDef;
238typedef USB_HCTypeDef USB_OTG_HCTypeDef;
239
240/* Exported constants --------------------------------------------------------*/
241
245
246#if defined (USB_OTG_FS) || defined (USB_OTG_HS)
250#define USB_OTG_CORE_ID_300A 0x4F54300AU
251#define USB_OTG_CORE_ID_310A 0x4F54310AU
255
259#define USB_OTG_MODE_DEVICE 0U
260#define USB_OTG_MODE_HOST 1U
261#define USB_OTG_MODE_DRD 2U
265
269#define USB_OTG_SPEED_HIGH 0U
270#define USB_OTG_SPEED_HIGH_IN_FULL 1U
271#define USB_OTG_SPEED_FULL 3U
275
279#define USB_OTG_ULPI_PHY 1U
280#define USB_OTG_EMBEDDED_PHY 2U
284
288#ifndef USBD_HS_TRDT_VALUE
289#define USBD_HS_TRDT_VALUE 9U
290#endif /* USBD_HS_TRDT_VALUE */
291#ifndef USBD_FS_TRDT_VALUE
292#define USBD_FS_TRDT_VALUE 5U
293#define USBD_DEFAULT_TRDT_VALUE 9U
294#endif /* USBD_HS_TRDT_VALUE */
298
302#define USB_OTG_HS_MAX_PACKET_SIZE 512U
303#define USB_OTG_FS_MAX_PACKET_SIZE 64U
304#define USB_OTG_MAX_EP0_SIZE 64U
308
312#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ (0U << 1)
313#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ (1U << 1)
314#define DSTS_ENUMSPD_FS_PHY_48MHZ (3U << 1)
318
322#define DCFG_FRAME_INTERVAL_80 0U
323#define DCFG_FRAME_INTERVAL_85 1U
324#define DCFG_FRAME_INTERVAL_90 2U
325#define DCFG_FRAME_INTERVAL_95 3U
329#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
333#define EP_MPS_64 0U
334#define EP_MPS_32 1U
335#define EP_MPS_16 2U
336#define EP_MPS_8 3U
340
344#define EP_TYPE_CTRL 0U
345#define EP_TYPE_ISOC 1U
346#define EP_TYPE_BULK 2U
347#define EP_TYPE_INTR 3U
348#define EP_TYPE_MSK 3U
352
356#define EP_SPEED_LOW 0U
357#define EP_SPEED_FULL 1U
358#define EP_SPEED_HIGH 2U
362
366#define HC_PID_DATA0 0U
367#define HC_PID_DATA2 1U
368#define HC_PID_DATA1 2U
369#define HC_PID_SETUP 3U
373
377#define USBD_HS_SPEED 0U
378#define USBD_HSINFS_SPEED 1U
379#define USBH_HS_SPEED 0U
380#define USBD_FS_SPEED 2U
381#define USBH_FSLS_SPEED 1U
385
386#if defined (USB_OTG_FS) || defined (USB_OTG_HS)
390#define STS_GOUT_NAK 1U
391#define STS_DATA_UPDT 2U
392#define STS_XFER_COMP 3U
393#define STS_SETUP_COMP 4U
394#define STS_SETUP_UPDT 6U
398
402#define HCFG_30_60_MHZ 0U
403#define HCFG_48_MHZ 1U
404#define HCFG_6_MHZ 2U
408
412#define HFIR_6_MHZ 6000U
413#define HFIR_60_MHZ 60000U
414#define HFIR_48_MHZ 48000U
418
422#define HPRT0_PRTSPD_HIGH_SPEED 0UL
423#define HPRT0_PRTSPD_FULL_SPEED 1UL
424#define HPRT0_PRTSPD_LOW_SPEED 2UL
428
429#define HCCHAR_CTRL 0U
430#define HCCHAR_ISOC 1U
431#define HCCHAR_BULK 2U
432#define HCCHAR_INTR 3U
433
434#define GRXSTS_PKTSTS_IN 2U
435#define GRXSTS_PKTSTS_IN_XFER_COMP 3U
436#define GRXSTS_PKTSTS_DATA_TOGGLE_ERR 5U
437#define GRXSTS_PKTSTS_CH_HALTED 7U
438
439#define CLEAR_INTERRUPT_MASK 0xFFFFFFFFU
440
441#define HC_MAX_PKT_CNT 256U
442#define ISO_SPLT_MPS 188U
443
444#define HCSPLT_BEGIN 1U
445#define HCSPLT_MIDDLE 2U
446#define HCSPLT_END 3U
447#define HCSPLT_FULL 4U
448
449#define TEST_J 1U
450#define TEST_K 2U
451#define TEST_SE0_NAK 3U
452#define TEST_PACKET 4U
453#define TEST_FORCE_EN 5U
454
455#define USBx_PCGCCTL *(__IO uint32_t *)((uint32_t)USBx_BASE + USB_OTG_PCGCCTL_BASE)
456#define USBx_HPRT0 *(__IO uint32_t *)((uint32_t)USBx_BASE + USB_OTG_HOST_PORT_BASE)
457
458#define USBx_DEVICE ((USB_OTG_DeviceTypeDef *)(USBx_BASE + USB_OTG_DEVICE_BASE))
459#define USBx_INEP(i) ((USB_OTG_INEndpointTypeDef *)(USBx_BASE\
460 + USB_OTG_IN_ENDPOINT_BASE + ((i) * USB_OTG_EP_REG_SIZE)))
461
462#define USBx_OUTEP(i) ((USB_OTG_OUTEndpointTypeDef *)(USBx_BASE\
463 + USB_OTG_OUT_ENDPOINT_BASE + ((i) * USB_OTG_EP_REG_SIZE)))
464
465#define USBx_DFIFO(i) *(__IO uint32_t *)(USBx_BASE + USB_OTG_FIFO_BASE + ((i) * USB_OTG_FIFO_SIZE))
466
467#define USBx_HOST ((USB_OTG_HostTypeDef *)(USBx_BASE + USB_OTG_HOST_BASE))
468#define USBx_HC(i) ((USB_OTG_HostChannelTypeDef *)(USBx_BASE\
469 + USB_OTG_HOST_CHANNEL_BASE\
470 + ((i) * USB_OTG_HOST_CHANNEL_SIZE)))
471
472
473#define EP_ADDR_MSK 0xFU
474#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
478
479/* Exported macro ------------------------------------------------------------*/
483#if defined (USB_OTG_FS) || defined (USB_OTG_HS)
484#define USB_MASK_INTERRUPT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->GINTMSK &= ~(__INTERRUPT__))
485#define USB_UNMASK_INTERRUPT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->GINTMSK |= (__INTERRUPT__))
486
487#define CLEAR_IN_EP_INTR(__EPNUM__, __INTERRUPT__) (USBx_INEP(__EPNUM__)->DIEPINT = (__INTERRUPT__))
488#define CLEAR_OUT_EP_INTR(__EPNUM__, __INTERRUPT__) (USBx_OUTEP(__EPNUM__)->DOEPINT = (__INTERRUPT__))
489#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
493
494/* Exported functions --------------------------------------------------------*/
498#if defined (USB_OTG_FS) || defined (USB_OTG_HS)
499HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg);
500HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg);
501HAL_StatusTypeDef USB_EnableGlobalInt(USB_OTG_GlobalTypeDef *USBx);
502HAL_StatusTypeDef USB_DisableGlobalInt(USB_OTG_GlobalTypeDef *USBx);
503HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx, uint32_t hclk, uint8_t speed);
504HAL_StatusTypeDef USB_SetCurrentMode(USB_OTG_GlobalTypeDef *USBx, USB_OTG_ModeTypeDef mode);
505HAL_StatusTypeDef USB_SetDevSpeed(const USB_OTG_GlobalTypeDef *USBx, uint8_t speed);
506HAL_StatusTypeDef USB_FlushRxFifo(USB_OTG_GlobalTypeDef *USBx);
507HAL_StatusTypeDef USB_FlushTxFifo(USB_OTG_GlobalTypeDef *USBx, uint32_t num);
508HAL_StatusTypeDef USB_ActivateEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep);
509HAL_StatusTypeDef USB_DeactivateEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep);
510HAL_StatusTypeDef USB_ActivateDedicatedEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep);
511HAL_StatusTypeDef USB_DeactivateDedicatedEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep);
512HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep, uint8_t dma);
513HAL_StatusTypeDef USB_WritePacket(const USB_OTG_GlobalTypeDef *USBx, uint8_t *src,
514 uint8_t ch_ep_num, uint16_t len, uint8_t dma);
515
516void *USB_ReadPacket(const USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len);
517HAL_StatusTypeDef USB_EPSetStall(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep);
518HAL_StatusTypeDef USB_EPClearStall(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep);
519HAL_StatusTypeDef USB_EPStopXfer(const USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep);
520HAL_StatusTypeDef USB_SetDevAddress(const USB_OTG_GlobalTypeDef *USBx, uint8_t address);
521HAL_StatusTypeDef USB_DevConnect(const USB_OTG_GlobalTypeDef *USBx);
522HAL_StatusTypeDef USB_DevDisconnect(const USB_OTG_GlobalTypeDef *USBx);
523HAL_StatusTypeDef USB_StopDevice(USB_OTG_GlobalTypeDef *USBx);
524HAL_StatusTypeDef USB_ActivateSetup(const USB_OTG_GlobalTypeDef *USBx);
525HAL_StatusTypeDef USB_EP0_OutStart(const USB_OTG_GlobalTypeDef *USBx, uint8_t dma, const uint8_t *psetup);
526uint8_t USB_GetDevSpeed(const USB_OTG_GlobalTypeDef *USBx);
527uint32_t USB_GetMode(const USB_OTG_GlobalTypeDef *USBx);
528uint32_t USB_ReadInterrupts(USB_OTG_GlobalTypeDef const *USBx);
529uint32_t USB_ReadChInterrupts(const USB_OTG_GlobalTypeDef *USBx, uint8_t chnum);
530uint32_t USB_ReadDevAllOutEpInterrupt(const USB_OTG_GlobalTypeDef *USBx);
531uint32_t USB_ReadDevOutEPInterrupt(const USB_OTG_GlobalTypeDef *USBx, uint8_t epnum);
532uint32_t USB_ReadDevAllInEpInterrupt(const USB_OTG_GlobalTypeDef *USBx);
533uint32_t USB_ReadDevInEPInterrupt(const USB_OTG_GlobalTypeDef *USBx, uint8_t epnum);
534void USB_ClearInterrupts(USB_OTG_GlobalTypeDef *USBx, uint32_t interrupt);
535
536HAL_StatusTypeDef USB_HostInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg);
537HAL_StatusTypeDef USB_InitFSLSPClkSel(const USB_OTG_GlobalTypeDef *USBx, uint8_t freq);
538HAL_StatusTypeDef USB_ResetPort(const USB_OTG_GlobalTypeDef *USBx);
539HAL_StatusTypeDef USB_DriveVbus(const USB_OTG_GlobalTypeDef *USBx, uint8_t state);
540uint32_t USB_GetHostSpeed(USB_OTG_GlobalTypeDef const *USBx);
541uint32_t USB_GetCurrentFrame(USB_OTG_GlobalTypeDef const *USBx);
542HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num,
543 uint8_t epnum, uint8_t dev_address, uint8_t speed,
544 uint8_t ep_type, uint16_t mps);
545HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx,
546 USB_OTG_HCTypeDef *hc, uint8_t dma);
547
548uint32_t USB_HC_ReadInterrupt(const USB_OTG_GlobalTypeDef *USBx);
549HAL_StatusTypeDef USB_HC_Halt(const USB_OTG_GlobalTypeDef *USBx, uint8_t hc_num);
550HAL_StatusTypeDef USB_DoPing(const USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num);
551HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx);
552HAL_StatusTypeDef USB_ActivateRemoteWakeup(const USB_OTG_GlobalTypeDef *USBx);
553HAL_StatusTypeDef USB_DeActivateRemoteWakeup(const USB_OTG_GlobalTypeDef *USBx);
554#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
555
559
563
567
571#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
572
573#ifdef __cplusplus
574}
575#endif /* __cplusplus */
576
577
578#endif /* STM32F4xx_LL_USB_H */
This file contains HAL common defines, enumeration, macros and structures definitions.
HAL_StatusTypeDef
HAL Status structures definition.