Периферийные устройства могут быть сброшены с помощью RCC
(Сброс и управление часами).
Найдите биты, соответствующие периферийным устройствам, подлежащим сбросу, в регистрах RCC...RSTR
, установите их в 1 и очистите их в 0. Например. для DCMI это будет
RCC->AHB2RSTR |= RCC_AHB2RSTR_DCMIRST;
RCC->AHB2RSTR &= ~RCC_AHB2RSTR_DCMIRST;
HAL предоставляет некоторые макросы, которые избавляют вас от необходимости искать имена регистров, например
__HAL_RCC_DCMI_FORCE_RESET();
__HAL_RCC_DCMI_RELEASE_RESET();
Биты регистра и макросы для периферийного устройства I2C можно найти в Справочном руководстве или в заголовках HAL.