Matthias, of course what you suggest is totally fine. It is a normal word access. I was talking about bit banding, so that you can create a single define that would map a port pin to an alias of ODR register in the alias memory. Then you can define and use something like
LED_1 = 1;
or LED_1 = 0,
and it will be an atomic set OR clear of a port pin by a simple write of "1" or "0" to a memory address, the SAME memory address.
The alternative would be to have two different defines to control the LED_1: one to set it (by writing to BSRR), the other - to clear it (by writing to BRR or another location in BSRR). The code would look like
SET_LED_1;
or CLR_LED_1;
Note that in the first case we would use the ODR register. In the second - BSRR and/or BRR.
Reading of a bit would also be more complicated because you can't get status of a bit from the IDR without masking the needed bit and shifts if you want to get either "0x1" or "0x0". Aliasing it to bit banding would compile as one read from a memory location that would yield either "0" or "1" in the LSB of the result. It is more compact, cleaner and faster. But the question remains " Is it legitimate? Does a port register see the access via bit alias as a normal word access? " I am afraid that only people from ST can confirm it.