Всем привет!
Пытаюсь изучать контроллер. У него нога сброса совмещена с портами. Хотел, поставить ее в режим сброса по умолчанию. Для этого из примеров от Куба взял код, ниже, запустил его, после перезагрузки контроллер перестал видеться СТ-линком. При подключении СТ-линка к компу появляется файл FAIL.TXT с описанием ошибки The interface firmware FAILED to reset/halt the target MCU
Для опытов использую плату STM32G0316-DISCO
Пробовал подключаться по УСАРТУ, boot0 через резистор 10к подтягивал к плюсу, но видимо что-то не так делаю, не получается. Может усарт не туда подключаю.
Уже 2 контроллера в таком состоянии-)
Код:
/**
* @brief Set demo sub-mode
* @param SubMode select one of 2 different demo modes.
* This parameter can be one of the following values:
* @arg @ref SUBDEMO_MODE_GPIO
* @arg @ref SUBDEMO_MODE_NRST
* Target will reboot with option byte reset reason
* @retval None
*/
static void SetDemoMode(DemoMode_t DemoMode)
{
uint32_t nrstmode;
/* Enable Flash access anyway */
__HAL_RCC_FLASH_CLK_ENABLE();
/* Unlock flash */
FLASH->KEYR = FLASH_KEY1;
FLASH->KEYR = FLASH_KEY2;
while((FLASH->CR & FLASH_CR_LOCK) != 0x00);
/* unlock option byte registers */
FLASH->OPTKEYR = 0x08192A3B;
FLASH->OPTKEYR = 0x4C5D6E7F;
while((FLASH->CR & FLASH_CR_OPTLOCK) == FLASH_CR_OPTLOCK);
/* get current user option bytes */
nrstmode = (FLASH->OPTR & ~FLASH_OPTR_NRST_MODE);
/* Select sub demo mode */
if(DemoMode == DEMO_MODE_GPIO)
{
nrstmode |= OB_RESET_MODE_GPIO;
}
else
{
nrstmode |= OB_RESET_MODE_INPUT_OUTPUT;
}
/* Program option bytes */
FLASH->OPTR = nrstmode;
/* Write operation */
FLASH->CR |= FLASH_CR_OPTSTRT;
while((FLASH->SR & FLASH_SR_BSY1) != 0);
/* Force OB Load */
FLASH->CR |= FLASH_CR_OBL_LAUNCH;
//while(1);
}