чего-то Вы перемудрили. Посмотрите родные библиотеки, как реализованы GPIO_SetBits() и GPIO_ResetBits() компилится оно в одну команду
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
GPIOx->BSRR = GPIO_Pin;
}
0x08000716 6101 STR r1,[r0,#0x10]