STM32 зависает в osKernelStart() после перехода из загрузчикаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 STM32 зависает в osKernelStart() после перехода из загрузчика

Сообщение Anonymous »

Мой stm32f103 зависает после osKernelStart() после перехода из загрузчика, но если я прошиваю по этому адресу, он работает нормально.
Я пытаюсь использовать простой мигающий светодиод, но он тоже зависает.< /p>
while (1)
{
HAL_GPIO_TogglePin(LED_SIGNAL_2_GPIO_Port, LED_SIGNAL_2_Pin);
HAL_Delay(500);
HAL_GPIO_TogglePin(LED_SIGNAL_3_GPIO_Port, LED_SIGNAL_3_Pin);
HAL_Delay(500);
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
}

Я использую cmsis-rtos v1 (cmsis-rtos v2 в STM32CubeIDE вызывает ошибку после обновления до 1.16.1, поэтому я возвращаюсь к v1)
Почему я знаю, что он там зависает:
Я ставлю print перед каждой задачей и один перед osKernelStart(), только тот, который перед osKernelStart, печатает его, другой нет, все задачи созданы успешно.
Я уже пробовал:
  • __disable_irq(), но это не сработало.
    Все часы загрузчика и приложения одинаковы.
Мои настройки:
STM32F103RCTX_FLASH.ld:
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 48K
FLASH (rx) : ORIGIN = 0x0800C800, LENGTH = 204K
}

system_stm32f1xx.c:
#define VECT_TAB_BASE_ADDRESS FLASH_BASE /*!< Vector Table base address field.
This value must be a multiple of 0x200. */
#define VECT_TAB_OFFSET 0x0000C800U /*!< Vector Table base offset field.
This value must be a multiple of 0x200. */

моя функция перехода:
void OTATask::_otaGotoApplication()
{
void (*app_reset_handler)(void)=(void (*)(void))(*((volatile uint32_t*) (FLASH_APPLICATION_LOCATION + 4U)));

/* Reset the Clock */
HAL_RCC_DeInit();
HAL_DeInit();
__set_MSP(*(volatile uint32_t*) FLASH_APPLICATION_LOCATION);
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;

/* Jump to application */
app_reset_handler();
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... bootloader
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»