遥控器控制电机转动,队列用法还没实现
This commit is contained in:
@@ -28,9 +28,12 @@
|
||||
#include "bsp_can.h"
|
||||
#include "CAN_receive.h"
|
||||
#include "chassis_control.h"
|
||||
#include "bsp_rc.h"
|
||||
#include "remote_control.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
typedef StaticQueue_t osStaticMessageQDef_t;
|
||||
/* USER CODE BEGIN PTD */
|
||||
|
||||
/* USER CODE END PTD */
|
||||
@@ -63,6 +66,24 @@ const osThreadAttr_t Chassis_Control_attributes = {
|
||||
.stack_size = 128 * 4,
|
||||
.priority = (osPriority_t) osPriorityNormal,
|
||||
};
|
||||
/* Definitions for Command_Task */
|
||||
osThreadId_t Command_TaskHandle;
|
||||
const osThreadAttr_t Command_Task_attributes = {
|
||||
.name = "Command_Task",
|
||||
.stack_size = 128 * 4,
|
||||
.priority = (osPriority_t) osPriorityNormal,
|
||||
};
|
||||
/* Definitions for chassis_speed_queue */
|
||||
osMessageQueueId_t chassis_speed_queueHandle;
|
||||
uint8_t chassis_speed_queueBuffer[ 5 * sizeof( uint16_t ) ];
|
||||
osStaticMessageQDef_t chassis_speed_queueControlBlock;
|
||||
const osMessageQueueAttr_t chassis_speed_queue_attributes = {
|
||||
.name = "chassis_speed_queue",
|
||||
.cb_mem = &chassis_speed_queueControlBlock,
|
||||
.cb_size = sizeof(chassis_speed_queueControlBlock),
|
||||
.mq_mem = &chassis_speed_queueBuffer,
|
||||
.mq_size = sizeof(chassis_speed_queueBuffer)
|
||||
};
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
/* USER CODE BEGIN FunctionPrototypes */
|
||||
@@ -71,6 +92,7 @@ const osThreadAttr_t Chassis_Control_attributes = {
|
||||
|
||||
void StartCAN_Receive_Task(void *argument);
|
||||
void StartChassis_Control_Task(void *argument);
|
||||
void StartCommand_Task(void *argument);
|
||||
|
||||
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
|
||||
|
||||
@@ -96,6 +118,10 @@ void MX_FREERTOS_Init(void) {
|
||||
/* start timers, add new ones, ... */
|
||||
/* USER CODE END RTOS_TIMERS */
|
||||
|
||||
/* Create the queue(s) */
|
||||
/* creation of chassis_speed_queue */
|
||||
chassis_speed_queueHandle = osMessageQueueNew (5, sizeof(uint16_t), &chassis_speed_queue_attributes);
|
||||
|
||||
/* USER CODE BEGIN RTOS_QUEUES */
|
||||
/* add queues, ... */
|
||||
/* USER CODE END RTOS_QUEUES */
|
||||
@@ -107,6 +133,9 @@ void MX_FREERTOS_Init(void) {
|
||||
/* creation of Chassis_Control */
|
||||
Chassis_ControlHandle = osThreadNew(StartChassis_Control_Task, NULL, &Chassis_Control_attributes);
|
||||
|
||||
/* creation of Command_Task */
|
||||
Command_TaskHandle = osThreadNew(StartCommand_Task, NULL, &Command_Task_attributes);
|
||||
|
||||
/* USER CODE BEGIN RTOS_THREADS */
|
||||
/* add threads, ... */
|
||||
/* USER CODE END RTOS_THREADS */
|
||||
@@ -147,18 +176,49 @@ void StartChassis_Control_Task(void *argument)
|
||||
{
|
||||
/* USER CODE BEGIN StartChassis_Control_Task */
|
||||
chassis_control_init();
|
||||
chassis_set_speed(100, 0, 0, 0);
|
||||
int16_t speed = 0;
|
||||
/* Infinite loop */
|
||||
for(;;)
|
||||
{
|
||||
chassis_control_task();//电机控制
|
||||
if (osMessageQueueGet(chassis_speed_queueHandle, &speed, NULL, 0) == osOK)
|
||||
{
|
||||
chassis_set_speed(speed, 0, 0, 0);
|
||||
}
|
||||
chassis_control_task();
|
||||
osDelay(1);
|
||||
}
|
||||
/* USER CODE END StartChassis_Control_Task */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN Header_StartCommand_Task */
|
||||
/**
|
||||
* @brief Function implementing the Command_Task thread.
|
||||
* @param argument: Not used
|
||||
* @retval None
|
||||
*/
|
||||
/* USER CODE END Header_StartCommand_Task */
|
||||
void StartCommand_Task(void *argument)
|
||||
{
|
||||
/* USER CODE BEGIN StartCommand_Task */
|
||||
remote_control_init();
|
||||
const RC_ctrl_t *rc;
|
||||
int16_t speed;
|
||||
/* Infinite loop */
|
||||
for(;;)
|
||||
{
|
||||
rc = get_remote_control_point();//rc=获取遥控器数据
|
||||
speed = (int16_t)((float)rc->rc.ch[3] * 5000.0f / 660.0f);//根据通道三的值,映射到-5000到5000之间
|
||||
if (speed > 5000)
|
||||
speed = 5000;
|
||||
if (speed < -5000)
|
||||
speed = -5000;
|
||||
osMessageQueuePut(chassis_speed_queueHandle, &speed, 0, 0);
|
||||
osDelay(10);
|
||||
}
|
||||
/* USER CODE END StartCommand_Task */
|
||||
}
|
||||
|
||||
/* Private application code --------------------------------------------------*/
|
||||
/* USER CODE BEGIN Application */
|
||||
|
||||
/* USER CODE END Application */
|
||||
|
||||
/* USER CODE END Application */
|
||||
Reference in New Issue
Block a user