First of all, when you paste code to the forum, make sure you use the "paste as text" option (or copy as text option in your IDE). Otherwise, you end up with the horrible mess above.

First,
Code:
USART_TypeDef myVar;
#define USART1       ((USART_TypeDef *) &myVar)        /**<USART1 base pointer */
...
USART1->TXDATA = 0;
Do you understand this bit of convolution as being the same as
Code:
myVar.TXDATA = 0;
All the macros are doing is substituting the memory address the compiler knows about with &myVar, with a physical address on your board such as 0x4000C400UL.


> I understand that the first parameter is a pointer to a struct of USART_TypeDef and that we are writing to an instance of that struct.
Given your macros, I expect that the first parameter will always be USART1 when programming for this particular device.
As in
Code:
uint8_t rxByte = USART_SpiTransfer(USART1, '\n');
Presumably on other supported chipsets, there may be a
Code:
#define USART2       ((USART_TypeDef *) USART2_BASE)        /**<USART2 base pointer */
Along with matching calls like
Code:
uint8_t rxByte = USART_SpiTransfer(USART2, '\n');
The whole point of the macros, base register pointers and wrapper functions like USART_SpiTransfer() is to create a much nicer programming environment where 99% of the code simply doesn't care that a USART exists at address 0x4000C400UL. If that address were to change, it would be a simple 1-line code change and recompilation, and the rest of the code carries on in happy ignorance of the underlying hardware.