Ok, so there is no module like for UART that gives me the data in some register?
Unlike UART the data comes in packets, so USB provides the data in a buffer. The interaction with USB is so fast that the buffer must be emptied as quickly as possible, so the USB end point is serviced by irq.
So there must be a number of layer, and each layer has buffers.
While, you can access the USB peripheral registers, it is not in any way like a serial device.
Like I said, treat it like a communications stack which has layers. Your code only needs to interact with the top layer. The USB Hal code handles everything else. That is how I used the USB CDC device and the USB Hal code.