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寄存器。