This commit is contained in:
2025-10-21 20:34:06 +08:00
commit c3f6375140
55 changed files with 34675 additions and 0 deletions

508
User.c Normal file
View File

@@ -0,0 +1,508 @@
#include "MAIN.H"
//can<61><6E>Ϣ
UnInfCan UnInfCan_1 = {0};
UnSwSample UnSwSample_1 = {0};
UnSwOut UnSwOut_1 = {0};
UnRemoteControlOutput UnRemoteControlOutput_1 = {0,0,0,0,0,0,0,0};//ң<><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
UnRemoteControlOutput UnRemoteControlOutput_2 = {0,0,0,0,0,0,0,0};//ң<><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
SBusData sbus_data;
//CAN<41><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uword CntCan_1 = 0;
bit FlgCan_1 = 0;
//<2F><>һ<EFBFBD>βɼ<CEB2><C9BC><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>ָʾ
bit FlgOneTime = 0;
ubyte uart2RxFlag = 0;
uword RgCanPerid = 50;
ubyte can_error_cnt = 0;
ubyte can_error_flg = 0;
//PWM 20181227
ubyte PwmH[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//-----------------------------------------------------------------------
//RTC<54><43>ʱ<EFBFBD><CAB1>
//-----------------------------------------------------------------------
void RTCProcess(void)
{
//************************************************************************
//////CAN<41><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(FlgCan_1){CntCan_1++;if(CntCan_1 >= RgCanPerid){FlgCan_1=0; CntCan_1=0;}}else{CntCan_1=0;}
//************************************************************************
}
// SBus <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SBusData* parseSBusData(const uint8_t *input_data)
{
// <20><><EFBFBD><EFBFBD>16<31><36>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ÿ<EFBFBD><C3BF>ͨ<EFBFBD><CDA8>Ϊ11λ
sbus_data.channels[0] = (input_data[1] | input_data[2] << 8) & 0x07FF;
sbus_data.channels[1] = (input_data[2] >> 3 | input_data[3] << 5) & 0x07FF;
sbus_data.channels[2] = (input_data[3] >> 6 | input_data[4] << 2 | input_data[5] << 10) & 0x07FF;
sbus_data.channels[3] = (input_data[5] >> 1 | input_data[6] << 7) & 0x07FF;
sbus_data.channels[4] = (input_data[6] >> 4 | input_data[7] << 4) & 0x07FF;
sbus_data.channels[5] = (input_data[7] >> 7 | input_data[8] << 1 | input_data[9] << 9) & 0x07FF;
sbus_data.channels[6] = (input_data[9] >> 2 | input_data[10] << 6) & 0x07FF;
sbus_data.channels[7] = (input_data[10] >> 5 | input_data[11] << 3) & 0x07FF;
sbus_data.channels[8] = (input_data[12] | input_data[13] << 8) & 0x07FF;
sbus_data.channels[9] = (input_data[13] >> 3 | input_data[14] << 5) & 0x07FF;
sbus_data.channels[10] = (input_data[14] >> 6 | input_data[15] << 2 | input_data[15] << 10) & 0x07FF;
sbus_data.channels[11] = (input_data[16] >> 1 | input_data[17] << 7) & 0x07FF;
sbus_data.channels[12] = (input_data[17] >> 4 | input_data[18] << 4) & 0x07FF;
sbus_data.channels[13] = (input_data[18] >> 7 | input_data[19] << 1 | input_data[20] << 9) & 0x07FF;
sbus_data.channels[14] = (input_data[20] >> 2 | input_data[21] << 6) & 0x07FF;
sbus_data.channels[15] = (input_data[21] >> 5 | input_data[22] << 3) & 0x07FF;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ֽ<EFBFBD>
sbus_data.flags = input_data[23];
uart2RxFlag = 1;
// for(ubyte i=0;i<8;i++)
// {
// printf( "%d ",i);
// printf( "%04x\r\n",sbus_data.channels[i]);
// }
// printf("%d\r\n",sbus_data.channels[0]);
return &sbus_data;
}
//can<61><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CanErrorProcess(void)
{
ubyte ubNSRL;
ubyte ubNSRH;
ubyte ubResetLEC = 0x3F;
//-------------------------------------------
EA = 0;
CAN_pushAMRegs(); // push the CAN Access Mediator Registers
SFR_PAGE(_su0, SST0); // switch to page 0
CAN_vWriteCANAddress(CAN_NSR0);
CAN_vReadEN();
ubNSRL = CAN_DATA0;
ubNSRH = CAN_DATA1;
if (ubNSRL & 0x20) // if ALERT
{
CAN_vInit();
}
if (ubNSRL & 0x07) // if LEC
{
ubResetLEC = 0x38;
}
//// Reset LEC, TXOK, RXOK, ALERT, EWRN, BOFF, LLE, LOE (if set)
CAN_vWriteCANAddress(CAN_NSR0); // Addressing CAN_NSR0
CAN_DATA0 = ~(ubNSRL & ubResetLEC); // load CAN_NSR0 status register[7-0]
CAN_DATA1 = ~(ubNSRH); // load CAN_NSR0 status register[15-8]
CAN_vWriteEN(D0_VALID+D1_VALID); // Data0 and Data1 are Valid for
SFR_PAGE(_su0, RST0); // restore the old SCU page
CAN_popAMRegs(); // restore the CAN Access Mediator Registers
EA = 1;
}
void CanTransmit(ubyte index,ubyte *buf)
{
ubyte CanTransmitbuf[8] = {0,0,0,0,0,0,0,0};
//----------------- --------
CanTransmitbuf[2] = buf[0];
CanTransmitbuf[3] = buf[1];
CanTransmitbuf[0] = buf[2];
CanTransmitbuf[1] = buf[3];
CanTransmitbuf[6] = buf[4];
CanTransmitbuf[7] = buf[5];
CanTransmitbuf[4] = buf[6];
CanTransmitbuf[5] = buf[7];
CAN_waitTransmit(index);//<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>һ֡<D2BB><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᶪ֡
CAN_vLoadData(index, (ulong *)CanTransmitbuf);// װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CAN_vTransmit(index);
}
typedef enum {
STT_INIT_LIGHT, // <20><><EFBFBD><EFBFBD><EBB1A3><EFBFBD>ij<EFBFBD>ʼ״̬
STT_STABLE, // <20>ȶ<EFBFBD>̬
STT_BLINK_CHECK, // <20><>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>
STT_BLINKING // <20><>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>
} BlinkState;
typedef struct {
BlinkState current_state;
uint8_t last_input;
uint16_t unified_timer; // ͳһ<CDB3><D2BB>ʱ<EFBFBD><CAB1>[7](@ref)
uint8_t trans_count; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t stable_type;
} BlinkDetector;
BlinkDetector blink_detector = {0};
/* LED״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ͳһ<CDB3><D2BB>ʱ<EFBFBD><CAB1><EFBFBD>Ż<EFBFBD><C5BB>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ctx - ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>豣֤<E8B1A3>ǿգ<C7BF>
* current_input- <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>0:<3A><> 1:<3A><><EFBFBD><EFBFBD>
* output - <20><><EFBFBD><EFBFBD>״ָ̬<CCAC>루0:<3A><>Ч 1:<3A>ȶ<EFBFBD><C8B6><EFBFBD> 2:<3A>ȶ<EFBFBD><C8B6><EFBFBD> 3:<3A><>˸<EFBFBD><CBB8>
* <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>
* 1. <20><>һ<EFBFBD><D2BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>[8](@ref)
* 2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[1](@ref)
* 3. ״̬Ǩ<CCAC><C7A8>ԭ<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>[9](@ref)
*/
void detectLedState(BlinkDetector* ctx, uint8_t current_input, uint8_t* output)
{
*output = 0;
switch(ctx->current_state)
{
/* <20>ؼ<EFBFBD><D8BC><EFBFBD>ʼ״̬<D7B4><CCAC>ȷ<EFBFBD><C8B7><EFBFBD>״<EFBFBD><D7B4><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
case STT_INIT_LIGHT:
{
ctx->last_input = current_input; // ǿ<>Ƽ<EFBFBD>¼<EFBFBD><C2BC>ʼֵ
ctx->stable_type = current_input ? 1 : 2;
ctx->current_state = STT_STABLE; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>̬
ctx->unified_timer = 0; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
*output = 0;
break;
}
case STT_STABLE:
{
if(current_input != ctx->last_input)
{
ctx->current_state = STT_BLINK_CHECK;
ctx->trans_count = 1;
ctx->unified_timer = 0;
ctx->last_input = current_input;
ctx->stable_type = current_input ? 1 : 2; // ͬ<><CDAC>״̬<D7B4><CCAC><EFBFBD><EFBFBD>[4](@ref)
}
else if(ctx->unified_timer >= STABLE_CONFIRM_TIME)
{
*output = ctx->stable_type;
ctx->unified_timer = 0;
ctx->stable_type = current_input ? 1 : 2; // <20><><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>[10](@ref)
}
else
{
ctx->unified_timer++;
*output = ctx->stable_type;
}
break;
}
/* <20><>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4B4B0><EFBFBD><EFBFBD>ͳ<EFBFBD>Ƶ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
case STT_BLINK_CHECK:
{
if(ctx->unified_timer >= BLINK_WINDOW) // <20><EFBFBD><EFB5BD><EFBFBD><EFBFBD><E2B4B0>ʱ<EFBFBD><CAB1>[8](@ref)
{
if(ctx->trans_count >= MIN_BLINKS) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>
{
ctx->current_state = STT_BLINKING;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>̬
ctx->unified_timer = 0; // <20><><EFBFBD>ó<EFBFBD>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1>
}
else // δ<><CEB4><EFBFBD><EFBFBD>˸<EFBFBD><CBB8>ֵ
{
ctx->current_state = STT_STABLE; // <20><><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>̬
ctx->unified_timer = 0; // <20><>״̬<D7B4><CCAC><EFBFBD>ü<EFBFBD>ʱ<EFBFBD><CAB1>
}
}
else // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>
{
ctx->unified_timer++; // <20><><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD>ʱ<EFBFBD>ۼ<EFBFBD>
if(current_input != ctx->last_input)
{
ctx->trans_count++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>
ctx->last_input = current_input; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
}
}
break;
}
/* <20><>˸<EFBFBD><CBB8><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD><EEB6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
case STT_BLINKING:
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBAF><EFBFBD><EFBFBD>
if(current_input != ctx->last_input)
{
ctx->unified_timer = 0; // <20><><EFBFBD>ó<EFBFBD>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1>
ctx->last_input = current_input;
*output = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸״̬
}
else if(ctx->unified_timer >= BLINK_TIMEOUT)
{
ctx->current_state = STT_STABLE;
ctx->stable_type = current_input ? 1 : 2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[4](@ref)
ctx->unified_timer = 0;
}
else
{
ctx->unified_timer ++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ʱ<EFBFBD>ۼƼ<DBBC>ʱ
*output = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸״̬
}
break;
}
default:break;
}
}
//SBUS<55><53>CAN<41><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
void sbusCanDecode(void)
{
float SBUS2CANdecodeTemp = 0.0;
//----------------------------------------------
if(uart2RxFlag == 1)
{
uart2RxFlag = 0;
//ת<><D7AA>
SBUS2CANdecodeTemp = (float)(sbus_data.channels[0]);
SBUS2CANdecodeTemp = (DF_ZeroValue - SBUS2CANdecodeTemp)*23;//<2F><>Ҫ<EFBFBD>һ<E4BBBB>·<EFBFBD><C2B7>ţ<EFBFBD><C5A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DF_Curvature = (int16_t)SBUS2CANdecodeTemp;//<2F><><EFBFBD><EFBFBD>
if( (DF_Curvature > (-50)) && (DF_Curvature < 50) ) //<2F><><EFBFBD>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
DF_Curvature = 0;
}
//ת<><D7AA>
SBUS2CANdecodeTemp = (float)(sbus_data.channels[1]);
SBUS2CANdecodeTemp = (DF_ZeroValue - SBUS2CANdecodeTemp)*2.3;//<2F><>Ҫ<EFBFBD>һ<E4BBBB>·<EFBFBD><C2B7>ţ<EFBFBD><C5A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DF_Speed = (int16_t)SBUS2CANdecodeTemp;//ת<><D7AA>
if( (DF_Speed > (-50)) && (DF_Speed < 50) ) //<2F><><EFBFBD>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
DF_Speed = 0;
}
//<2F><><EFBFBD><EFBFBD>
SBUS2CANdecodeTemp = (float)(sbus_data.channels[7]);
SBUS2CANdecodeTemp = (DF_ZeroValue - SBUS2CANdecodeTemp);//<2F><>Ҫ<EFBFBD>һ<E4BBBB>·<EFBFBD><C2B7>ţ<EFBFBD><C5A3><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DF_Reserve = (int16_t)SBUS2CANdecodeTemp;//ת<><D7AA>
if( (DF_Reserve > (-50)) && (DF_Reserve < 50) ) //<2F><><EFBFBD>ӻ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
DF_Reserve = 0;
}
//SwA
if(sbus_data.channels[1] >= 1700)//<2F><><EFBFBD><EFBFBD>
{
DF_SwA = 1;
}
else
{
DF_SwA = 0;
}
//SwB
if(sbus_data.channels[6] >= 1700)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
DF_SwB = 2;
}
else if(sbus_data.channels[6] <= 250)//<2F>ڶ<EFBFBD><DAB6><EFBFBD>
{
DF_SwB = 0;
}
else//<2F><>һ<EFBFBD><D2BB>
{
DF_SwB = 1;
}
//SwC
if(sbus_data.channels[4] >= 1700)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
DF_SwC = 2;
}
else if(sbus_data.channels[4] <= 250)//<2F>ڶ<EFBFBD><DAB6><EFBFBD>
{
DF_SwC = 0;
}
else//<2F><>һ<EFBFBD><D2BB>
{
DF_SwC = 1;
}
//SwD
if(sbus_data.channels[5] >= 1700)//<2F><><EFBFBD><EFBFBD>
{
DF_SwD = 1;
}
else
{
DF_SwD = 0;
}
if(0 == sbus_data.flags)//23ͨ<33><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ϊ0<CEAA><30>־<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
DF_RCHSta = 1;//<2F>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>
}
else
{
DF_RCHSta = 0;//<2F>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>
}
SBUS2CANdecodeTemp = (float)(sbus_data.channels[2]);
UnRemoteControlOutput_2.bit_data.speed = (int16_t)SBUS2CANdecodeTemp;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SBUS2CANdecodeTemp = (float)(sbus_data.channels[3]);
UnRemoteControlOutput_2.bit_data.curvature = (int16_t)SBUS2CANdecodeTemp;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
UnRemoteControlOutput_2.bit_data.switch_a = P1_2;//
UnRemoteControlOutput_2.bit_data.switch_d = P1_3;//
}
//CAN<41><4E><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
void CanRXTX(void)
{
stCAN_SWObj StrCanRx = {0};
uword tmp = 0;
ubyte i = 0,j = 0;
ubyte sbus_temp[2] = {0,0};
static ubyte match_freq_sta = 0;
static uword match_freq_cnt = 0;
static uword match_freq_time = 0;
//------------------------------------
if(CAN_ubNewData(DF_SwRx))
{
CAN_vGetMsgObj(DF_SwRx, &StrCanRx);
UnInfCan_1.ArrData.ArrRX[0][3] = StrCanRx.ulDATAL.ubDB[0];
UnInfCan_1.ArrData.ArrRX[0][2] = StrCanRx.ulDATAL.ubDB[1];
UnInfCan_1.ArrData.ArrRX[0][1] = StrCanRx.ulDATAL.ubDB[2];
UnInfCan_1.ArrData.ArrRX[0][0] = StrCanRx.ulDATAL.ubDB[3];
UnInfCan_1.ArrData.ArrRX[0][7] = StrCanRx.ulDATAH.ubDB[0];
UnInfCan_1.ArrData.ArrRX[0][6] = StrCanRx.ulDATAH.ubDB[1];
UnInfCan_1.ArrData.ArrRX[0][5] = StrCanRx.ulDATAH.ubDB[2];
UnInfCan_1.ArrData.ArrRX[0][4] = StrCanRx.ulDATAH.ubDB[3];
CAN_vReleaseObj(DF_SwRx);
}
if(CAN_ubNewData(DF_SwRxPwm))
{
// CAN_vGetMsgObj(DF_SwRxPwm, &StrCanRx);
// UnInfCan_1.ArrData.ArrRX[1][2] = StrCanRx.ulDATAL.ubDB[0];
// UnInfCan_1.ArrData.ArrRX[1][3] = StrCanRx.ulDATAL.ubDB[1];
// UnInfCan_1.ArrData.ArrRX[1][0] = StrCanRx.ulDATAL.ubDB[2];
// UnInfCan_1.ArrData.ArrRX[1][1] = StrCanRx.ulDATAL.ubDB[3];
// UnInfCan_1.ArrData.ArrRX[1][6] = StrCanRx.ulDATAH.ubDB[0];
// UnInfCan_1.ArrData.ArrRX[1][7] = StrCanRx.ulDATAH.ubDB[1];
// UnInfCan_1.ArrData.ArrRX[1][4] = StrCanRx.ulDATAH.ubDB[2];
// UnInfCan_1.ArrData.ArrRX[1][5] = StrCanRx.ulDATAH.ubDB[3];
// CAN_vReleaseObj(DF_SwRxPwm);
//// //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1>浽PWM<57><4D><EFBFBD>ݽṹ<DDBD><E1B9B9>20181227
//// PwmH[0 ] = (ubyte)UnInfCan_1.BitData.Pwm_01;
//// PwmH[1 ] = (ubyte)UnInfCan_1.BitData.Pwm_02;
//// PwmH[2 ] = (ubyte)UnInfCan_1.BitData.Pwm_03;
//// PwmH[3 ] = (ubyte)UnInfCan_1.BitData.Pwm_04;
//// PwmH[4 ] = (ubyte)UnInfCan_1.BitData.Pwm_05;
//// PwmH[5 ] = (ubyte)UnInfCan_1.BitData.Pwm_06;
//// PwmH[6 ] = (ubyte)UnInfCan_1.BitData.Pwm_07;
//// PwmH[7 ] = (ubyte)UnInfCan_1.BitData.Pwm_08;
//// PwmH[8 ] = (ubyte)UnInfCan_1.BitData.Pwm_09;
//// PwmH[9 ] = (ubyte)UnInfCan_1.BitData.Pwm_10;
//// PwmH[10] = (ubyte)UnInfCan_1.BitData.Pwm_11;
//// PwmH[11] = (ubyte)UnInfCan_1.BitData.Pwm_12;
//// PwmH[12] = (ubyte)UnInfCan_1.BitData.Pwm_13;
//// PwmH[13] = (ubyte)UnInfCan_1.BitData.Pwm_14;
//// PwmH[14] = (ubyte)UnInfCan_1.BitData.Pwm_15;
//// PwmH[15] = (ubyte)UnInfCan_1.BitData.Pwm_16;
}
//50ms<6D><73><EFBFBD><EFBFBD>һ֡
if(!FlgCan_1)
{
FlgCan_1 = 1;
sbus_temp[0] = P1_3;
// sbus_temp[1] = 3;
detectLedState(&blink_detector, sbus_temp[0], &sbus_temp[1]);
// UnRemoteControlOutput_2.bit_data.enable = blink_detector.current_state;//
// UnRemoteControlOutput_2.bit_data.reserve1 = sbus_temp[1];
if( (MATCH_CMD == UnInfCan_1.ArrData.ArrRX[0][0]) || (CHANGE_CMD == UnInfCan_1.ArrData.ArrRX[0][0]) )//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
{
if(MATCH_CMD == UnInfCan_1.ArrData.ArrRX[0][0])//<2F><>Ƶ
{
match_freq_time = MATCH_TIME;
}
else
{
match_freq_time = CHANGE_TIME;
}
switch(match_freq_sta)
{
case 0:
if(match_freq_cnt >= match_freq_time)//ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>
{
SwOut01 = 0;//ȡ<><C8A1><EFBFBD><EFBFBD>Ƶ
match_freq_sta = 1;
match_freq_cnt = 0;
}
else
{
SwOut01 = 1;//<2F><>Ƶָ<C6B5><D6B8>
match_freq_sta = 0;
match_freq_cnt ++;
}
break;
case 1:
if(match_freq_cnt >= MATCH_WAIT_TIME)//
{
SwOut01 = 0;//ȡ<><C8A1><EFBFBD><EFBFBD>Ƶ
match_freq_sta = 0;
match_freq_cnt = 0;
UnInfCan_1.ArrData.ArrRX[0][0] = 0;
}
else
{
SwOut01 = 0;//<2F><>Ƶָ<C6B5><D6B8>
match_freq_sta = 1;
match_freq_cnt ++;
}
break;
default:;
}
}
CanTransmit(DF_SwTx,(ubyte *)&UnRemoteControlOutput_1.arr[0]);
CanTransmit(DF_SwTx1,(ubyte *)&UnRemoteControlOutput_2.arr[0]);
}
if( (0x40 == can_error_cnt) || (0x80 == can_error_cnt) )//20250625<32>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>
{
can_error_flg = can_error_cnt;
CAN_vInit();
can_error_cnt = 0;
}
}