Top.Mail.Ru
Уведомления
Очистить все

Stm32f407vgt6+ FreeRTOS

(@veditor)
Level 1

Коллеги! Подскажите, в чем секрет Stm32f407vgt6. Не исполняются задачи(банальный blink). Настроено в Кубе, причем проект собран по аналогии рабочего на Stm32f401rct6.


Цитата
Создатель темы Размещено : 30.12.2025 06:38
Aveal MT
(@aveal)
Top level Admin

Приветствую! Только добрался до форума, но код сейчас не смогу посмотреть... После праздников могу на своём железе проверить. 


ОтветитьЦитата
Размещено : 06.01.2026 19:43
(@veditor)
Level 1

@aveal К этой загадке ответ нашелся. Оказалось, что:  это перемаркированный APM32F407VGT6. У него configPRIO_BITS=3, в STM configPRIO_BITS=4. Или надо менять в файле port.c для FreeRTOS на:

/* Check the FreeRTOS configuration that defines the number of priority bits matches the number of priority bits actually queried from the hardware. */ configASSERT( ( portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue ) == configPRIO_BITS - 1);

после генерации в cubemx или комментировать макрос configASSERT во FreeRTOSConfig.h для исключения проверки. Но вот новая задача: не работает ETH( нет ping) в связке FreeRTOS+LwIP , причем без FreeRTOS ping есть.


ОтветитьЦитата
Создатель темы Размещено : 12.01.2026 19:19
Aveal MT
(@aveal)
Top level Admin

@veditor А можете нерабочий вариант скинуть?


ОтветитьЦитата
Размещено : 12.01.2026 19:52
(@veditor)
Level 1
/* USER CODE BEGIN Header */

/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "cmsis_os.h"
#include "lwip.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
UART_HandleTypeDef huart5;

/* Definitions for defaultTask */
osThreadId_t defaultTaskHandle;
const osThreadAttr_t defaultTask_attributes = {
  .name = "defaultTask",
  .stack_size = 512 * 4,
  .priority = (osPriority_t) osPriorityNormal,
};
/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_UART5_Init(void);
void StartDefaultTask(void *argument);

/* USER CODE BEGIN PFP */
/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
// Минимальное перенаправление printf на UART5 для отладочных сообщений
int _write(int file, char *ptr, int len)
{
    HAL_UART_Transmit(&huart5, (uint8_t*)ptr, len, HAL_MAX_DELAY);
    return len;
}
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick