新手上路
- 积分
- 32
- 金钱
- 32
- 注册时间
- 2021-11-30
- 在线时间
- 20 小时
|

楼主 |
发表于 2021-12-15 11:31:57
|
显示全部楼层
void USART1_IRQHandler(void)
{
u8 rec_data ;
u16 my_chk=0;
u16 rec_chk=0;
//HAL_UART_IRQHandler(&UART1_Handler);
#if SYSTEM_SUPPORT_OS //使用OS
OSIntEnter();
#endif
if((__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_RXNE)!=RESET)) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
rec_data=USART1->DR;
if(USART_RX_Count==0)
{
if(rec_data==0xC1) //帧头C1
{
USART_RX_Count++;
USART_RX_BUF[USART_RX_Count]=rec_data;
}
}
else if(USART_RX_Count==1)
{
if(rec_data==0xD2)
//帧头D2
{
USART_RX_Count++;
USART_RX_BUF[USART_RX_Count]=rec_data;
}
else
{
USART_RX_Count=0;
}
}
else if(USART_RX_Count==2)
{
if(rec_data==0x01) //功能字 0x01
USART_RX_BUF[USART_RX_Count]=rec_data;
USART_RX_Count++;
}
else if(USART_RX_Count==3) //获取数据长度1字节
{
USART_RX_BUF[USART_RX_Count]=rec_data;
USART_Length=rec_data;
USART_RX_Count++;
}
else if( (3 <USART_RX_Count<USART_Length+4)&& (USART_Length<50) )
{
USART_RX_BUF[USART_RX_Count]=rec_data;
USART_RX_Count++;
}
else if(USART_RX_Count==USART_Length+4) //开始计算校验和
{
USART_RX_BUF[USART_RX_Count]=rec_data;
for(u8 i=0 ;i<USART_Length+4;i++)
{
my_chk+= USART_RX_BUF;
}
rec_chk = rec_data; //接收到第一个字节校验和
USART_RX_Count++;
}
else if(USART_RX_Count==USART_Length+5)
{
USART_RX_BUF[USART_RX_Count]=rec_data;
rec_chk= (rec_chk <<8) + rec_data; //合并校验和 高位在前发送,地位在后发送
if( rec_chk!=my_chk)
{
USART_RX_Count=0;
}
else
{
//校验和正确后 取前面8字节数据 ,分别为x轴坐标值,y轴坐标值,z轴坐标值,speed 值
Compu_x=(short) ((USART_RX_BUF[4] <<8)+ USART_RX_BUF[5]);
Compu_y= (short) ((USART_RX_BUF[8] <<8)+ USART_RX_BUF[9]);
Compu_speed=(short)((USART_RX_BUF[10] <<8)+ USART_RX_BUF[11]);
USART_RX_Count++;
}
}
}
else if(USART_RX_Count==USART_Length+6) //帧结束1 0xE3
{
if( rec_data==0xE3)
{
USART_RX_BUF[USART_RX_Count]=rec_data;
USART_RX_Count++;
}
else
{
USART_RX_Count=0;
}
}
else if(USART_RX_Count==USART_Length+7) //帧结束2 0xF4
{
if( rec_data==0xF4)
{
USART_RX_BUF[USART_RX_Count]=rec_data;
USART_ReceiveOK=1;
}
USART_RX_Count=0;
USART_Length=0;
}
else
{
USART_RX_Count=0;
USART_Length=0;
}
HAL_UART_IRQHandler(&UART1_Handler);
}
还是没啥反应啊 |
|