Files
foc_Gimbal/APP/Usart1.c

114 lines
2.9 KiB
C

//
// Created by hu123456 on 2024/2/20.
//
#include "Usart1.h"
#include "stdio.h"
#include <stdlib.h>
#if USART_EN_RX
uint16_t g_usart_rx_sta = 0;
uint8_t g_usart_rx_buf[USART_REC_LEN];
uint8_t g_rx_buffer[RXBUFFERSIZE];
void set_pid();
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
if((g_usart_rx_sta & 0x8000) == 0)
{
if(g_usart_rx_sta & 0x4000)
{
if(g_rx_buffer[0] != 0x0a)
{
g_usart_rx_sta = 0;
}
else
{
g_usart_rx_sta |= 0x8000;
}
}
else
{
if(g_rx_buffer[0] == 0x0d)
{
g_usart_rx_sta |= 0x4000;
}
else
{
g_usart_rx_buf[g_usart_rx_sta & 0X3FFF] = g_rx_buffer[0] ;
g_usart_rx_sta++;
if(g_usart_rx_sta > (USART_REC_LEN - 1))
{
g_usart_rx_sta = 0;
}
}
}
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)g_rx_buffer, RXBUFFERSIZE);
}
}
#endif
//xzp1.16
void commander_run(void)
{
if((g_usart_rx_sta&0x8000)!=0)
{
switch(g_usart_rx_buf[0])
{
case 'H':
printf("Hello World!\r\n");
break;
case 'x': //T6.28
set_pid();
break;
case 'y':
set_pid();
break;
}
g_usart_rx_sta=0;
}
}
void set_pid()
{
float a =0;
if(g_usart_rx_buf[1] == 'z')
{
switch (g_usart_rx_buf[2])
{
case 'p':
a = atof((const char *) (g_usart_rx_buf + 3));
printf("xzp:%f\r\n",a);
break;
case 'i':
FOCStruct_X.ZT_KI = atof((const char *) (g_usart_rx_buf + 3));
printf("xzi:%f\r\n",FOCStruct_X.ZT_KP);
break;
case 'd':
FOCStruct_X.ZT_KD = atof((const char *) (g_usart_rx_buf + 3));
printf("xzd:%f\r\n",FOCStruct_X.ZT_KP);
break;
}
}
else
{
switch (g_usart_rx_buf[2])
{
case 'p':
FOCStruct_X.V_KP = atof((const char *) (g_usart_rx_buf + 3));
printf("xvp:%f\r\n",FOCStruct_X.ZT_KP);
break;
case 'i':
FOCStruct_X.V_KI = atof((const char *) (g_usart_rx_buf + 3));
printf("xvi:%f\r\n",FOCStruct_X.ZT_KP);
break;
case 'd':
FOCStruct_X.V_KD = atof((const char *) (g_usart_rx_buf + 3));
printf("xvd:%f\r\n",FOCStruct_X.ZT_KP);
break;
}
}
}