增加重启以及修改接收BOOT ID为0x21
This commit is contained in:
209
User.c
209
User.c
@@ -1,43 +1,45 @@
|
||||
#include "MAIN.H"
|
||||
//can<EFBFBD><EFBFBD>Ϣ
|
||||
//can消息
|
||||
UnInfCan UnInfCan_1 = {0};
|
||||
UnSwSample UnSwSample_1 = {0};
|
||||
UnSwOut UnSwOut_1 = {0};
|
||||
UnRemoteControlOutput UnRemoteControlOutput_1 = {0,0,0,0,0,0,0,0};//ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD>
|
||||
UnRemoteControlOutput UnRemoteControlOutput_2 = {0,0,0,0,0,0,0,0};//ң<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD>
|
||||
UnRemoteControlOutput UnRemoteControlOutput_1 = {0,0,0,0,0,0,0,0};//遥控器数据发送
|
||||
UnRemoteControlOutput UnRemoteControlOutput_2 = {0,0,0,0,0,0,0,0};//遥控器数据发送
|
||||
|
||||
SBusData sbus_data;
|
||||
|
||||
//CAN<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//CAN发送计数
|
||||
uword CntCan_1 = 0;
|
||||
bit FlgCan_1 = 0;
|
||||
|
||||
//<EFBFBD><EFBFBD>һ<EFBFBD>βɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָʾ
|
||||
//第一次采集数据有效标志
|
||||
bit FlgOneTime = 0;
|
||||
ubyte uart2RxFlag = 0;
|
||||
uword RgCanPerid = 50;
|
||||
|
||||
ubyte can_error_cnt = 0;
|
||||
ubyte can_error_flg = 0;
|
||||
ubyte RestartDataFlg1 _at_ 0xF5E7;
|
||||
ubyte RestartDataFlg2 _at_ 0xF600;
|
||||
|
||||
//PWM 20181227
|
||||
ubyte PwmH[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
||||
//-----------------------------------------------------------------------
|
||||
//RTC<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
//RTC定时器
|
||||
//-----------------------------------------------------------------------
|
||||
void RTCProcess(void)
|
||||
{
|
||||
//************************************************************************
|
||||
//////CAN<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//////CAN发送计数
|
||||
if(FlgCan_1){CntCan_1++;if(CntCan_1 >= RgCanPerid){FlgCan_1=0; CntCan_1=0;}}else{CntCan_1=0;}
|
||||
|
||||
//************************************************************************
|
||||
}
|
||||
|
||||
// SBus <EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// SBus 数据解析函数
|
||||
SBusData* parseSBusData(const uint8_t *input_data)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>16<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ÿ<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>Ϊ11λ
|
||||
// 解析16个通道的数据,每个通道为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;
|
||||
@@ -56,20 +58,14 @@ SBusData* parseSBusData(const uint8_t *input_data)
|
||||
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;
|
||||
|
||||
// <EFBFBD><EFBFBD><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<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//can错误处理
|
||||
void CanErrorProcess(void)
|
||||
{
|
||||
ubyte ubNSRL;
|
||||
@@ -119,37 +115,37 @@ void CanTransmit(ubyte index,ubyte *buf)
|
||||
CanTransmitbuf[4] = buf[6];
|
||||
CanTransmitbuf[5] = buf[7];
|
||||
|
||||
CAN_waitTransmit(index);//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD>һ֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᶪ֡
|
||||
CAN_vLoadData(index, (ulong *)CanTransmitbuf);// װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
CAN_waitTransmit(index);//发送前等待上一帧发送完,不然会丢帧
|
||||
CAN_vLoadData(index, (ulong *)CanTransmitbuf);// 装载数据
|
||||
CAN_vTransmit(index);
|
||||
}
|
||||
|
||||
typedef enum {
|
||||
STT_INIT_LIGHT, // <EFBFBD><EFBFBD><EFBFBD>뱣<EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>ʼ״̬
|
||||
STT_STABLE, // <EFBFBD>ȶ<EFBFBD>̬
|
||||
STT_BLINK_CHECK, // <EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
STT_BLINKING // <EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
STT_INIT_LIGHT, // 进入保持的初始状态
|
||||
STT_STABLE, // 稳定态
|
||||
STT_BLINK_CHECK, // 闪烁检测
|
||||
STT_BLINKING // 闪烁确认
|
||||
} BlinkState;
|
||||
|
||||
typedef struct {
|
||||
BlinkState current_state;
|
||||
uint8_t last_input;
|
||||
uint16_t unified_timer; // ͳһ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>[7](@ref)
|
||||
uint8_t trans_count; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint16_t unified_timer; // 统一定时器
|
||||
uint8_t trans_count; // 翻转次数需要记录
|
||||
uint8_t stable_type;
|
||||
} BlinkDetector;
|
||||
|
||||
BlinkDetector blink_detector = {0};
|
||||
|
||||
/* LED״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳһ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD><EFBFBD>棩
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* ctx - ״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>루<EFBFBD>豣֤<EFBFBD>ǿգ<EFBFBD>
|
||||
* current_input- <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD>0:<3A><> 1:<3A><><EFBFBD><EFBFBD>
|
||||
* output - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ָ̬<EFBFBD>루0:<3A><>Ч 1:<3A>ȶ<EFBFBD><C8B6><EFBFBD> 2:<3A>ȶ<EFBFBD><C8B6><EFBFBD> 3:<3A><>˸<EFBFBD><CBB8>
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* 1. <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>[8](@ref)
|
||||
* 2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[1](@ref)
|
||||
* 3. ״̬Ǩ<EFBFBD><EFBFBD>ԭ<EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>[9](@ref)
|
||||
/* LED状态检测函数(状态机+统一定时器优化版)
|
||||
* 参数:
|
||||
* ctx - 状态机上下文指针(需保证非空)
|
||||
* current_input- 当前输入电平(0:低 1:高)
|
||||
* output - 输出状态指示(0:无效 1:稳定高 2:稳定低 3:闪烁)
|
||||
* 原理:
|
||||
* 1. 统一定时器替代原多计时器
|
||||
* 2. 简化状态转移逻辑
|
||||
* 3. 状态迁移原子操作
|
||||
*/
|
||||
void detectLedState(BlinkDetector* ctx, uint8_t current_input, uint8_t* output)
|
||||
{
|
||||
@@ -157,13 +153,13 @@ void detectLedState(BlinkDetector* ctx, uint8_t current_input, uint8_t* output)
|
||||
|
||||
switch(ctx->current_state)
|
||||
{
|
||||
/* <EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD>ʼ״̬<EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD>״<EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
/* 关键初始状态:确保首次状态正确建立 */
|
||||
case STT_INIT_LIGHT:
|
||||
{
|
||||
ctx->last_input = current_input; // ǿ<EFBFBD>Ƽ<EFBFBD>¼<EFBFBD><EFBFBD>ʼֵ
|
||||
ctx->last_input = current_input; // 强制记录初始值
|
||||
ctx->stable_type = current_input ? 1 : 2;
|
||||
ctx->current_state = STT_STABLE; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>̬
|
||||
ctx->unified_timer = 0; // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
ctx->current_state = STT_STABLE; // 进入稳定状态
|
||||
ctx->unified_timer = 0; // 初始化计时器
|
||||
*output = 0;
|
||||
break;
|
||||
}
|
||||
@@ -176,13 +172,13 @@ void detectLedState(BlinkDetector* ctx, uint8_t current_input, uint8_t* output)
|
||||
ctx->trans_count = 1;
|
||||
ctx->unified_timer = 0;
|
||||
ctx->last_input = current_input;
|
||||
ctx->stable_type = current_input ? 1 : 2; // ͬ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>[4](@ref)
|
||||
ctx->stable_type = current_input ? 1 : 2; // 同步状态变量
|
||||
}
|
||||
else if(ctx->unified_timer >= STABLE_CONFIRM_TIME)
|
||||
{
|
||||
*output = ctx->stable_type;
|
||||
ctx->unified_timer = 0;
|
||||
ctx->stable_type = current_input ? 1 : 2; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD>[10](@ref)
|
||||
ctx->stable_type = current_input ? 1 : 2; // 确认状态
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -191,54 +187,54 @@ void detectLedState(BlinkDetector* ctx, uint8_t current_input, uint8_t* output)
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* <EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䴰<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD>Ƶ<EFBFBD>ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
/* 闪烁状态:时间窗口内统计电平翻转次数 */
|
||||
case STT_BLINK_CHECK:
|
||||
{
|
||||
if(ctx->unified_timer >= BLINK_WINDOW) // <EFBFBD>ﵽ<EFBFBD><EFBFBD><EFBFBD>ⴰ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>[8](@ref)
|
||||
if(ctx->unified_timer >= BLINK_WINDOW) // 到达检测窗口时间
|
||||
{
|
||||
if(ctx->trans_count >= MIN_BLINKS) // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(ctx->trans_count >= MIN_BLINKS) // 达到最小闪烁次数
|
||||
{
|
||||
ctx->current_state = STT_BLINKING;// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬
|
||||
ctx->unified_timer = 0; // <EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʱ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
ctx->current_state = STT_BLINKING;// 进入闪烁确认状态
|
||||
ctx->unified_timer = 0; // 重置超时计时
|
||||
}
|
||||
else // δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD>ֵ
|
||||
else // 未达闪烁阈值
|
||||
{
|
||||
ctx->current_state = STT_STABLE; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>̬
|
||||
ctx->unified_timer = 0; // <EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
ctx->current_state = STT_STABLE; // 返回稳定状态
|
||||
ctx->unified_timer = 0; // 重置状态计时器
|
||||
}
|
||||
}
|
||||
else // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD>
|
||||
else // 检测期内
|
||||
{
|
||||
ctx->unified_timer++; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD>ʱ<EFBFBD>ۼ<EFBFBD>
|
||||
ctx->unified_timer++; // 统一计时累计
|
||||
if(current_input != ctx->last_input)
|
||||
{
|
||||
ctx->trans_count++; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>
|
||||
ctx->last_input = current_input; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
ctx->trans_count++; // 翻转次数累计
|
||||
ctx->last_input = current_input; // 更新最后检测值
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* <EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
/* 闪烁确认状态:维持闪烁活动判断 */
|
||||
case STT_BLINKING:
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>仯<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 检测电平变化计数
|
||||
if(current_input != ctx->last_input)
|
||||
{
|
||||
ctx->unified_timer = 0; // <EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʱ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
ctx->unified_timer = 0; // 重置超时计时
|
||||
ctx->last_input = current_input;
|
||||
*output = 3; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸״̬
|
||||
*output = 3; // 输出当前闪烁状态
|
||||
}
|
||||
else if(ctx->unified_timer >= BLINK_TIMEOUT)
|
||||
{
|
||||
ctx->current_state = STT_STABLE;
|
||||
ctx->stable_type = current_input ? 1 : 2; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[4](@ref)
|
||||
ctx->stable_type = current_input ? 1 : 2; // 更新当前稳定状态变量
|
||||
ctx->unified_timer = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ctx->unified_timer ++; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ʱ<EFBFBD>ۼƼ<EFBFBD>ʱ
|
||||
*output = 3; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸״̬
|
||||
ctx->unified_timer ++; // 维持当前稳定时间累计计时
|
||||
*output = 3; // 输出当前闪烁状态
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -247,7 +243,7 @@ void detectLedState(BlinkDetector* ctx, uint8_t current_input, uint8_t* output)
|
||||
}
|
||||
}
|
||||
|
||||
//SBUS<EFBFBD><EFBFBD>CAN<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>
|
||||
//SBUS转CAN数据解析
|
||||
void sbusCanDecode(void)
|
||||
{
|
||||
float SBUS2CANdecodeTemp = 0.0;
|
||||
@@ -257,36 +253,18 @@ void sbusCanDecode(void)
|
||||
{
|
||||
uart2RxFlag = 0;
|
||||
|
||||
//ת<EFBFBD><EFBFBD>
|
||||
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;
|
||||
}
|
||||
//通道0 - 直接发送原始值
|
||||
DF_Curvature = (int16_t)sbus_data.channels[0];
|
||||
|
||||
//ת<EFBFBD><EFBFBD>
|
||||
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;
|
||||
}
|
||||
//通道1 - 直接发送原始值
|
||||
DF_Speed = (int16_t)sbus_data.channels[1];
|
||||
|
||||
//<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;
|
||||
}
|
||||
//通道7 - 直接发送原始值
|
||||
DF_Reserve = (int16_t)sbus_data.channels[7];
|
||||
|
||||
|
||||
//SwA
|
||||
if(sbus_data.channels[1] >= 1700)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(sbus_data.channels[1] >= 1700)//高位
|
||||
{
|
||||
DF_SwA = 1;
|
||||
}
|
||||
@@ -296,35 +274,35 @@ void sbusCanDecode(void)
|
||||
}
|
||||
|
||||
//SwB
|
||||
if(sbus_data.channels[6] >= 1700)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(sbus_data.channels[6] >= 1700)//第三档
|
||||
{
|
||||
DF_SwB = 2;
|
||||
}
|
||||
else if(sbus_data.channels[6] <= 250)//<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>
|
||||
else if(sbus_data.channels[6] <= 250)//第二档
|
||||
{
|
||||
DF_SwB = 0;
|
||||
}
|
||||
else//<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
||||
else//第一档
|
||||
{
|
||||
DF_SwB = 1;
|
||||
}
|
||||
|
||||
//SwC
|
||||
if(sbus_data.channels[4] >= 1700)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(sbus_data.channels[4] >= 1700)//第三档
|
||||
{
|
||||
DF_SwC = 2;
|
||||
}
|
||||
else if(sbus_data.channels[4] <= 250)//<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>
|
||||
else if(sbus_data.channels[4] <= 250)//第二档
|
||||
{
|
||||
DF_SwC = 0;
|
||||
}
|
||||
else//<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
||||
else//第一档
|
||||
{
|
||||
DF_SwC = 1;
|
||||
}
|
||||
|
||||
//SwD
|
||||
if(sbus_data.channels[5] >= 1700)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(sbus_data.channels[5] >= 1700)//高位
|
||||
{
|
||||
DF_SwD = 1;
|
||||
}
|
||||
@@ -333,20 +311,20 @@ void sbusCanDecode(void)
|
||||
DF_SwD = 0;
|
||||
}
|
||||
|
||||
if(0 == sbus_data.flags)//23ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ϊ0<CEAA><30>־<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(0 == sbus_data.flags)//23通道状态 为0标志位表示遥控器
|
||||
{
|
||||
DF_RCHSta = 1;//<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DF_RCHSta = 1;//遥控器在线
|
||||
}
|
||||
else
|
||||
{
|
||||
DF_RCHSta = 0;//<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DF_RCHSta = 0;//遥控器离线
|
||||
}
|
||||
|
||||
SBUS2CANdecodeTemp = (float)(sbus_data.channels[2]);
|
||||
UnRemoteControlOutput_2.bit_data.speed = (int16_t)SBUS2CANdecodeTemp;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
UnRemoteControlOutput_2.bit_data.speed = (int16_t)SBUS2CANdecodeTemp;//数据
|
||||
|
||||
SBUS2CANdecodeTemp = (float)(sbus_data.channels[3]);
|
||||
UnRemoteControlOutput_2.bit_data.curvature = (int16_t)SBUS2CANdecodeTemp;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
UnRemoteControlOutput_2.bit_data.curvature = (int16_t)SBUS2CANdecodeTemp;//数据
|
||||
|
||||
}
|
||||
|
||||
@@ -355,7 +333,7 @@ void sbusCanDecode(void)
|
||||
}
|
||||
|
||||
|
||||
//CAN<EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD>
|
||||
//CAN发送接收
|
||||
void CanRXTX(void)
|
||||
{
|
||||
stCAN_SWObj StrCanRx = {0};
|
||||
@@ -397,7 +375,7 @@ void CanRXTX(void)
|
||||
// UnInfCan_1.ArrData.ArrRX[1][5] = StrCanRx.ulDATAH.ubDB[3];
|
||||
|
||||
// CAN_vReleaseObj(DF_SwRxPwm);
|
||||
//// //<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><EFBFBD>浽PWM<EFBFBD><EFBFBD><EFBFBD>ݽṹ<EFBFBD><EFBFBD>20181227
|
||||
//// //接收到的数据保存到PWM数据结构体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;
|
||||
@@ -417,7 +395,7 @@ void CanRXTX(void)
|
||||
|
||||
}
|
||||
|
||||
//50ms<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ֡
|
||||
//50ms发送一帧
|
||||
if(!FlgCan_1)
|
||||
{
|
||||
FlgCan_1 = 1;
|
||||
@@ -430,9 +408,9 @@ void CanRXTX(void)
|
||||
// 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]) )//<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
|
||||
if( (MATCH_CMD == UnInfCan_1.ArrData.ArrRX[0][0]) || (CHANGE_CMD == UnInfCan_1.ArrData.ArrRX[0][0]) )//对频命令或切换
|
||||
{
|
||||
if(MATCH_CMD == UnInfCan_1.ArrData.ArrRX[0][0])//<EFBFBD><EFBFBD>Ƶ
|
||||
if(MATCH_CMD == UnInfCan_1.ArrData.ArrRX[0][0])//对频
|
||||
{
|
||||
match_freq_time = MATCH_TIME;
|
||||
}
|
||||
@@ -444,15 +422,15 @@ void CanRXTX(void)
|
||||
switch(match_freq_sta)
|
||||
{
|
||||
case 0:
|
||||
if(match_freq_cnt >= match_freq_time)//ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD>
|
||||
if(match_freq_cnt >= match_freq_time)//时间到了就发送确认
|
||||
{
|
||||
SwOut01 = 0;//ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
|
||||
SwOut01 = 0;//取消对频
|
||||
match_freq_sta = 1;
|
||||
match_freq_cnt = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
SwOut01 = 1;//<EFBFBD><EFBFBD>Ƶָ<EFBFBD><EFBFBD>
|
||||
SwOut01 = 1;//对频指令
|
||||
match_freq_sta = 0;
|
||||
match_freq_cnt ++;
|
||||
}
|
||||
@@ -461,14 +439,14 @@ void CanRXTX(void)
|
||||
case 1:
|
||||
if(match_freq_cnt >= MATCH_WAIT_TIME)//
|
||||
{
|
||||
SwOut01 = 0;//ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
|
||||
SwOut01 = 0;//取消对频
|
||||
match_freq_sta = 0;
|
||||
match_freq_cnt = 0;
|
||||
UnInfCan_1.ArrData.ArrRX[0][0] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
SwOut01 = 0;//<EFBFBD><EFBFBD>Ƶָ<EFBFBD><EFBFBD>
|
||||
SwOut01 = 0;//对频指令
|
||||
match_freq_sta = 1;
|
||||
match_freq_cnt ++;
|
||||
}
|
||||
@@ -481,7 +459,7 @@ void CanRXTX(void)
|
||||
CanTransmit(DF_SwTx1,(ubyte *)&UnRemoteControlOutput_2.arr[0]);
|
||||
}
|
||||
|
||||
if( (0x40 == can_error_cnt) || (0x80 == can_error_cnt) )//20250625<EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><EFBFBD><EFBFBD>
|
||||
if( (0x40 == can_error_cnt) || (0x80 == can_error_cnt) )//20250625判断是否发生总线错误
|
||||
{
|
||||
can_error_flg = can_error_cnt;
|
||||
CAN_vInit();
|
||||
@@ -491,18 +469,3 @@ void CanRXTX(void)
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user