Начнем с инициализации порта к которому подключены светодиоды:
/* enable led port */ RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; /* set led pins to output state */ LED_PORT->MODER |= GPIO_MODER_MODER12_0 | GPIO_MODER_MODER13_0 | GPIO_MODER_MODER14_0 | GPIO_MODER_MODER15_0;После поместим в переменную значение регистра контроля и статуса RCC_CSR:
/* get reset flags */ unsigned int flags = RCC->CSR;После очистим его от значений тех флагов которые нам не нужны:
/* clear nothing bits */ flags &= ~(1 << 24 | 1 << 1 | 1 << 0);В зависимости от активных флагов мы будем зажигать соответствующие светодиоды:
/* enable led for needed flags */ switch (flags) {Для аппаратного сброса:
/* hardware reset */ case RCC_CSR_PADRSTF: LED_PORT->ODR |= RED_LED; break;Для других случаев:
/* another reset */ default: LED_PORT->ODR |= ALL_LEDS; break; }После проверки очистим флаги сброса:
/* clear reset flags */ RCC->CSR |= RCC_CSR_RMVF;