STM32F103裏面的從USB,收發數據靠的是讀寫512位元組的PMA(Packet Memory Area),其地址為0x40006000~0x400063fd。第0個字節是0x40006000,第1個字節是0x40006001;第2個字節是0x40006004,第3個字節是0x40006005;第4個字節是0x40006008,第5個字節是0x40006009……以此類推,直到第511個字節0x400063fd。
而STM32F107裏面的USB OTG,收發數據靠的是1.25KB的DFIFO。定義:
#define USB_OTG_FS_PERIPH_BASE 0x50000000UL
#define USB_OTG_FIFO_BASE 0x00001000UL
#define USB_OTG_FS_DFIFO ((USB_OTG_DFIFOTypeDef *)(USB_OTG_FS_PERIPH_BASE + USB_OTG_FIFO_BASE))
typedef struct
{
uint32_t DFIFO;
uint32_t RESERVED[1023];
} USB_OTG_DFIFOTypeDef;
則接收數據始終是讀取USB_OTG_FS_DFIFO->DFIFO寄存器(相當於USB_OTG_FS_DFIFO[0].DFIFO),而發送數據是寫USB_OTG_FS_DFIFO[端點號].DFIFO寄存器。