#include "DataProc.h" #include #include "printf.h" #include "flash.h" #include "LCD.h" //SPIType SPI_Using = SPI_PORT1; //选择一个SPI接口 extern void IWDG_Feed(void); u8 CheckData_1356[10] = {0xD1,0xD1,0xE0,0xD0,0x00,0x00,0x00,0x00,0xD2,0xD2}; //13.56M接收数据 u8 GetNum_1356[5] = {0x00,0x00,0x00,0x00,0x00}; //13.56M缓存 static u8 ResNum_1356[5]; //13.56M缓存,用于回复A2 static u8 oldResNum_1356[5]; u8 uartSendData[100]; //最大包100个字节 u8 uartRecData[100]; //最大包100个字节 u8 uartSendRdNumData[100]; u8 uartSendWrNumOkData[100]; u8 uartSendConfigKaoQinData[100]; volatile u16 count; u16 count_num; u8 flag_1ms; u8 first_clear_flag; u8 HW_Open; u16 HW_OpenCount; u8 Flag_update; u8 WriteOKFlag=0; u8 protocol_config_flg; struct Protocol_send_data //通讯协议 发送 { u8 HeadFix; u8 Control; u8 Magic[4]; u8 SequenceID[4]; u8 Command; u8 Tag; u8 Length; u8 Value[6]; //最大值是6 u8 FootCRC[2]; //CRC 暂时固定为00 00 u8 FootFix; //固定为0xFB }; struct Protocol_rec_data //通讯协议 接收 { u8 HeadFix; u8 Control; u8 Magic[4]; u8 SequenceID[4]; u8 Command; u8 Tag; u8 Length; u8 Value[62]; //最大值是62 u8 FootCRC[2]; //CRC 暂时固定为00 00 u8 FootFix; //固定为0xFB }; //struct ReadNum_send_data //读号回复指令,长度 30Byte //{ // u8 HeadFix; // u8 Control; // u8 Magic[4]; // u8 SequenceID[4]; // u8 Command; // u8 Tag1; // u8 Length1; // u8 Value1[6]; //最大值是6 // u8 Tag2; // u8 Length2; // u8 Value2[6]; //最大值是6 // u8 FootCRC[2]; //CRC 暂时固定为00 00 // u8 FootFix; //固定为0xFB //}; struct ReadNum_send_data //读号回复指令,长度 22Byte { u8 HeadFix; u8 Control; u8 Magic[4]; u8 SequenceID[4]; u8 Command; u8 Tag1; u8 Length1; u8 Value1[6]; //最大值是6 u8 FootCRC[2]; //CRC 暂时固定为00 00 u8 FootFix; //固定为0xFB }; struct WrNumOk_send_data //写卡成功回复指令 { u8 HeadFix; u8 Control; u8 Magic[4]; u8 SequenceID[4]; u8 Command; u8 FootCRC[2]; //CRC 暂时固定为00 00 u8 FootFix; //固定为0xFB }; struct ConfigKaoQin_send_data { u8 HeadFix; //固定为0xFA u8 Control; // 1表示成功 u8 Magic[4]; u8 SequenceID[4]; u8 Command; // A8 u8 FootCRC[2]; //CRC 暂时固定为00 00 u8 FootFix; //固定为0xFB }; #define ReceiveBuf ((struct Protocol_rec_data *)&uartRecData[0]) #define SendBuf ((struct Protocol_send_data *)&uartSendData[0]) #define ConfigKaoQinBuf ((struct ConfigKaoQin_send_data *)&uartSendConfigKaoQinData[0]) #define WrNumOkBuf ((struct WrNumOk_send_data *)&uartSendWrNumOkData[0]) #define ReadNumBuf ((struct ReadNum_send_data *)&uartSendRdNumData[0]) #define CndRspBufferSize 100 unsigned char CmdRspBuffer[CndRspBufferSize]; unsigned char CmdRspBufferWr_Rx = 0; u8 idBuf[5]; //2.4G ID缓存空间 u16 count_A34; u8 idResA3Buf[5]; //2.4G ID缓存,用于回复A3 u8 ReadAttenID[5]; //2.4G 考勤卡ID u8 newIdFlag; //写2.4G ID标志 u8 recFlag; u8 rspFlag_A3; u8 read1356flag; unsigned char txBuf[32]="123456789123456789"; unsigned char txA3Buf[32]="123456789123456789"; unsigned char rspFlag = 0; //是否处理答题卡上电2.4G信息 标志 unsigned char wrNumFlag = 0;//写号是否完成标志 /**************************************************** 功能: 校验和 方法: sum = ~(data0+...+datan)+1; *****************************************************/ u8 CheckSum(u8 *buf,u8 len) { u8 sum = 0; u8 i; for(i = 0;i < len; i++) { sum += buf[i]; } sum = ~sum; sum += 1; return sum; } //void AT_AddNewRxByte(u8 c) //{ // if (c != 0x0D) // { // if (c < 32) return; // ignore control charcters // if (CmdRspBufferWr_Rx >= (CndRspBufferSize - 1)) return; // buffer overflow - ignore character // CmdRspBuffer[CmdRspBufferWr_Rx++] = c; // CmdRspBuffer[CmdRspBufferWr_Rx] = 0; // return; // } // //---------------------------------------------------- // // ID=XXXXX // if((CmdRspBuffer[0] == 'I')&&(CmdRspBuffer[1] == 'D')&&(CmdRspBuffer[2] == '=')) // { // memcpy(idBuf,&CmdRspBuffer[3],5); // SendConsoleStr("id="); // SendConsoleData(idBuf,5); // SendConsoleStr("\n"); // newIdFlag = 1; // } // else if((CmdRspBuffer[0] == 'I')&&(CmdRspBuffer[1] == 'D')&&(CmdRspBuffer[2] == '?')) // { // SendConsoleStr("id="); // SendConsoleData(idBuf,5); // SendConsoleStr("\n"); // } // memset(CmdRspBuffer,0,sizeof(CmdRspBuffer)); // CmdRspBufferWr_Rx = 0; //} void Data_Init(void) //包数据初始化 { SendBuf->HeadFix = 0xFA; //发送缓冲区初始化 SendBuf->Control = 0x10; SendBuf->Magic[0]= 0; SendBuf->Magic[1]= 0; SendBuf->Magic[2]= 0; SendBuf->Magic[3]= 0; SendBuf->SequenceID[0] = 0; SendBuf->SequenceID[1] = 0; SendBuf->SequenceID[2] = 0; SendBuf->SequenceID[3] = 0; SendBuf->FootCRC[0] = 0; SendBuf->FootCRC[1] = 0; SendBuf->FootFix = 0xFB; ReceiveBuf->HeadFix = 0xFA; //接收缓冲区初始化 ReceiveBuf->Control = 0x10; ReceiveBuf->Magic[0]= 0; ReceiveBuf->Magic[1]= 0; ReceiveBuf->Magic[2]= 0; ReceiveBuf->Magic[3]= 0; ReceiveBuf->SequenceID[0] = 0; ReceiveBuf->SequenceID[1] = 0; ReceiveBuf->SequenceID[2] = 0; ReceiveBuf->SequenceID[3] = 0; ReceiveBuf->FootCRC[0] = 0; ReceiveBuf->FootCRC[1] = 0; ReceiveBuf->FootFix = 0xFB; ConfigKaoQinBuf->HeadFix = 0xFA; //接收缓冲区初始化 ConfigKaoQinBuf->Control = 0x10; ConfigKaoQinBuf->Magic[0]= 0; ConfigKaoQinBuf->Magic[1]= 0; ConfigKaoQinBuf->Magic[2]= 0; ConfigKaoQinBuf->Magic[3]= 0; ConfigKaoQinBuf->SequenceID[0] = 0; ConfigKaoQinBuf->SequenceID[1] = 0; ConfigKaoQinBuf->SequenceID[2] = 0; ConfigKaoQinBuf->SequenceID[3] = 0; ConfigKaoQinBuf->FootCRC[0] = 0; ConfigKaoQinBuf->FootCRC[1] = 0; ConfigKaoQinBuf->FootFix = 0xFB; ReadNumBuf->HeadFix = 0xFA; //接收缓冲区初始化 ReadNumBuf->Control = 0x10; ReadNumBuf->Magic[0]= 0; ReadNumBuf->Magic[1]= 0; ReadNumBuf->Magic[2]= 0; ReadNumBuf->Magic[3]= 0; ReadNumBuf->SequenceID[0] = 0; ReadNumBuf->SequenceID[1] = 0; ReadNumBuf->SequenceID[2] = 0; ReadNumBuf->SequenceID[3] = 0; ReadNumBuf->FootCRC[0] = 0; ReadNumBuf->FootCRC[1] = 0; ReadNumBuf->FootFix = 0xFB; WrNumOkBuf->HeadFix = 0xFA; //接收缓冲区初始化 WrNumOkBuf->Control = 0x10; WrNumOkBuf->Magic[0]= 0; WrNumOkBuf->Magic[1]= 0; WrNumOkBuf->Magic[2]= 0; WrNumOkBuf->Magic[3]= 0; WrNumOkBuf->SequenceID[0] = 0; WrNumOkBuf->SequenceID[1] = 0; WrNumOkBuf->SequenceID[2] = 0; WrNumOkBuf->SequenceID[3] = 0; WrNumOkBuf->FootCRC[0] = 0; WrNumOkBuf->FootCRC[1] = 0; WrNumOkBuf->FootFix = 0xFB; } //void Usart1_Process(void) //{ // // if(USART1_RX_CNT==10 && USART1_RX_BUF[0]==0xd1 && USART1_RX_BUF[9]==0xd2) // { // USART1_REC_Status |= 0x8000; //收到ID设置命令,十进制10位ID // } // // // if(USART1_REC_Status & 0x8000) // { //// memcpy(idBuf,&USART1_RX_BUF[3],5); //把5位十进制ID号写到idBuf // idBuf[0]=0; // idBuf[1]=USART1_RX_BUF[4]; // idBuf[2]=USART1_RX_BUF[5]; // idBuf[3]=USART1_RX_BUF[6]; // idBuf[4]=USART1_RX_BUF[7]; //串口收到的ID号写入到idBuf缓冲区 // // SendConsoleStr("id="); // SendConsoleData(idBuf,5); // SendConsoleStr("\n"); // newIdFlag = 1; // // USART1_RX_CNT = 0; // USART1_REC_Status = 0; // } //} void DataProc_1356(void) { u32 dat1,dat2,dat3,dat4; u8 IdBuf[10]={0}; IWDG_Feed(); if(USART3_RX_CNT==10) { if(USART3_RX_BUF[0]==CheckData_1356[0] && USART3_RX_BUF[1]==CheckData_1356[1] && USART3_RX_BUF[8]==CheckData_1356[8] && USART3_RX_BUF[9]==CheckData_1356[9]) { USART3_REC_Status |= 0x8000; //串口3完成接收一帧数据 } else { memset(USART3_RX_BUF,0,20); } } if(USART3_REC_Status & 0x8000) { //写号清零防止对下一次写号造成影响 //delay_ms(1); #if 0 idBuf[0]=0; idBuf[1]=0; idBuf[2]=0; idBuf[3]=0; idBuf[4]=0; GetNum_1356[0]=0; GetNum_1356[1]=0; GetNum_1356[2]=0; GetNum_1356[3]=0; GetNum_1356[4]=0; idResA3Buf[0]=0; idResA3Buf[1]=0; idResA3Buf[2]=0; idResA3Buf[3]=0; idResA3Buf[4]=0; ReadAttenID[0]=0; ReadAttenID[1]=0; ReadAttenID[2]=0; ReadAttenID[3]=0; ReadAttenID[4]=0; #else memset(idBuf,0,5); memset(GetNum_1356,0,5); memset(idResA3Buf,0,5); memset(ReadAttenID,0,5); #endif // SendConsoleData(USART3_RX_BUF,10); // DegugPrintf(USART3_RX_BUF,10); // SendConsoleStr("\n"); //IWDG_Feed(); GetNum_1356[0]=0; GetNum_1356[1]=USART3_RX_BUF[4]; GetNum_1356[2]=USART3_RX_BUF[5]; GetNum_1356[3]=USART3_RX_BUF[6]; GetNum_1356[4]=USART3_RX_BUF[7]; //串口收到的ID号写入到idBuf缓冲区 ResNum_1356[0]=0; ResNum_1356[1]=GetNum_1356[1]; ResNum_1356[2]=GetNum_1356[2]; ResNum_1356[3]=GetNum_1356[3]; ResNum_1356[4]=GetNum_1356[4]; // NRF24L01_RX_Mode(SPI_SEND); // dat1 = (GetNum_1356[1]<<24); dat2 = (GetNum_1356[2]<<16); dat3 = (GetNum_1356[3]<<8); dat4 = dat1 + dat2 + dat3 + GetNum_1356[4]; #if LCD HexToDec(dat4,IdBuf,sizeof(IdBuf)); vDispClearLine(2); vDispStr(2,1,"13.56:",6); vDispStr(2,7,(char*)IdBuf,10); #endif read1356flag = 1; // printf("1356_0=%x\r\n",GetNum_1356[0]); // printf("1356_1=%x\r\n",GetNum_1356[1]); // printf("1356_2=%x\r\n",GetNum_1356[2]); // printf("1356_3=%x\r\n",GetNum_1356[3]); // printf("1356_4=%x\r\n",GetNum_1356[4]); // printf("\r\n读到13.56M卡号:%u\r\n",dat4); IWDG_Feed(); // idBuf[0]=GetNum_1356[0]; // idBuf[1]=GetNum_1356[1]; // idBuf[2]=GetNum_1356[2]; // idBuf[3]=GetNum_1356[3]; // idBuf[4]=GetNum_1356[4]; // delay_ms(100);delay_ms(100); //HW_Open = 1; //开关红外扫描枪 // newIdFlag = 1; //2.4G开始写号 // count = 0; //IWDG_Feed(); USART3_RX_CNT = 0; // USART3_REC_Status = 0; memset(USART3_RX_BUF,0,20); } } #if 0 void DataProc_RecNrf24L01(void) { u8 buffer[7]; u8 temp; u32 dat1,dat2,dat3,dat4; IWDG_Feed(); // if(WriteOKFlag==1) // { if(SPI2_IRQ == 0) { IWDG_Feed(); temp = NRF24L01_RxPacket(SPI_SEND,buffer); // printf("temp=%x\r\n",temp); // SendConsoleData(buffer,RX_PLOAD_WIDTH); idBuf[0] = 0; idBuf[1] = buffer[1]; idBuf[2] = buffer[2]; idBuf[3] = buffer[3]; idBuf[4] = buffer[4]; // if(idBuf[0]==GetNum_1356[0] && idBuf[1]==GetNum_1356[1] && idBuf[2]==GetNum_1356[2] && idBuf[3]==GetNum_1356[3] && idBuf[4]==GetNum_1356[4]) // { // recFlag = 2; //已写2.4G卡号 dat1 = idBuf[1]<<24; dat2 = idBuf[2]<<16; dat3 = idBuf[3]<<8; dat4 = dat1 + dat2 + dat3 + idBuf[4]; // if(WriteOKFlag) // printf("读到考勤ID=%u\r\n",dat4); delay_ms(10); // else // printf("已写号,读到考勤:%u\r\n",dat4); WriteOKFlag = 0; idBuf[0]=0; idBuf[1]=0; idBuf[2]=0; idBuf[3]=0; idBuf[4]=0; GetNum_1356[0]=0; GetNum_1356[1]=0; GetNum_1356[2]=0; GetNum_1356[3]=0; GetNum_1356[4]=0; // } // else // { //// printf("未写卡号!\r\n"); //// NRF24L01_RX_Mode(SPI_SEND); // IWDG_Feed(); // // WriteOKFlag = 0; // WriteFailFlag = 0; // idBuf[0] = 0; // idBuf[1] = 0; // idBuf[2] = 0; // idBuf[3] = 0; // idBuf[4] = 0; // GetNum_1356[0]=0; // GetNum_1356[1]=0; // GetNum_1356[2]=0; // GetNum_1356[3]=0; // GetNum_1356[4]=0; // // NRF24L01_TX_Mode(SPI_SEND); // } } } #else void DataProc_RecNrf24L01(void) { u8 tmp; u32 IdData; u8 IdBuf[10]={0}; //if(read1356flag) { NRF24L01_RX_Mode_NOACK(SPI_SEND,protocol_config_flg);//NOACK??,????? count_A34 = 0; { while(1) // { tmp = DataProc_A4_nrf(); if(tmp) break; } read1356flag = 0; #if LCD IdData =(ReadAttenID[1]<<24)|(ReadAttenID[2]<<16)|(ReadAttenID[3]<<8)|(ReadAttenID[4]); HexToDec(IdData,IdBuf,sizeof(IdBuf)); vDispClearLine(3); vDispStr(3,1,"ID:",3); vDispStr(3,4,(char*)IdBuf,10); if((ReadAttenID[0] & 0x80) !=0) { vDispStr(3,15,"1",1); } else { vDispStr(3,15,"0",1); } #endif SendConsoleData((char*)uartSendRdNumData,22); //回显,返回给PC端 delay_ms(50); DegugPrintf(uartSendRdNumData,22); SendUSART2Str("\n"); #if LCD if(ResNum_1356[0] ==ReadAttenID[0] &&ResNum_1356[1] ==ReadAttenID[1] && ResNum_1356[2] ==ReadAttenID[2] &&ResNum_1356[3] ==ReadAttenID[3] && ResNum_1356[4] ==ReadAttenID[4]) { vDispClearLine(4); vDispStr(4,4,"OK",2); } else { vDispClearLine(4); vDispStr(4,4,"NG",2); } #endif //写号清零防止对下一次写号造成影响 ReadAttenID[0]=0; ReadAttenID[1]=0; ReadAttenID[2]=0; ReadAttenID[3]=0; ReadAttenID[4]=0; ResNum_1356[0]=0; ResNum_1356[1]=0; ResNum_1356[2]=0; ResNum_1356[3]=0; ResNum_1356[4]=0; GetNum_1356[0]=0; GetNum_1356[1]=0; GetNum_1356[2]=0; GetNum_1356[3]=0; GetNum_1356[4]=0; } } } #endif void DataProc_Nrf24l01_SPI2(void) { u8 buffer[32]; u8 temp; //u32 dat1,dat2,dat3,dat4,cardid; IWDG_Feed(); if(newIdFlag==1) { newIdFlag = 0; txBuf[0] = 0xfc; txBuf[1] = 0x11; // if(idBuf[0]==GetNum_1356[0] && idBuf[1]==GetNum_1356[1] && idBuf[2]==GetNum_1356[2] && idBuf[3]==GetNum_1356[3] && idBuf[4]==GetNum_1356[4]) // { txBuf[2] = idBuf[0]; txBuf[3] = idBuf[1]; txBuf[4] = idBuf[2]; txBuf[5] = idBuf[3]; txBuf[6] = idBuf[4]; // } txBuf[7] = CheckSum(txBuf,7); //写号到txBuf SPI2_CE =0; NRF24L01_Write_Reg(SPI_SEND,FLUSH_TX,0xff);//清除TX FIFO寄存器 NRF24L01_Write_Buf(SPI_SEND,W_ACK_PAYLOAD,txBuf,8); //写数据到TX BUF 8个字节,自动发送 NRF24L01_RX_Mode(SPI_SEND); //设置24L01为接收模式 rspFlag = 1; count=0; IWDG_Feed(); } if(rspFlag) //处理答题卡上电发送的数据 { IWDG_Feed(); if(count<=2000) //2S内未收到2.4G回复信号,则rspFlag失效 { if(SPI2_IRQ == 0) //24L01收到答题卡上电发送的数据 { IWDG_Feed(); temp = NRF24L01_RxPacket(SPI_SEND,buffer); // SendConsoleByte(temp); if((temp&0x40)==0x40) //接收到的数据显示 { buffer[RX_PLOAD_WIDTH]='\0'; led0=~led0; // SendConsoleData(buffer,RX_PLOAD_WIDTH); // if((buffer[1]==idBuf[0])&& (buffer[2]==idBuf[1])&&(buffer[3]==idBuf[2])&&(buffer[4]==idBuf[3])&&(buffer[5]==idBuf[4])) //收到改写后编号 { // if((buffer[1]==GetNum_1356[0])&& (buffer[2]==GetNum_1356[1])&&(buffer[3]==GetNum_1356[2])&&(buffer[4]==GetNum_1356[3])&&(buffer[5]==GetNum_1356[4])) // { if(rspFlag == 1) { rspFlag++; txBuf[1] = 0x12; ///0xfc + cmd(0x12) +id +crc ----cmd=0x12 确认 txBuf[7] = CheckSum(txBuf,7); //写号到txBuf NRF24L01_Write_Buf(SPI_SEND,W_ACK_PAYLOAD,txBuf,8); //写数据到TX BUF 8个字节,自动发送 } else { rspFlag=0; //如果ID已经是最新,rspFlag清零,不处理接收数据 count = 0; //计数清零 idBuf[0]=0; WrNumOkBuf->Control = 0x10; //写号完成 SendConsoleData((char*)uartSendWrNumOkData,14); //回显,返回给PC端 DegugPrintf(uartSendWrNumOkData,14); SendUSART2Str("\n"); //dat1 = (idBuf[1]<<24); //dat2 = (idBuf[2]<<16); //dat3 = (idBuf[3]<<8); //dat4 = idBuf[4]; //cardid = dat1 + dat2 + dat3 + dat4; // printf("写号完成!卡号:%u\r\n",cardid); //NRF24L01_RX_Mode_NOACK(SPI_SEND);//读考勤 #if APP NRF24L01_RX_Mode_NOACK(SPI_SEND,protocol_config_flg);//??? #else NRF24L01_RX_Mode_NOACK(SPI_SEND);//读考勤 #endif WriteOKFlag = 1; } // } } else { SPI2_CE =0; txBuf[1] = 0x11; txBuf[7] = CheckSum(txBuf,7); //写号到txBuf NRF24L01_Write_Buf(SPI_SEND,W_ACK_PAYLOAD,txBuf,8); //写数据到TX BUF 8个字节 SPI2_CE =1; } } } } else //2s超时回复 { IWDG_Feed(); rspFlag=0; //如果ID已经是最新,rspFlag清零,不处理接收数据 count = 0; //计数清零 idBuf[0]=0; idBuf[1]=0; idBuf[2]=0; idBuf[3]=0; idBuf[4]=0; GetNum_1356[0]=0; GetNum_1356[1]=0; GetNum_1356[2]=0; GetNum_1356[3]=0; GetNum_1356[4]=0; WrNumOkBuf->Control = 0x30; //错误 SendConsoleData((char*)uartSendWrNumOkData,14); //回显,返回给PC端 DegugPrintf(uartSendWrNumOkData,14); SendUSART2Str("\n"); // printf("写号失败:超时!\r\n"); // NRF24L01_RX_Mode_NOACK(SPI_SEND);//读考勤 } } } u8 DataProc_A0_WriteNum_SPI2(void) { u8 temp; u8 buffer[32]; if(newIdFlag==1) { newIdFlag = 0; txBuf[0] = 0xfc; txBuf[1] = 0x11; txBuf[2] = idBuf[0]; txBuf[3] = idBuf[1]; txBuf[4] = idBuf[2]; txBuf[5] = idBuf[3]; txBuf[6] = idBuf[4]; txBuf[7] = CheckSum(txBuf,7); //写号到txBuf SPI2_CE =0; NRF24L01_Write_Reg(SPI_SEND,FLUSH_TX,0xff);//清除TX FIFO寄存器 NRF24L01_Write_Buf(SPI_SEND,W_ACK_PAYLOAD,txBuf,8); //写数据到TX BUF 8个字节,自动发送 NRF24L01_RX_Mode(SPI_SEND); //设置24L01为接收模式 SPI2_CE =1; rspFlag = 1; count=0; IWDG_Feed(); } if(count<=3000) { IWDG_Feed(); if(SPI2_IRQ == 0) //24L01收到答题卡上电发送的数据 { IWDG_Feed(); temp = NRF24L01_RxPacket(SPI_SEND,buffer); SendUSART2Byte(temp); SendUSART2Str("\n"); if((temp&0x40)==0x40) //接收到的数据显示 { buffer[RX_PLOAD_WIDTH]='\0'; DegugPrintf(buffer,7); SendUSART2Str("\n"); if((buffer[1]==idBuf[0])&& (buffer[2]==idBuf[1])&&(buffer[3]==idBuf[2])&&(buffer[4]==idBuf[3])&&(buffer[5]==idBuf[4])) //收到改写后编号 { if(rspFlag == 1) { rspFlag++; txBuf[1] = 0x12; ///0xfc + cmd(0x12) +id +crc ----cmd=0x12 确认 txBuf[7] = CheckSum(txBuf,7); //写号到txBuf SPI2_CE =0; NRF24L01_Write_Buf(SPI_SEND,W_ACK_PAYLOAD,txBuf,8); //写数据到TX BUF 8个字节,自动发送 SPI2_CE =1; } else { rspFlag=0; //如果ID已经是最新,rspFlag清零,不处理接收数据 DegugPrintf(uartSendWrNumOkData,14); SendUSART2Str("\n"); //NRF24L01_RX_Mode_NOACK(SPI_SEND);//读考勤 #if APP NRF24L01_RX_Mode_NOACK(SPI_SEND,protocol_config_flg);//??? #else NRF24L01_RX_Mode_NOACK(SPI_SEND);//读考勤 #endif WrNumOkBuf->Control = 0x10; //写号完成 SendConsoleData((char*)uartSendWrNumOkData,14); //回显,返回给PC端 SendUSART2Str("OK\n"); return 1; } } else { SPI2_CE =0; txBuf[1] = 0x11; txBuf[7] = CheckSum(txBuf,7); //写号到txBuf NRF24L01_Write_Buf(SPI_SEND,W_ACK_PAYLOAD,txBuf,8); //写数据到TX BUF 8个字节 SPI2_CE =1; } } } } else { idBuf[0] = 0; idBuf[1] = 0x00; idBuf[2] = 0x00; idBuf[3] = 0x00; idBuf[4] = 0x00; ReadAttenID[0]=0; ReadAttenID[1]=0; ReadAttenID[2]=0; ReadAttenID[3]=0; ReadAttenID[4]=0; ResNum_1356[0]=0; ResNum_1356[1]=0; ResNum_1356[2]=0; ResNum_1356[3]=0; ResNum_1356[4]=0; GetNum_1356[0]=0; GetNum_1356[1]=0; GetNum_1356[2]=0; GetNum_1356[3]=0; GetNum_1356[4]=0; WrNumOkBuf->Control = 0x30; //写号失败 SendConsoleData((char*)uartSendWrNumOkData,14); //回显,返回给PC端 // USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开始串口1接收中断 SendUSART2Str("3000\n"); return 1; } IWDG_Feed(); return 0; } u8 DataProc_A3_nrf(void) { u8 temp; u8 buffer[32]; if(rspFlag_A3) { rspFlag_A3=0; SPI2_CE = 0; NRF24L01_Write_Reg(SPI_SEND,FLUSH_TX,0xff);//清除TX FIFO寄存器 NRF24L01_Write_Buf(SPI_SEND,W_ACK_PAYLOAD,txA3Buf,8); //写数据到TX BUF 8个字节,自动发送 NRF24L01_RX_Mode(SPI_SEND); //设置24L01为接收模式 SPI2_CE = 1; } if(count_A34<1500) { if(SPI2_IRQ == 0) //24L01收到答题卡上电发送的数据 { IWDG_Feed(); temp = NRF24L01_RxPacket(SPI_SEND,buffer); if((temp&0x40)==0x40) //接收到的数据显示 { buffer[RX_PLOAD_WIDTH]='\0'; DegugPrintf(buffer,7); SendUSART2Str("\n"); if((buffer[1]==0)&& (buffer[2]==0)&&(buffer[3]==0)&&(buffer[4]==0)&&(buffer[5]==0)) //未写卡号 { idResA3Buf[0] = 0; idResA3Buf[1] = 0; idResA3Buf[2] = 0; idResA3Buf[3] = 0; idResA3Buf[4] = 0; // USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开始串口1接收中断 return 1; } else { idResA3Buf[0] = buffer[1]; idResA3Buf[1] = buffer[2]; idResA3Buf[2] = buffer[3]; idResA3Buf[3] = buffer[4]; idResA3Buf[4] = buffer[5]; // USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开始串口1接收中断 return 1; } } } IWDG_Feed(); } else { idResA3Buf[0] = 0; idResA3Buf[1] = 0x00; idResA3Buf[2] = 0x00; idResA3Buf[3] = 0x00; idResA3Buf[4] = 0x00; // USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开始串口1接收中断 return 1; } return 0; } u8 DataProc_A4_nrf(void) { u8 temp; u8 buffer[32]; if(count_A34<3000) { if(SPI2_IRQ == 0) //24L01收到答题卡上电发送的数据 { IWDG_Feed(); temp = NRF24L01_RxPacket(SPI_SEND,buffer); if((temp&0x40)==0x40) //接收到的数据显示 { buffer[RX_PLOAD_WIDTH]='\0'; //DegugPrintf(buffer,7); //SendUSART2Str("\n"); //SendConsoleData(buffer,32); //回显,返回给PC端 if((buffer[1]==0)&& (buffer[2]==0)&&(buffer[3]==0)) //未写考勤 { ReadAttenID[0] = 0; ReadAttenID[1] = 0; ReadAttenID[2] = 0; ReadAttenID[3] = 0; ReadAttenID[4] = 0; return 1; } else { if((protocol_config_flg == 7)||(protocol_config_flg == 13)) { ReadAttenID[0] = 0; ReadAttenID[1] = buffer[0]; ReadAttenID[2] = buffer[1]; ReadAttenID[3] = buffer[2]; ReadAttenID[4] = buffer[3]; } else if((protocol_config_flg == 8)) { ReadAttenID[0] = buffer[1]; ReadAttenID[1] = buffer[2]; ReadAttenID[2] = buffer[3]; ReadAttenID[3] = buffer[4]; ReadAttenID[4] = buffer[5]; } else if((protocol_config_flg == 9)||(protocol_config_flg == 14)) { ReadAttenID[0] = 0; ReadAttenID[1] = (buffer[1]^0x53); ReadAttenID[2] = (buffer[2]^0x43); ReadAttenID[3] = (buffer[3]^0x44); ReadAttenID[4] = (buffer[4]^0x58); } else if(protocol_config_flg == 20) { ReadAttenID[0] = 0; ReadAttenID[1] = buffer[4]; ReadAttenID[2] = buffer[5]; ReadAttenID[3] = buffer[6]; ReadAttenID[4] = buffer[7]; } else { ReadAttenID[0] = 0; ReadAttenID[1] = buffer[1]; ReadAttenID[2] = buffer[2]; ReadAttenID[3] = buffer[3]; ReadAttenID[4] = buffer[4]; } return 1; } } } IWDG_Feed(); } else { ReadAttenID[0] = 0; ReadAttenID[1] = 0; ReadAttenID[2] = 0; ReadAttenID[3] = 0; ReadAttenID[4] = 0; return 1; } return 0; } void DataProc_USART1(void) { // u8 i; // u16 reclen; // u32 IdData; // u8 IdBuf[10]={0}; IWDG_Feed(); if(USART1_RX_CNT==8 && USART1_RX_BUF[0]=='u' && USART1_RX_BUF[1]=='p' && USART1_RX_BUF[2]=='d' && USART1_RX_BUF[3]=='a' && USART1_RX_BUF[4]=='t' && USART1_RX_BUF[5]=='e' ) { USART1_RX_CNT =0; NVIC_SystemReset(); //系统复位 } if(USART1_RX_BUF[0]!='u' && USART1_RX_BUF[0]!=0xFA) { USART1_RX_CNT =0; return; } if(USART1_RX_CNT < 14) { return; } if(USART1_RX_BUF[USART1_RX_CNT-1] != 0xFB) { return; } if(USART1_RX_BUF[10]==0xA0 && USART1_RX_CNT != 21) { return; } if(USART1_RX_CNT == 14) //接收完一条指令标志 { if(USART1_RX_BUF[0]==0xFA && USART1_RX_BUF[13]==0xFB)//包头包尾检测 { USART1_REC_Status |= 0x8000; USART1_RX_CNT = 0; // SendUartData(USART1_RX_BUF,14,USART2); DegugPrintf(USART1_RX_BUF,14); SendUSART2Str("\n"); } else { USART1_RX_CNT = 0; USART1_REC_Status = 0; //接收长度正确但包头包尾检测没通过 } } else if(USART1_RX_CNT == 21) { if(USART1_RX_BUF[0]==0xFA && USART1_RX_BUF[20]==0xFB)//包头包尾检测 { USART1_REC_Status |= 0x8000; USART1_RX_CNT = 0; // SendUartData(USART1_RX_BUF,21,USART2); DegugPrintf(USART1_RX_BUF,21); SendUSART2Str("\n"); } else { USART1_RX_CNT = 0; USART1_REC_Status = 0; //接收长度正确但包头包尾检测没通过 } } else if(USART1_RX_CNT == 17) { if(USART1_RX_BUF[0]==0xFA && USART1_RX_BUF[16]==0xFB)//包头包尾检测 { USART1_REC_Status |= 0x8000; USART1_RX_CNT = 0; // SendUartData(USART1_RX_BUF,21,USART2); DegugPrintf(USART1_RX_BUF,17); SendUSART2Str("\n"); } else { USART1_RX_CNT = 0; USART1_REC_Status = 0; //接收长度正确但包头包尾检测没通过 } } if(USART1_REC_Status & 0x8000) //接收一帧数据完成 { // DegugPrintf(USART1_RX_BUF,strlen(USART1_RX_BUF)); // printf("len=%d\n",USART1_RX_CNT); IWDG_Feed(); // printf("Rec = %d\r\n",USART1_RX_CNT); ReceiveBuf->SequenceID[0] = USART1_RX_BUF[6]; ReceiveBuf->SequenceID[1] = USART1_RX_BUF[7]; ReceiveBuf->SequenceID[2] = USART1_RX_BUF[8]; ReceiveBuf->SequenceID[3] = USART1_RX_BUF[9]; ReceiveBuf->Command = USART1_RX_BUF[10]; //命令 // ReceiveBuf->Tag = USART1_RX_BUF[11]; //Tag 命令类型 // ReceiveBuf->Length = USART1_RX_BUF[12]; //数据长度 SendBuf->SequenceID[0] = ReceiveBuf->SequenceID[0]; SendBuf->SequenceID[1] = ReceiveBuf->SequenceID[1]; SendBuf->SequenceID[2] = ReceiveBuf->SequenceID[2]; SendBuf->SequenceID[3] = ReceiveBuf->SequenceID[3]; //SequenceID与请求方同步 //USART1_REC_Status = 0; //USART1_RX_CNT =0; switch(ReceiveBuf->Command) { case Reset: //复位 // printf("Reset\n"); //数据处理 ReceiveBuf->Command = 0; //清零 break; case GetFirmversion: //获取固件版本 // printf("GetFirmversion\n"); //数据处理 ReceiveBuf->Command = 0; //清零 break; case SetReaderID: //设置阅读器ID // printf("SetReaderID\n"); //数据处理 ReceiveBuf->Command = 0; //清零 break; case GetReaderID: //获取阅读器ID // printf("GetReaderID\n"); //数据处理 ReceiveBuf->Command = 0; //清零 break; case DelWhite: //删除白名单 // printf("DelWhite\n"); //数据处理 ReceiveBuf->Command = 0; //清零 break; case OpenWhite: //打开白名单 // printf("OpenWhite\n"); //数据处理 ReceiveBuf->Command = 0; //清零 break; case CloseWhite: //关闭白名单 // printf("CloseWhite\n"); //数据处理 ReceiveBuf->Command = 0; //清零 break; case AddWhite: //添加白名单 // printf("AddWhite\n"); //数据处理 ReceiveBuf->Command = 0; //清零 break; case GetWhite: //获取白名单 // printf("GetWhite\n"); //数据处理 ReceiveBuf->Command = 0; //清零 break; case Heart: //心跳 // printf("Heart\n"); //数据处理 ReceiveBuf->Command = 0; //清零 break; case GetWhiteState: //获取白名单状态 // printf("GetWhiteState\n"); //数据处理 ReceiveBuf->Command = 0; //清零 break; case WriteNum: //写号 A0 //FA 00 00 00 00 00 00 00 00 00 A0 01 05 00 01 02 03 04 00 00 FB --21byte // printf("写 2.4G 卡号\n"); // DegugPrintf(USART1_RX_BUF,21); // SendUSART2Str("\n"); { u8 tmp; //数据处理 USART1_RX_CNT = 0; WrNumOkBuf->SequenceID[0] = ReceiveBuf->SequenceID[0]; WrNumOkBuf->SequenceID[1] = ReceiveBuf->SequenceID[1]; WrNumOkBuf->SequenceID[2] = ReceiveBuf->SequenceID[2]; WrNumOkBuf->SequenceID[3] = ReceiveBuf->SequenceID[3]; //SequenceID与请求方同步 WrNumOkBuf->Command = ReceiveBuf->Command; ReceiveBuf->Value[0] = USART1_RX_BUF[13]; ReceiveBuf->Value[1] = USART1_RX_BUF[14]; ReceiveBuf->Value[2] = USART1_RX_BUF[15]; ReceiveBuf->Value[3] = USART1_RX_BUF[16]; ReceiveBuf->Value[4] = USART1_RX_BUF[17]; idBuf[0] = USART1_RX_BUF[13]; idBuf[1] = USART1_RX_BUF[14]; idBuf[2] = USART1_RX_BUF[15]; idBuf[3] = USART1_RX_BUF[16]; idBuf[4] = USART1_RX_BUF[17]; newIdFlag = 1; //2.4G写号 count = 0; //计时器计数清零 NRF24L01_RX_Mode(SPI_SEND); SendUSART2Str("0000\n"); while(1) // { tmp = DataProc_A0_WriteNum_SPI2(); if(tmp) break; } SendUSART2Str("0000\n"); ReadAttenID[0]=0; ReadAttenID[1]=0; ReadAttenID[2]=0; ReadAttenID[3]=0; ReadAttenID[4]=0; ResNum_1356[0]=0; ResNum_1356[1]=0; ResNum_1356[2]=0; ResNum_1356[3]=0; ResNum_1356[4]=0; GetNum_1356[0]=0; GetNum_1356[1]=0; GetNum_1356[2]=0; GetNum_1356[3]=0; GetNum_1356[4]=0; // USART1_REC_Status = 0; // USART1_RX_CNT =0; // for(i=0;i<30;i++) // { // USART3_RX_BUF[i] = 0; // } ReceiveBuf->Command = 0; //清零 } break; case WriteNumState: //写号结果上报 ReceiveBuf->Command = 0; //清零 break; case Read_1345Num: //读13.45M卡号 A2 //FA 00 00 00 00 00 00 00 00 00 A2 00 00 FB if(first_clear_flag == 0) { memset(ResNum_1356,0,5); //memset(oldResNum_1356,0,5); first_clear_flag = 1; } if((ResNum_1356[1] == 0) && (ResNum_1356[2] == 0)&& (ResNum_1356[3] == 0)&&(ResNum_1356[4] ==0)) { break; } //ledL; USART1_RX_CNT = 0; ReadNumBuf->SequenceID[0] = ReceiveBuf->SequenceID[0]; ReadNumBuf->SequenceID[1] = ReceiveBuf->SequenceID[1]; ReadNumBuf->SequenceID[2] = ReceiveBuf->SequenceID[2]; ReadNumBuf->SequenceID[3] = ReceiveBuf->SequenceID[3]; //SequenceID与请求方同步 ReadNumBuf->Command = ReceiveBuf->Command; ReadNumBuf->Tag1 = 1; ReadNumBuf->Length1 = 6; ReadNumBuf->Value1[0] = 0; //len=0 无效 ReadNumBuf->Value1[1] = ResNum_1356[0]; ReadNumBuf->Value1[2] = ResNum_1356[1]; ReadNumBuf->Value1[3] = ResNum_1356[2]; ReadNumBuf->Value1[4] = ResNum_1356[3]; ReadNumBuf->Value1[5] = ResNum_1356[4]; // SendUartData(uartSendRdNumData,22,USART2); SendConsoleData((char*)uartSendRdNumData,22); //回显,返回给PC端 delay_ms(50); DegugPrintf(uartSendRdNumData,22); SendUSART2Str("\n"); //ledH; ResNum_1356[0]=0; ResNum_1356[1]=0; ResNum_1356[2]=0; ResNum_1356[3]=0; ResNum_1356[4]=0; // USART1_REC_Status = 0; // USART1_RX_CNT =0; // for(i=0;i<30;i++) // { // USART3_RX_BUF[i] = 0; // } first_clear_flag = 0; ReceiveBuf->Command = 0; //清零 // ledH; break; case Read_24Num: //A3 读一次2.4G卡号 //FA 00 00 00 00 00 00 00 00 00 A3 00 00 FB /* USART1_RX_CNT = 0; NRF24L01_RX_Mode(SPI_SEND); count_A34 = 0; rspFlag_A3 = 1; { u8 tmp; SendUSART2Str("3333\n"); while(1) // { tmp = DataProc_A3_nrf(); if(tmp) break; } SendUSART2Str("3333\n"); ReadNumBuf->SequenceID[0] = ReceiveBuf->SequenceID[0]; ReadNumBuf->SequenceID[1] = ReceiveBuf->SequenceID[1]; ReadNumBuf->SequenceID[2] = ReceiveBuf->SequenceID[2]; ReadNumBuf->SequenceID[3] = ReceiveBuf->SequenceID[3]; //SequenceID与请求方同步 ReadNumBuf->Command = ReceiveBuf->Command; ReadNumBuf->Tag1 = 1; ReadNumBuf->Length1 = 6; ReadNumBuf->Value1[0] = 0; //len=0 无效 ReadNumBuf->Value1[1] = idResA3Buf[0]; ReadNumBuf->Value1[2] = idResA3Buf[1]; ReadNumBuf->Value1[3] = idResA3Buf[2]; ReadNumBuf->Value1[4] = idResA3Buf[3]; ReadNumBuf->Value1[5] = idResA3Buf[4]; DegugPrintf(uartSendRdNumData,22); SendUSART2Str("\n"); SendConsoleData(uartSendRdNumData,22); //回显,返回给PC端 delay_ms(50); //写号清零防止对下一次写号造成影响 ReadAttenID[0]=0; ReadAttenID[1]=0; ReadAttenID[2]=0; ReadAttenID[3]=0; ReadAttenID[4]=0; ResNum_1356[0]=0; ResNum_1356[1]=0; ResNum_1356[2]=0; ResNum_1356[3]=0; ResNum_1356[4]=0; GetNum_1356[0]=0; GetNum_1356[1]=0; GetNum_1356[2]=0; GetNum_1356[3]=0; GetNum_1356[4]=0; // USART1_REC_Status = 0; // USART1_RX_CNT =0; // for(i=0;i<30;i++) // { // USART3_RX_BUF[i] = 0; // } ReceiveBuf->Command = 0; //清零 } */ break; case ReadCardNum: //A4 读考勤 USART1_RX_CNT = 0; //SendConsoleByte(protocol_config_flg); //回显,返回给PC端 //NRF24L01_RX_Mode_NOACK(SPI_SEND);//NOACK模式,读江西考勤 #if APP NRF24L01_RX_Mode_NOACK(SPI_SEND,protocol_config_flg);//NOACK??,????? #else NRF24L01_RX_Mode_NOACK(SPI_SEND);////NOACK模式,读江西考勤 #endif count_A34 = 0; { u8 tmp; SendUSART2Str("4444\n"); while(1) // { tmp = DataProc_A4_nrf(); if(tmp) break; } SendUSART2Str("4444\n"); ReadNumBuf->SequenceID[0] = ReceiveBuf->SequenceID[0]; ReadNumBuf->SequenceID[1] = ReceiveBuf->SequenceID[1]; ReadNumBuf->SequenceID[2] = ReceiveBuf->SequenceID[2]; ReadNumBuf->SequenceID[3] = ReceiveBuf->SequenceID[3]; //SequenceID ReadNumBuf->Command = ReceiveBuf->Command; ReadNumBuf->Tag1 = 1; ReadNumBuf->Length1 = 6; ReadNumBuf->Value1[0] = 0; // ReadNumBuf->Value1[1] = ReadAttenID[0]; ReadNumBuf->Value1[2] = ReadAttenID[1]; ReadNumBuf->Value1[3] = ReadAttenID[2]; ReadNumBuf->Value1[4] = ReadAttenID[3]; ReadNumBuf->Value1[5] = ReadAttenID[4]; SendConsoleData((char*)uartSendRdNumData,22); //回显,返回给PC端 delay_ms(50); DegugPrintf(uartSendRdNumData,22); SendUSART2Str("\n"); //写号清零防止对下一次写号造成影响 ReadAttenID[0]=0; ReadAttenID[1]=0; ReadAttenID[2]=0; ReadAttenID[3]=0; ReadAttenID[4]=0; ResNum_1356[0]=0; ResNum_1356[1]=0; ResNum_1356[2]=0; ResNum_1356[3]=0; ResNum_1356[4]=0; GetNum_1356[0]=0; GetNum_1356[1]=0; GetNum_1356[2]=0; GetNum_1356[3]=0; GetNum_1356[4]=0; //memset(ResNum_1356,0,5); ReceiveBuf->Command = 0; // } break; #if APP1 case Config24Agreement: protocol_config_flg = USART1_RX_BUF[13]; ConfigKaoQinBuf->SequenceID[0] = ReceiveBuf->SequenceID[0]; ConfigKaoQinBuf->SequenceID[1] = ReceiveBuf->SequenceID[1]; ConfigKaoQinBuf->SequenceID[2] = ReceiveBuf->SequenceID[2]; ConfigKaoQinBuf->SequenceID[3] = ReceiveBuf->SequenceID[3]; //SequenceID ConfigKaoQinBuf->Command = ReceiveBuf->Command; ConfigKaoQinBuf->Control =0x01; SendConsoleData((char*)uartSendConfigKaoQinData,14); //回显,返回给PC端 delay_ms(50); #if 1 StoreBuffer[0] = protocol_config_flg;//修改协议版本 SavePara_to_flash(); //保持数据到Flash //Readpara_from_flash(); //读出数据并打印出来 //protocol_config_flg = Save_Buffer[2*0]; #endif //SendConsoleByte(protocol_config_flg); //回显,返回给PC端 //SendConsoleByte(0xff); //SendConsoleByte(protocol_config_flg); //写号清零防止对下一次写号造成影响 ReadAttenID[0]=0; ReadAttenID[1]=0; ReadAttenID[2]=0; ReadAttenID[3]=0; ReadAttenID[4]=0; ResNum_1356[0]=0; ResNum_1356[1]=0; ResNum_1356[2]=0; ResNum_1356[3]=0; ResNum_1356[4]=0; GetNum_1356[0]=0; GetNum_1356[1]=0; GetNum_1356[2]=0; GetNum_1356[3]=0; GetNum_1356[4]=0; ReceiveBuf->Command = 0; //?? break; #endif case UpdateFirmversion: //升级固件 // printf("UpdateFirmversion\n"); //数据处理 ReceiveBuf->Command = 0; //清零 break; case UpdateFirm: //升级固件开关 // printf("UpdateFirm\n"); //数据处理 ReceiveBuf->Command = 0; //清零 break; case UpdateFirmState: //升级固件结果上报 // printf("UpdateFirmState\n"); //数据处理 ReceiveBuf->Command = 0; //清零 break; default: break; } USART1_REC_Status = 0; //参数清零 //USART1_RX_CNT = 0; } } void DataProc_Nrf24l01(void) { u8 buffer[32]; u8 temp; IWDG_Feed(); if(newIdFlag==1) { newIdFlag = 0; recFlag = 0; txBuf[0] = 0xfc; txBuf[1] = 0x11; if(idBuf[0]==GetNum_1356[0] && idBuf[1]==GetNum_1356[1] && idBuf[2]==GetNum_1356[2] && idBuf[3]==GetNum_1356[3] && idBuf[4]==GetNum_1356[4]) { txBuf[2] = idBuf[0]; txBuf[3] = idBuf[1]; txBuf[4] = idBuf[2]; txBuf[5] = idBuf[3]; txBuf[6] = idBuf[4]; } txBuf[7] = CheckSum(txBuf,7); //写号到txBuf SPI1_CE =0; NRF24L01_Write_Reg(SPI_REV,FLUSH_TX,0xff);//清除TX FIFO寄存器 NRF24L01_Write_Buf(SPI_REV,W_ACK_PAYLOAD,txBuf,8); //写数据到TX BUF 8个字节,自动发送 NRF24L01_RX_Mode(SPI_REV); //设置24L01为接收模式 rspFlag = 1; count=0; IWDG_Feed(); } if(rspFlag) //处理答题卡上电发送的数据 { IWDG_Feed(); if(count<=2000) //1.5S内未收到2.4G回复信号,则rspFlag失效 { if(SPI1_IRQ == 0) //24L01收到答题卡上电发送的数据 { IWDG_Feed(); temp = NRF24L01_RxPacket(SPI_REV,buffer); // SendConsoleByte(temp); if((temp&0x40)==0x40) //接收到的数据显示 { buffer[RX_PLOAD_WIDTH]='\0'; led0=~led0; // SendConsoleData(buffer,RX_PLOAD_WIDTH); // if((buffer[1]==idBuf[0])&& (buffer[2]==idBuf[1])&&(buffer[3]==idBuf[2])&&(buffer[4]==idBuf[3])&&(buffer[5]==idBuf[4])) //收到改写后编号 { if((buffer[1]==GetNum_1356[0])&& (buffer[2]==GetNum_1356[1])&&(buffer[3]==GetNum_1356[2])&&(buffer[4]==GetNum_1356[3])&&(buffer[5]==GetNum_1356[4])) { if(rspFlag == 1) { rspFlag++; txBuf[1] = 0x12; ///0xfc + cmd(0x12) +id +crc ----cmd=0x12 确认 txBuf[7] = CheckSum(txBuf,7); //写号到txBuf NRF24L01_Write_Buf(SPI_REV,W_ACK_PAYLOAD,txBuf,8); //写数据到TX BUF 8个字节,自动发送 } else { rspFlag=0; //如果ID已经是最新,rspFlag清零,不处理接收数据 count = 0; //计数清零 idBuf[0]=0; WrNumOkBuf->Control = 0x10; //写号完成 SendConsoleData((char*)uartSendWrNumOkData,14); //回显,返回给PC端 } } } else { SPI1_CE =0; txBuf[1] = 0x11; txBuf[7] = CheckSum(txBuf,7); //写号到txBuf NRF24L01_Write_Buf(SPI_REV,W_ACK_PAYLOAD,txBuf,8); //写数据到TX BUF 8个字节 SPI1_CE =1; } } } } else //2s超时回复 { IWDG_Feed(); rspFlag=0; //如果ID已经是最新,rspFlag清零,不处理接收数据 count = 0; //计数清零 idBuf[0]=0; idBuf[1]=0; idBuf[2]=0; idBuf[3]=0; idBuf[4]=0; GetNum_1356[0]=0; GetNum_1356[1]=0; GetNum_1356[2]=0; GetNum_1356[3]=0; GetNum_1356[4]=0; WrNumOkBuf->Control = 0x30; //错误 SendConsoleData((char*)uartSendWrNumOkData,14); //回显,返回给PC端 } } } //------------------------------------------------------------------ //函数名:void TIM3_IRQHandler(void) //输入参数:null //返回参数:null //说明:定时器3中断服务 //------------------------------------------------------------------ void TIM3_IRQHandler(void) { if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET) //判断是否为定时器3溢出中断 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清中断标记 count ++; count_A34 ++; count_num ++; if(HW_Open) { GPIO_SetBits(GPIOC,GPIO_Pin_9); //打开红外扫描枪 HW_OpenCount ++; if(HW_OpenCount>=400) { GPIO_ResetBits(GPIOC,GPIO_Pin_9); //关闭红外扫描枪 HW_OpenCount = 0; HW_Open = 0; } } if(count_num==5000) { count_num = 0; // printf("1356_0=%x\r\n",GetNum_1356[0]); // printf("1356_1=%x\r\n",GetNum_1356[1]); // printf("1356_2=%x\r\n",GetNum_1356[2]); // printf("1356_3=%x\r\n",GetNum_1356[3]); // printf("1356_4=%x\r\n",GetNum_1356[4]); // // printf("2.4G_0=%x\r\n",idBuf[0]); // printf("2.4G_1=%x\r\n",idBuf[1]); // printf("2.4G_2=%x\r\n",idBuf[2]); // printf("2.4G_3=%x\r\n",idBuf[3]); // printf("2.4G_4=%x\r\n",idBuf[4]); } flag_1ms = 1; } }