/* USER CODE BEGIN Header */ /** ****************************************************************************** * File Name : freertos.c * Description : Code for freertos applications ****************************************************************************** * @attention * * Copyright (c) 2024 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "FreeRTOS.h" #include "task.h" #include "main.h" #include "cmsis_os.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "apps_gather.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ #define LVGL_BREATHE_INTERVAL 5 /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN Variables */ uint16_t breathe_cnt = 0; /* USER CODE END Variables */ osThreadId defaultTaskHandle; osThreadId task_lcdHandle; osThreadId task_hartHandle; osThreadId task_bleHandle; osThreadId task_rs485Handle; osThreadId task_mux_analogHandle; osThreadId task_menuHandle; osMessageQId myQueue01Handle; osMutexId mutex_lvglHandle; /* Private function prototypes -----------------------------------------------*/ /* USER CODE BEGIN FunctionPrototypes */ /* USER CODE END FunctionPrototypes */ void StartDefaultTask(void const * argument); void start_task_lcd(void const * argument); void start_task_hart(void const * argument); void start_task_ble(void const * argument); void start_rs485(void const * argument); void start_mux_analog(void const * argument); void start_menu(void const * argument); void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ /* GetIdleTaskMemory prototype (linked to static allocation support) */ void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ); /* USER CODE BEGIN GET_IDLE_TASK_MEMORY */ static StaticTask_t xIdleTaskTCBBuffer; static StackType_t xIdleStack[configMINIMAL_STACK_SIZE]; void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize) { *ppxIdleTaskTCBBuffer = &xIdleTaskTCBBuffer; *ppxIdleTaskStackBuffer = &xIdleStack[0]; *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE; /* place for user code */ } /* USER CODE END GET_IDLE_TASK_MEMORY */ /** * @brief FreeRTOS initialization * @param None * @retval None */ void MX_FREERTOS_Init(void) { /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Create the mutex(es) */ /* definition and creation of mutex_lvgl */ osMutexDef(mutex_lvgl); mutex_lvglHandle = osMutexCreate(osMutex(mutex_lvgl)); /* USER CODE BEGIN RTOS_MUTEX */ /* add mutexes, ... */ /* USER CODE END RTOS_MUTEX */ /* USER CODE BEGIN RTOS_SEMAPHORES */ /* add semaphores, ... */ /* USER CODE END RTOS_SEMAPHORES */ /* USER CODE BEGIN RTOS_TIMERS */ /* start timers, add new ones, ... */ /* USER CODE END RTOS_TIMERS */ /* Create the queue(s) */ /* definition and creation of myQueue01 */ osMessageQDef(myQueue01, 16, uint16_t); myQueue01Handle = osMessageCreate(osMessageQ(myQueue01), NULL); /* USER CODE BEGIN RTOS_QUEUES */ /* add queues, ... */ /* USER CODE END RTOS_QUEUES */ /* Create the thread(s) */ /* definition and creation of defaultTask */ osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128); defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL); /* definition and creation of task_lcd */ osThreadDef(task_lcd, start_task_lcd, osPriorityBelowNormal, 0, 1024); task_lcdHandle = osThreadCreate(osThread(task_lcd), NULL); /* definition and creation of task_hart */ osThreadDef(task_hart, start_task_hart, osPriorityNormal, 0, 128); task_hartHandle = osThreadCreate(osThread(task_hart), NULL); /* definition and creation of task_ble */ osThreadDef(task_ble, start_task_ble, osPriorityBelowNormal, 0, 128); task_bleHandle = osThreadCreate(osThread(task_ble), NULL); /* definition and creation of task_rs485 */ osThreadDef(task_rs485, start_rs485, osPriorityNormal, 0, 128); task_rs485Handle = osThreadCreate(osThread(task_rs485), NULL); /* definition and creation of task_mux_analog */ osThreadDef(task_mux_analog, start_mux_analog, osPriorityAboveNormal, 0, 128); task_mux_analogHandle = osThreadCreate(osThread(task_mux_analog), NULL); /* definition and creation of task_menu */ osThreadDef(task_menu, start_menu, osPriorityIdle, 0, 1024); task_menuHandle = osThreadCreate(osThread(task_menu), NULL); /* USER CODE BEGIN RTOS_THREADS */ /* add threads, ... */ /* USER CODE END RTOS_THREADS */ } /* USER CODE BEGIN Header_StartDefaultTask */ /** * @brief Function implementing the defaultTask thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_StartDefaultTask */ void StartDefaultTask(void const * argument) { /* USER CODE BEGIN StartDefaultTask */ /* Infinite loop */ for (;;) { //LIGHT_PWR(OFF); // pwr_cosume(kp_flag, 20000); //tm1650_read_key(&hi2c1, &kp_flag, COMMAND_READ_KEY_DATA, &key); osDelay(500); } /* USER CODE END StartDefaultTask */ } /* USER CODE BEGIN Header_start_task_lcd */ /** * @brief Function implementing the task_lcd thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_start_task_lcd */ void start_task_lcd(void const * argument) { /* USER CODE BEGIN start_task_lcd */ osStatus result; /* Infinite loop */ for (;;) { //menu_test4(); if(result == osMutexWait(mutex_lvglHandle,10)) { lv_timer_handler(); //LVGL刷新任务 osMutexRelease(mutex_lvglHandle); } if(breathe_cnt * LVGL_BREATHE_INTERVAL >= 1000) { breathe_cnt = 0; //LED_TOG; } breathe_cnt++; osDelay(LVGL_BREATHE_INTERVAL); } /* USER CODE END start_task_lcd */ } /* USER CODE BEGIN Header_start_task_hart */ /** * @brief Function implementing the task_hart thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_start_task_hart */ void start_task_hart(void const * argument) { /* USER CODE BEGIN start_task_hart */ /* Infinite loop */ for (;;) { hart_communicate(&scom1_hart); tm1650_read_key(&hi2c1, &kp_flag, COMMAND_READ_KEY_DATA, &key); osDelay(10); } /* USER CODE END start_task_hart */ } /* USER CODE BEGIN Header_start_task_ble */ /** * @brief Function implementing the task_ble thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_start_task_ble */ void start_task_ble(void const * argument) { /* USER CODE BEGIN start_task_ble */ /* Infinite loop */ for (;;) { strcpy((char *)(scom6_ble.tx_buff), "hellow I am ble.\r\n"); ble_send(&huart6, scom6_ble.tx_buff); osDelay(1000); } /* USER CODE END start_task_ble */ } /* USER CODE BEGIN Header_start_rs485 */ /** * @brief Function implementing the task_rs485 thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_start_rs485 */ void start_rs485(void const * argument) { /* USER CODE BEGIN start_rs485 */ //RS485_RW(RS485_RD); // rs485从机 /* Infinite loop */ for (;;) { parse_scom_485(&scom2_rs485); osDelay(1); } /* USER CODE END start_rs485 */ } /* USER CODE BEGIN Header_start_mux_analog */ /** * @brief Function implementing the task_mux_analog thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_start_mux_analog */ void start_mux_analog(void const * argument) { /* USER CODE BEGIN start_mux_analog */ // rn7302_Init(); SIG24130_Init(); /* Infinite loop */ for (;;) { // get_rn7302_ch_value(); mux_signal_switch(&mux_signal); osDelay(50); } /* USER CODE END start_mux_analog */ } /* USER CODE BEGIN Header_start_menu */ /** * @brief Function implementing the task_menu thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_start_menu */ void start_menu(void const * argument) { /* USER CODE BEGIN start_menu */ menu_data_init(); /* Infinite loop */ for(;;) { menu_test5(); osDelay(200); } /* USER CODE END start_menu */ } /* Private application code --------------------------------------------------*/ /* USER CODE BEGIN Application */ /* USER CODE END Application */