[uquote="baghear",url="/forum/viewtopic.php?p=3608772#p3608772"]Поясните пожалуйста, почему над кодом выше надо задуматься?[/uquote]Над BSRR, вижу, поработали. А дальше? По коду вижу задачу поменять значения битов GPIO_MODER_MODER2_0 и GPIO_MODER_MODER2_1 на противоположные. Давай сравнивать.
Код: Выделить всё
// GPIOD->MODER &= ~GPIO_MODER_MODER2;
MOVS R0,#+48
MVNS R0,R0 ;; #-49
LDR R1,??main_0 ;; 0x48000c00
LDR R2,[R1, #+0]
ANDS R2,R2,R0
STR R2,[R1, #+0]
// GPIOD->MODER |= GPIO_MODER_MODER2_1;
MOVS R2,#+32
LDR R3,[R1, #+0]
ORRS R3,R3,R2
STR R3,[R1, #+0]
Код: Выделить всё
// GPIOD->MODER = GPIOD->MODER & ~GPIO_MODER_MODER2 | GPIO_MODER_MODER2_1;
LDR R0,??main_0 ;; 0x48000c00
LDR R1,[R0, #+0]
MOVS R2,#+48
BICS R1,R1,R2
MOVS R2,#+32
ORRS R2,R2,R1
STR R2,[R0, #+0]
Код: Выделить всё
// GPIOD->MODER ^= GPIO_MODER_MODER2;
LDR R0,??main_0 ;; 0x48000c00
LDR R1,[R0, #+0]
MOVS R2,#+48
EORS R2,R2,R1
STR R2,[R0, #+0]
Последний вариант, правда, надо применять очень "строго" и я бы его не рекомендовал. Зато, если режим работы других ножек на GPIOD не меняется, то рекомендовал бы просто запись новой константы в MODER.