Так вот, чтоб всего этого избежать, придумали регистры BRR и BSRR.
Изначально регистр BRR весь в нулях, это расценивается системой как то, что ничего делать не надо.
Как только мы записываем в BRR единичку в какой-то бит или в несколько битов выборочно, например в 3, 7 и 9, то регистр BRR тут же понимает, что он должен обнулить биты 3, 7 и 9 в регистре ODR, и делает это.
Другие биты в регистре BRR (которые равны нулю) не влияют на соответствующие биты в регистре ODR.
Таким образом мы за один такт (который тратится на запись единицы в BRR) меняем значение конкретного бита в регистре ODR. BRR взаимодействует с ODR на аппаратном уровне, без нашего участия.
После чего весь регистр BRR обнуляется и ждёт следующих распоряжений.
То есть, единичка в одном или нескольких битах в регитрах BSRR или BRR, это маркер того, что надо выполнить операцию над соответствующими битами в регистре ODR.