diff --git a/CMakeLists.txt b/CMakeLists.txt index 0902d21..19746f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,6 +97,7 @@ target_sources(${CMAKE_PROJECT_NAME} PRIVATE User/task/monitor.c User/task/rc.c User/task/user_task.c + User/task/vofa.c ) # Add include paths diff --git a/User/.DS_Store b/User/.DS_Store new file mode 100644 index 0000000..962e874 Binary files /dev/null and b/User/.DS_Store differ diff --git a/User/bsp/bsp_config.yaml b/User/bsp/bsp_config.yaml index 8384b4d..b976ece 100644 --- a/User/bsp/bsp_config.yaml +++ b/User/bsp/bsp_config.yaml @@ -124,4 +124,6 @@ uart: devices: - instance: UART5 name: DR16 + - instance: USART1 + name: VOFA enabled: true diff --git a/User/bsp/uart.c b/User/bsp/uart.c index 96c4fd8..5afaa39 100644 --- a/User/bsp/uart.c +++ b/User/bsp/uart.c @@ -25,6 +25,8 @@ static void (*UART_Callback[BSP_UART_NUM][BSP_UART_CB_NUM])(void); static BSP_UART_t UART_Get(UART_HandleTypeDef *huart) { if (huart->Instance == UART5) return BSP_UART_DR16; + else if (huart->Instance == USART1) + return BSP_UART_VOFA; else return BSP_UART_ERR; } @@ -115,6 +117,8 @@ UART_HandleTypeDef *BSP_UART_GetHandle(BSP_UART_t uart) { switch (uart) { case BSP_UART_DR16: return &huart5; + case BSP_UART_VOFA: + return &huart1; default: return NULL; } diff --git a/User/bsp/uart.h b/User/bsp/uart.h index c3842af..669379a 100644 --- a/User/bsp/uart.h +++ b/User/bsp/uart.h @@ -28,6 +28,7 @@ extern "C" { /* UART实体枚举,与设备对应 */ typedef enum { BSP_UART_DR16, + BSP_UART_VOFA, BSP_UART_NUM, BSP_UART_ERR, } BSP_UART_t; diff --git a/User/task/ai.c b/User/task/ai.c index 1dc40e7..1c71886 100644 --- a/User/task/ai.c +++ b/User/task/ai.c @@ -4,7 +4,6 @@ */ /* Includes ----------------------------------------------------------------- */ -#include "cmsis_os2.h" #include "task/user_task.h" /* USER INCLUDE BEGIN */ #include "bsp/fdcan.h" diff --git a/User/task/config.yaml b/User/task/config.yaml index 716c111..626b88c 100644 --- a/User/task/config.yaml +++ b/User/task/config.yaml @@ -53,3 +53,10 @@ function: Task_ai name: ai stack: 256 +- delay: 0 + description: '' + freq_control: true + frequency: 500.0 + function: Task_vofa + name: vofa + stack: 256 diff --git a/User/task/init.c b/User/task/init.c index 16e45c4..6651c54 100644 --- a/User/task/init.c +++ b/User/task/init.c @@ -40,6 +40,7 @@ void Task_Init(void *argument) { task_runtime.thread.blink = osThreadNew(Task_blink, NULL, &attr_blink); task_runtime.thread.ctrl_shoot = osThreadNew(Task_ctrl_shoot, NULL, &attr_ctrl_shoot); task_runtime.thread.ai = osThreadNew(Task_ai, NULL, &attr_ai); + task_runtime.thread.vofa = osThreadNew(Task_vofa, NULL, &attr_vofa); // 创建消息队列 /* USER MESSAGE BEGIN */ diff --git a/User/task/user_task.c b/User/task/user_task.c index 9301bed..97781c5 100644 --- a/User/task/user_task.c +++ b/User/task/user_task.c @@ -48,4 +48,9 @@ const osThreadAttr_t attr_ai = { .name = "ai", .priority = osPriorityNormal, .stack_size = 256 * 4, +}; +const osThreadAttr_t attr_vofa = { + .name = "vofa", + .priority = osPriorityNormal, + .stack_size = 256 * 4, }; \ No newline at end of file diff --git a/User/task/user_task.h b/User/task/user_task.h index f0f56e2..7ec4e92 100644 --- a/User/task/user_task.h +++ b/User/task/user_task.h @@ -20,6 +20,7 @@ extern "C" { #define BLINK_FREQ (500.0) #define CTRL_SHOOT_FREQ (500.0) #define AI_FREQ (500.0) +#define VOFA_FREQ (500.0) /* 任务初始化延时ms */ #define TASK_INIT_DELAY (100u) @@ -31,6 +32,7 @@ extern "C" { #define BLINK_INIT_DELAY (0) #define CTRL_SHOOT_INIT_DELAY (0) #define AI_INIT_DELAY (0) +#define VOFA_INIT_DELAY (0) /* Exported defines --------------------------------------------------------- */ /* Exported macro ----------------------------------------------------------- */ @@ -48,6 +50,7 @@ typedef struct { osThreadId_t blink; osThreadId_t ctrl_shoot; osThreadId_t ai; + osThreadId_t vofa; } thread; /* USER MESSAGE BEGIN */ @@ -101,6 +104,7 @@ typedef struct { UBaseType_t blink; UBaseType_t ctrl_shoot; UBaseType_t ai; + UBaseType_t vofa; } stack_water_mark; /* 各任务运行频率 */ @@ -112,6 +116,7 @@ typedef struct { float blink; float ctrl_shoot; float ai; + float vofa; } freq; /* 任务最近运行时间 */ @@ -123,6 +128,7 @@ typedef struct { float blink; float ctrl_shoot; float ai; + float vofa; } last_up_time; } Task_Runtime_t; @@ -140,6 +146,7 @@ extern const osThreadAttr_t attr_monitor; extern const osThreadAttr_t attr_blink; extern const osThreadAttr_t attr_ctrl_shoot; extern const osThreadAttr_t attr_ai; +extern const osThreadAttr_t attr_vofa; /* 任务函数声明 */ void Task_Init(void *argument); @@ -151,6 +158,7 @@ void Task_monitor(void *argument); void Task_blink(void *argument); void Task_ctrl_shoot(void *argument); void Task_ai(void *argument); +void Task_vofa(void *argument); #ifdef __cplusplus } diff --git a/User/task/vofa.c b/User/task/vofa.c new file mode 100644 index 0000000..99438a9 --- /dev/null +++ b/User/task/vofa.c @@ -0,0 +1,44 @@ +/* + vofa Task + +*/ + +/* Includes ----------------------------------------------------------------- */ +#include "task/user_task.h" +/* USER INCLUDE BEGIN */ + +/* USER INCLUDE END */ + +/* Private typedef ---------------------------------------------------------- */ +/* Private define ----------------------------------------------------------- */ +/* Private macro ------------------------------------------------------------ */ +/* Private variables -------------------------------------------------------- */ +/* USER STRUCT BEGIN */ + +/* USER STRUCT END */ + +/* Private function --------------------------------------------------------- */ +/* Exported functions ------------------------------------------------------- */ +void Task_vofa(void *argument) { + (void)argument; /* 未使用argument,消除警告 */ + + + /* 计算任务运行到指定频率需要等待的tick数 */ + const uint32_t delay_tick = osKernelGetTickFreq() / VOFA_FREQ; + + osDelay(VOFA_INIT_DELAY); /* 延时一段时间再开启任务 */ + + uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计时 */ + /* USER CODE INIT BEGIN */ + + /* USER CODE INIT END */ + + while (1) { + tick += delay_tick; /* 计算下一个唤醒时刻 */ + /* USER CODE BEGIN */ + + /* USER CODE END */ + osDelayUntil(tick); /* 运行结束,等待下一次唤醒 */ + } + +} \ No newline at end of file