Я пытаюсь использовать простой мигающий светодиод, но он тоже зависает.< /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
Мобильная версия