#ifndef __USRATX_H #define __USRATX_H #include "stdio.h" #include "sys.h" #include "system.h" #define DATA_STK_SIZE 512 #define DATA_TASK_PRIO 4 #define FRAME_HEADER 0X7B //Frame_header //֡ͷ #define FRAME_TAIL 0X7D //Frame_tail //֡β //Frame grew 24 -> 44: appended session_id(4) + two 64-bit sample //timestamps(8+8) before the checksum/tail. Bytes 0..21 keep the legacy //layout so old parsers stay compatible; new fields live in the tail. //֡�� 24 -> 44����У��/֡βǰ׷���� session_id(4) �������� 64λ����ʱ���(8+8)�� //�ֽ� 0..21 ���ֽ�ϲ��֣��¾ֽ���β���� #define SEND_DATA_SIZE 44 #define RECEIVE_DATA_SIZE 11 /*****A structure for storing triaxial data of a gyroscope accelerometer*****/ /*****���ڴ�������Ǽ��ٶȼ��������ݵĽṹ��*********************************/ typedef struct __Mpu6050_Data_ { short X_data; //2 bytes //2���ֽ� short Y_data; //2 bytes //2���ֽ� short Z_data; //2 bytes //2���ֽ� }Mpu6050_Data; /*******The structure of the serial port sending data************/ /*******���ڷ������ݵĽṹ��*************************************/ typedef struct _SEND_DATA_ { unsigned char buffer[SEND_DATA_SIZE]; struct _Sensor_Str_ { unsigned char Frame_Header; //1���ֽ� short X_speed; //2 bytes //2���ֽ� short Y_speed; //2 bytes //2���ֽ� short Z_speed; //2 bytes //2���ֽ� short Power_Voltage; //2 bytes //2���ֽ� Mpu6050_Data Accelerometer; //6 bytes //6���ֽ� Mpu6050_Data Gyroscope; //6 bytes //6���ֽ� unsigned int Session_Id; //4 bytes: MCU boot session ID //��MCU�����ỰID unsigned long long Speed_Time_us; //8 bytes: encoder sample time //�������������ʱ�� unsigned long long Imu_Time_us; //8 bytes: IMU sample time //IMU����ʱ�� unsigned char Frame_Tail; //1 bytes //1���ֽ� }Sensor_Str; }SEND_DATA; typedef struct _RECEIVE_DATA_ { unsigned char buffer[RECEIVE_DATA_SIZE]; struct _Control_Str_ { unsigned char Frame_Header; //1 bytes //1���ֽ� float X_speed; //4 bytes //4���ֽ� float Y_speed; //4 bytes //4���ֽ� float Z_speed; //4 bytes //4���ֽ� unsigned char Frame_Tail; //1 bytes //1���ֽ� }Control_Str; }RECEIVE_DATA; //Sample timestamps captured at acquisition time by their owning tasks, and //the per-boot session ID. Read by data_transition() when packing the frame. //�ɸ��Բɼ��������ڲ���˲�����¼������ʱ���������ϵͳ���лỰID�� //�� data_transition() ���֡ʱ��ȡ�� extern volatile unsigned long long g_speed_sample_time_us; extern volatile unsigned long long g_imu_sample_time_us; extern volatile unsigned int g_session_id; void data_task(void *pvParameters); void data_transition(void); void USART1_SEND(void); void USART3_SEND(void); void USART5_SEND(void); void CAN_SEND(void); void uart1_init(u32 bound); void uart2_init(u32 bound); void uart3_init(u32 bound); void uart3_dma_tx_init(void); void uart5_init(u32 bound); int USART1_IRQHandler(void); int USART2_IRQHandler(void); int USART3_IRQHandler(void); int UART5_IRQHandler(void); float Vz_to_Akm_Angle(float Vx, float Vz); float XYZ_Target_Speed_transition(u8 High,u8 Low); void usart1_send(u8 data); void usart2_send(u8 data); void usart3_send(u8 data); void usart5_send(u8 data); u8 Check_Sum(unsigned char Count_Number,unsigned char Mode); #endif