|
楼主
查看: 2578回复: 4
发表于 2022-11-2 10:56:24
只看该作者
中断服务函数
extern float Buffer_P,Buffer_I,Buffer_D,Buffer_aim;
void USART1_IRQHandler(void)
{
static uint8_t id_arr_temp[28];
static uint8_t id_arr[28];
static uint8_t i=0;
static uint8_t ReBuff;
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
ReBuff = USART_ReceiveData(USART1);
if(ReBuff=='[') i=0;
id_arr_temp[i]=ReBuff;
i++;
if(i==10&&id_arr_temp[1]=='A'&&id_arr_temp[9]==']')
{
for(i=0;i<9;i++)
id_arr[i]=id_arr_temp[i]-'0';
if(i==9)
{
Buffer_aim=id_arr[3]*100+id_arr[4]*10+id_arr[5]+id_arr[7]*0.1+id_arr[8]*0.01;
Angle.aim=Buffer_aim;
//printf("%.2f\n",Buffer_aim);
}
}
else if(i==28&&id_arr_temp[1]=='P'&&id_arr_temp[27]==']')
{
for(i=0;i<28;i++)
id_arr[i]=id_arr_temp[i]-'0';
if(i==28)
{
Buffer_P=id_arr[3]*100+id_arr[4]*10+id_arr[5]+id_arr[7]*0.1+id_arr[8]*0.01;
Buffer_I=id_arr[12]*100+id_arr[13]*10+id_arr[14]+id_arr[16]*0.1+id_arr[17]*0.01;
Buffer_D=id_arr[21]*100+id_arr[22]*10+id_arr[23]+id_arr[25]*0.1+id_arr[26]*0.01;
//printf("%.2f,%.2f,%.2f\n",Buffer_P,Buffer_I,Buffer_D);
Speed.Kp=Buffer_P;
Speed.Ki=Buffer_I;
Speed.Kd=Buffer_D;
}
}
}
}
串口发送
[P=900.00 I=009.00 D=000.00]
即可改变PID的值 |
|