Задать вопрос
@kotpodflusom

В STM32CubeIDE не запускается freeRTOS, как исправить?

Всем здравствуйте, возникла проблема с подключением freeRTOS ОС на мк STM32H743IIT6.
Решил поставить две простые задачи для ОС, это постоянное мерцание светодиодом и включение/выключение вторым светодиодом с кнопки.
Написал код, пересмотрел много видеороликов, по каждым из них от начала до конца подключался, и эффекта никакого, РТОС просто буд-то не существует, прошу помощи, код main.c прилагаю.
Может что-то дополнительно необходимо подключать, или код в другом месте прописывать, или с частотами дорабатывать в клок-конфигураторе, я буду рад любой помощи!
Сократил некоторые void функции.
#include "main.h"
#include "cmsis_os.h"

uint8_t k=0;

osThreadId defaultTaskHandle;
osThreadId LED1Handle;
osThreadId LED2Handle;
osThreadId ButtonHandle;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
void StartDefaultTask(void const * argument);
void vLED1(void const * argument);
void vLED2(void const * argument);
void vButton(void const * argument);

int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();

osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);

osThreadDef(LED1, vLED1, osPriorityIdle, 0, 128);
LED1Handle = osThreadCreate(osThread(LED1), NULL);

osThreadDef(LED2, vLED2, osPriorityIdle, 0, 128);
LED2Handle = osThreadCreate(osThread(LED2), NULL);

osThreadDef(Button, vButton, osPriorityIdle, 0, 128);
ButtonHandle = osThreadCreate(osThread(Button), NULL);

osKernelStart();

}
void SystemClock_Config(void)
static void MX_GPIO_Init(void)

void StartDefaultTask(void const * argument)
{
  for(;;)
  {
	  osDelay(1);
  }
}

void vLED1(void const * argument)
{
  for(;;)
  {
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_SET);
    osDelay(500);
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_6,GPIO_PIN_RESET);
  }
}

void vLED2(void const * argument)
{
  for(;;)
  {
	if(k==1)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);
	}
	else if(k==0)
	{
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);
	}
  }
}

void vButton(void const * argument)
{
  for(;;)
  {
	if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_SET)
	{
		while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_SET)
		{
			vTaskDelay(50);
		}
		k=1;
	}
	if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)
	{
		while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)
		{
			vTaskDelay(50);
		}
		k=0;
	}
    osDelay(100);
  }
}

void Error_Handler(void)
#ifdef  USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
#endif
  • Вопрос задан
  • 178 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kotpodflusom Автор вопроса
В режиме отладки доходит до момента SystemClock_Config(); и все, дальше не дает отлаживать.
Поменял SYS на TIM2, все заработало, код тот же самый, но при этом, до этого я уже так делал, сейчас просто заново создал проект, и вместо системного таймера выбрал TIM2, точно так же прописал код и все заработало, вот такие пироги.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы