增加重启以及修改接收BOOT ID为0x21
This commit is contained in:
12
CAN.C
12
CAN.C
@@ -324,11 +324,11 @@ void CAN_vInit(void)
|
|||||||
/// - priority class 3; transmit acceptance filtering is based on the list
|
/// - priority class 3; transmit acceptance filtering is based on the list
|
||||||
/// order (like class 1)
|
/// order (like class 1)
|
||||||
/// - extended 29-bit identifier
|
/// - extended 29-bit identifier
|
||||||
/// - identifier 29-bit: 0x00000003
|
/// - identifier 29-bit: 0x00000021
|
||||||
|
|
||||||
//--------------MOAR5 = 0xE0000003---------------------------------------
|
//--------------MOAR5 = 0xE0000021---------------------------------------
|
||||||
|
|
||||||
CAN_vWriteAMData(0xE0000003); // load MO5 arbitration register
|
CAN_vWriteAMData(0xE0000021); // load MO5 arbitration register
|
||||||
|
|
||||||
// CAN Address pointing to the CAN_MODATAH5
|
// CAN Address pointing to the CAN_MODATAH5
|
||||||
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
|
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
|
||||||
@@ -633,11 +633,11 @@ void CAN_vInit(void)
|
|||||||
/// - priority class 3; transmit acceptance filtering is based on the list
|
/// - priority class 3; transmit acceptance filtering is based on the list
|
||||||
/// order (like class 1)
|
/// order (like class 1)
|
||||||
/// - extended 29-bit identifier
|
/// - extended 29-bit identifier
|
||||||
/// - identifier 29-bit: 0x1FFFFFF0
|
/// - identifier 29-bit: 0x1FFFFF21
|
||||||
|
|
||||||
//--------------MOAR9 = 0xFFFFFFF0---------------------------------------
|
//--------------MOAR9 = 0xFFFFFF21---------------------------------------
|
||||||
|
|
||||||
CAN_vWriteAMData(0xFFFFFFF0); // load MO9 arbitration register
|
CAN_vWriteAMData(0xFFFFFF21); // load MO9 arbitration register
|
||||||
|
|
||||||
// CAN Address pointing to the CAN_MODATAH9
|
// CAN Address pointing to the CAN_MODATAH9
|
||||||
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
|
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
|
||||||
|
|||||||
4
MAIN.C
4
MAIN.C
@@ -225,7 +225,7 @@ void main(void)
|
|||||||
SP = 0xC0; // Initialize Stack Pointer to 0xC0;
|
SP = 0xC0; // Initialize Stack Pointer to 0xC0;
|
||||||
// CanTransmit();
|
// CanTransmit();
|
||||||
|
|
||||||
// FlgCan_1 = 1;//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ʱһ<CAB1><D2BB>ʱ<EFBFBD><CAB1><EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD>CAN<41><4E><EFBFBD><EFBFBD>
|
// FlgCan_1 = 1;//<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ʱһ<CAB1><D2BB>ʱ<EFBFBD><CAB1><EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD>CAN<41><4E><EFBFBD><EFBFBD>
|
||||||
// USER CODE END
|
// USER CODE END
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
@@ -243,6 +243,8 @@ void main(void)
|
|||||||
WDT_vRefresh();
|
WDT_vRefresh();
|
||||||
// LedDr();
|
// LedDr();
|
||||||
BootMain();
|
BootMain();
|
||||||
|
RestartDataFlg1 = 0x55;
|
||||||
|
RestartDataFlg2 = 0x55;
|
||||||
// tmp[1] = (ubyte)CntCan_1;
|
// tmp[1] = (ubyte)CntCan_1;
|
||||||
// tmp[0] = (ubyte)(CntCan_1>>8);
|
// tmp[0] = (ubyte)(CntCan_1>>8);
|
||||||
// CAN_vLoadData(0x2, (ulong *)(tmp)); // Add this Line
|
// CAN_vLoadData(0x2, (ulong *)(tmp)); // Add this Line
|
||||||
|
|||||||
15
START_XC.a51
15
START_XC.a51
@@ -314,6 +314,21 @@ ENDIF
|
|||||||
RSEG ?C_C51STARTUP
|
RSEG ?C_C51STARTUP
|
||||||
|
|
||||||
STARTUP1:
|
STARTUP1:
|
||||||
|
MOV DPTR,#0xF5E7
|
||||||
|
MOVX A,@DPTR
|
||||||
|
CJNE A,#0x55,ClOCKINIT ;判断数据是否相等,不相等就初始化时钟表示为重新上电
|
||||||
|
AJMP Restart1
|
||||||
|
|
||||||
|
Restart1: MOV DPTR,#0xF600
|
||||||
|
MOVX A,@DPTR
|
||||||
|
CJNE A,#0x55,ClOCKINIT ;判断数据是否相等,不相等就初始化时钟表示为重新上电
|
||||||
|
AJMP STARECMAIN ;两次判断相等就直接跳转到main函数
|
||||||
|
|
||||||
|
|
||||||
|
STARECMAIN: MOV SP,#?STACK-1
|
||||||
|
LJMP ?C_START
|
||||||
|
|
||||||
|
ClOCKINIT:
|
||||||
|
|
||||||
IF (XTAL <> 0)
|
IF (XTAL <> 0)
|
||||||
; switch to external XTAL
|
; switch to external XTAL
|
||||||
|
|||||||
209
User.c
209
User.c
@@ -1,43 +1,45 @@
|
|||||||
#include "MAIN.H"
|
#include "MAIN.H"
|
||||||
//can<EFBFBD><EFBFBD>Ϣ
|
//can消息
|
||||||
UnInfCan UnInfCan_1 = {0};
|
UnInfCan UnInfCan_1 = {0};
|
||||||
UnSwSample UnSwSample_1 = {0};
|
UnSwSample UnSwSample_1 = {0};
|
||||||
UnSwOut UnSwOut_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_1 = {0,0,0,0,0,0,0,0};//遥控器数据发送
|
||||||
UnRemoteControlOutput UnRemoteControlOutput_2 = {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};//遥控器数据发送
|
||||||
|
|
||||||
SBusData sbus_data;
|
SBusData sbus_data;
|
||||||
|
|
||||||
//CAN<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//CAN发送计数
|
||||||
uword CntCan_1 = 0;
|
uword CntCan_1 = 0;
|
||||||
bit FlgCan_1 = 0;
|
bit FlgCan_1 = 0;
|
||||||
|
|
||||||
//<EFBFBD><EFBFBD>һ<EFBFBD>βɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָʾ
|
//第一次采集数据有效标志
|
||||||
bit FlgOneTime = 0;
|
bit FlgOneTime = 0;
|
||||||
ubyte uart2RxFlag = 0;
|
ubyte uart2RxFlag = 0;
|
||||||
uword RgCanPerid = 50;
|
uword RgCanPerid = 50;
|
||||||
|
|
||||||
ubyte can_error_cnt = 0;
|
ubyte can_error_cnt = 0;
|
||||||
ubyte can_error_flg = 0;
|
ubyte can_error_flg = 0;
|
||||||
|
ubyte RestartDataFlg1 _at_ 0xF5E7;
|
||||||
|
ubyte RestartDataFlg2 _at_ 0xF600;
|
||||||
|
|
||||||
//PWM 20181227
|
//PWM 20181227
|
||||||
ubyte PwmH[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
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)
|
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;}
|
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)
|
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[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[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[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[14] = (input_data[20] >> 2 | input_data[21] << 6) & 0x07FF;
|
||||||
sbus_data.channels[15] = (input_data[21] >> 5 | input_data[22] << 3) & 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];
|
sbus_data.flags = input_data[23];
|
||||||
uart2RxFlag = 1;
|
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;
|
return &sbus_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
//can<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//can错误处理
|
||||||
void CanErrorProcess(void)
|
void CanErrorProcess(void)
|
||||||
{
|
{
|
||||||
ubyte ubNSRL;
|
ubyte ubNSRL;
|
||||||
@@ -119,37 +115,37 @@ void CanTransmit(ubyte index,ubyte *buf)
|
|||||||
CanTransmitbuf[4] = buf[6];
|
CanTransmitbuf[4] = buf[6];
|
||||||
CanTransmitbuf[5] = buf[7];
|
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_waitTransmit(index);//发送前等待上一帧发送完,不然会丢帧
|
||||||
CAN_vLoadData(index, (ulong *)CanTransmitbuf);// װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
CAN_vLoadData(index, (ulong *)CanTransmitbuf);// 装载数据
|
||||||
CAN_vTransmit(index);
|
CAN_vTransmit(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
STT_INIT_LIGHT, // <EFBFBD><EFBFBD><EFBFBD>뱣<EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>ʼ״̬
|
STT_INIT_LIGHT, // 进入保持的初始状态
|
||||||
STT_STABLE, // <EFBFBD>ȶ<EFBFBD>̬
|
STT_STABLE, // 稳定态
|
||||||
STT_BLINK_CHECK, // <EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
STT_BLINK_CHECK, // 闪烁检测
|
||||||
STT_BLINKING // <EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
STT_BLINKING // 闪烁确认
|
||||||
} BlinkState;
|
} BlinkState;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
BlinkState current_state;
|
BlinkState current_state;
|
||||||
uint8_t last_input;
|
uint8_t last_input;
|
||||||
uint16_t unified_timer; // ͳһ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>[7](@ref)
|
uint16_t unified_timer; // 统一定时器
|
||||||
uint8_t trans_count; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
uint8_t trans_count; // 翻转次数需要记录
|
||||||
uint8_t stable_type;
|
uint8_t stable_type;
|
||||||
} BlinkDetector;
|
} BlinkDetector;
|
||||||
|
|
||||||
BlinkDetector blink_detector = {0};
|
BlinkDetector blink_detector = {0};
|
||||||
|
|
||||||
/* LED״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳһ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD><EFBFBD>棩
|
/* LED状态检测函数(状态机+统一定时器优化版)
|
||||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
* 参数:
|
||||||
* ctx - ״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>루<EFBFBD>豣֤<EFBFBD>ǿգ<EFBFBD>
|
* ctx - 状态机上下文指针(需保证非空)
|
||||||
* current_input- <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD>0:<3A><> 1:<3A><><EFBFBD><EFBFBD>
|
* current_input- 当前输入电平(0:低 1:高)
|
||||||
* output - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״ָ̬<EFBFBD>루0:<3A><>Ч 1:<3A>ȶ<EFBFBD><C8B6><EFBFBD> 2:<3A>ȶ<EFBFBD><C8B6><EFBFBD> 3:<3A><>˸<EFBFBD><CBB8>
|
* output - 输出状态指示(0:无效 1:稳定高 2:稳定低 3:闪烁)
|
||||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
* 原理:
|
||||||
* 1. <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>[8](@ref)
|
* 1. 统一定时器替代原多计时器
|
||||||
* 2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[1](@ref)
|
* 2. 简化状态转移逻辑
|
||||||
* 3. ״̬Ǩ<EFBFBD><EFBFBD>ԭ<EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>[9](@ref)
|
* 3. 状态迁移原子操作
|
||||||
*/
|
*/
|
||||||
void detectLedState(BlinkDetector* ctx, uint8_t current_input, uint8_t* output)
|
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)
|
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:
|
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->stable_type = current_input ? 1 : 2;
|
||||||
ctx->current_state = STT_STABLE; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>̬
|
ctx->current_state = STT_STABLE; // 进入稳定状态
|
||||||
ctx->unified_timer = 0; // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
ctx->unified_timer = 0; // 初始化计时器
|
||||||
*output = 0;
|
*output = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -176,13 +172,13 @@ void detectLedState(BlinkDetector* ctx, uint8_t current_input, uint8_t* output)
|
|||||||
ctx->trans_count = 1;
|
ctx->trans_count = 1;
|
||||||
ctx->unified_timer = 0;
|
ctx->unified_timer = 0;
|
||||||
ctx->last_input = current_input;
|
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)
|
else if(ctx->unified_timer >= STABLE_CONFIRM_TIME)
|
||||||
{
|
{
|
||||||
*output = ctx->stable_type;
|
*output = ctx->stable_type;
|
||||||
ctx->unified_timer = 0;
|
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
|
else
|
||||||
{
|
{
|
||||||
@@ -191,54 +187,54 @@ void detectLedState(BlinkDetector* ctx, uint8_t current_input, uint8_t* output)
|
|||||||
}
|
}
|
||||||
break;
|
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:
|
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->current_state = STT_BLINKING;// 进入闪烁确认状态
|
||||||
ctx->unified_timer = 0; // <EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʱ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
ctx->unified_timer = 0; // 重置超时计时
|
||||||
}
|
}
|
||||||
else // δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD>ֵ
|
else // 未达闪烁阈值
|
||||||
{
|
{
|
||||||
ctx->current_state = STT_STABLE; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>̬
|
ctx->current_state = STT_STABLE; // 返回稳定状态
|
||||||
ctx->unified_timer = 0; // <EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD>ʱ<EFBFBD><EFBFBD>
|
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)
|
if(current_input != ctx->last_input)
|
||||||
{
|
{
|
||||||
ctx->trans_count++; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۼ<EFBFBD>
|
ctx->trans_count++; // 翻转次数累计
|
||||||
ctx->last_input = current_input; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
ctx->last_input = current_input; // 更新最后检测值
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
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:
|
case STT_BLINKING:
|
||||||
{
|
{
|
||||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>仯<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// 检测电平变化计数
|
||||||
if(current_input != ctx->last_input)
|
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;
|
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)
|
else if(ctx->unified_timer >= BLINK_TIMEOUT)
|
||||||
{
|
{
|
||||||
ctx->current_state = STT_STABLE;
|
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;
|
ctx->unified_timer = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ctx->unified_timer ++; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ʱ<EFBFBD>ۼƼ<EFBFBD>ʱ
|
ctx->unified_timer ++; // 维持当前稳定时间累计计时
|
||||||
*output = 3; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸״̬
|
*output = 3; // 输出当前闪烁状态
|
||||||
}
|
}
|
||||||
break;
|
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)
|
void sbusCanDecode(void)
|
||||||
{
|
{
|
||||||
float SBUS2CANdecodeTemp = 0.0;
|
float SBUS2CANdecodeTemp = 0.0;
|
||||||
@@ -257,36 +253,18 @@ void sbusCanDecode(void)
|
|||||||
{
|
{
|
||||||
uart2RxFlag = 0;
|
uart2RxFlag = 0;
|
||||||
|
|
||||||
//ת<EFBFBD><EFBFBD>
|
//通道0 - 直接发送原始值
|
||||||
SBUS2CANdecodeTemp = (float)(sbus_data.channels[0]);
|
DF_Curvature = (int16_t)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;
|
|
||||||
}
|
|
||||||
|
|
||||||
//ת<EFBFBD><EFBFBD>
|
//通道1 - 直接发送原始值
|
||||||
SBUS2CANdecodeTemp = (float)(sbus_data.channels[1]);
|
DF_Speed = (int16_t)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>
|
//通道7 - 直接发送原始值
|
||||||
SBUS2CANdecodeTemp = (float)(sbus_data.channels[7]);
|
DF_Reserve = (int16_t)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
|
//SwA
|
||||||
if(sbus_data.channels[1] >= 1700)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
if(sbus_data.channels[1] >= 1700)//高位
|
||||||
{
|
{
|
||||||
DF_SwA = 1;
|
DF_SwA = 1;
|
||||||
}
|
}
|
||||||
@@ -296,35 +274,35 @@ void sbusCanDecode(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//SwB
|
//SwB
|
||||||
if(sbus_data.channels[6] >= 1700)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
if(sbus_data.channels[6] >= 1700)//第三档
|
||||||
{
|
{
|
||||||
DF_SwB = 2;
|
DF_SwB = 2;
|
||||||
}
|
}
|
||||||
else if(sbus_data.channels[6] <= 250)//<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>
|
else if(sbus_data.channels[6] <= 250)//第二档
|
||||||
{
|
{
|
||||||
DF_SwB = 0;
|
DF_SwB = 0;
|
||||||
}
|
}
|
||||||
else//<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
else//第一档
|
||||||
{
|
{
|
||||||
DF_SwB = 1;
|
DF_SwB = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//SwC
|
//SwC
|
||||||
if(sbus_data.channels[4] >= 1700)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
if(sbus_data.channels[4] >= 1700)//第三档
|
||||||
{
|
{
|
||||||
DF_SwC = 2;
|
DF_SwC = 2;
|
||||||
}
|
}
|
||||||
else if(sbus_data.channels[4] <= 250)//<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>
|
else if(sbus_data.channels[4] <= 250)//第二档
|
||||||
{
|
{
|
||||||
DF_SwC = 0;
|
DF_SwC = 0;
|
||||||
}
|
}
|
||||||
else//<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
else//第一档
|
||||||
{
|
{
|
||||||
DF_SwC = 1;
|
DF_SwC = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//SwD
|
//SwD
|
||||||
if(sbus_data.channels[5] >= 1700)//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
if(sbus_data.channels[5] >= 1700)//高位
|
||||||
{
|
{
|
||||||
DF_SwD = 1;
|
DF_SwD = 1;
|
||||||
}
|
}
|
||||||
@@ -333,20 +311,20 @@ void sbusCanDecode(void)
|
|||||||
DF_SwD = 0;
|
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
|
else
|
||||||
{
|
{
|
||||||
DF_RCHSta = 0;//<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
DF_RCHSta = 0;//遥控器离线
|
||||||
}
|
}
|
||||||
|
|
||||||
SBUS2CANdecodeTemp = (float)(sbus_data.channels[2]);
|
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]);
|
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)
|
void CanRXTX(void)
|
||||||
{
|
{
|
||||||
stCAN_SWObj StrCanRx = {0};
|
stCAN_SWObj StrCanRx = {0};
|
||||||
@@ -397,7 +375,7 @@ void CanRXTX(void)
|
|||||||
// UnInfCan_1.ArrData.ArrRX[1][5] = StrCanRx.ulDATAH.ubDB[3];
|
// UnInfCan_1.ArrData.ArrRX[1][5] = StrCanRx.ulDATAH.ubDB[3];
|
||||||
|
|
||||||
// CAN_vReleaseObj(DF_SwRxPwm);
|
// 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[0 ] = (ubyte)UnInfCan_1.BitData.Pwm_01;
|
||||||
//// PwmH[1 ] = (ubyte)UnInfCan_1.BitData.Pwm_02;
|
//// PwmH[1 ] = (ubyte)UnInfCan_1.BitData.Pwm_02;
|
||||||
//// PwmH[2 ] = (ubyte)UnInfCan_1.BitData.Pwm_03;
|
//// PwmH[2 ] = (ubyte)UnInfCan_1.BitData.Pwm_03;
|
||||||
@@ -417,7 +395,7 @@ void CanRXTX(void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//50ms<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ֡
|
//50ms发送一帧
|
||||||
if(!FlgCan_1)
|
if(!FlgCan_1)
|
||||||
{
|
{
|
||||||
FlgCan_1 = 1;
|
FlgCan_1 = 1;
|
||||||
@@ -430,9 +408,9 @@ void CanRXTX(void)
|
|||||||
// UnRemoteControlOutput_2.bit_data.reserve1 = sbus_temp[1];
|
// 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;
|
match_freq_time = MATCH_TIME;
|
||||||
}
|
}
|
||||||
@@ -444,15 +422,15 @@ void CanRXTX(void)
|
|||||||
switch(match_freq_sta)
|
switch(match_freq_sta)
|
||||||
{
|
{
|
||||||
case 0:
|
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_sta = 1;
|
||||||
match_freq_cnt = 0;
|
match_freq_cnt = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SwOut01 = 1;//<EFBFBD><EFBFBD>Ƶָ<EFBFBD><EFBFBD>
|
SwOut01 = 1;//对频指令
|
||||||
match_freq_sta = 0;
|
match_freq_sta = 0;
|
||||||
match_freq_cnt ++;
|
match_freq_cnt ++;
|
||||||
}
|
}
|
||||||
@@ -461,14 +439,14 @@ void CanRXTX(void)
|
|||||||
case 1:
|
case 1:
|
||||||
if(match_freq_cnt >= MATCH_WAIT_TIME)//
|
if(match_freq_cnt >= MATCH_WAIT_TIME)//
|
||||||
{
|
{
|
||||||
SwOut01 = 0;//ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
|
SwOut01 = 0;//取消对频
|
||||||
match_freq_sta = 0;
|
match_freq_sta = 0;
|
||||||
match_freq_cnt = 0;
|
match_freq_cnt = 0;
|
||||||
UnInfCan_1.ArrData.ArrRX[0][0] = 0;
|
UnInfCan_1.ArrData.ArrRX[0][0] = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SwOut01 = 0;//<EFBFBD><EFBFBD>Ƶָ<EFBFBD><EFBFBD>
|
SwOut01 = 0;//对频指令
|
||||||
match_freq_sta = 1;
|
match_freq_sta = 1;
|
||||||
match_freq_cnt ++;
|
match_freq_cnt ++;
|
||||||
}
|
}
|
||||||
@@ -481,7 +459,7 @@ void CanRXTX(void)
|
|||||||
CanTransmit(DF_SwTx1,(ubyte *)&UnRemoteControlOutput_2.arr[0]);
|
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_error_flg = can_error_cnt;
|
||||||
CAN_vInit();
|
CAN_vInit();
|
||||||
@@ -491,18 +469,3 @@ void CanRXTX(void)
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
69
user.H
69
user.H
@@ -2,19 +2,19 @@
|
|||||||
#define _user_H_
|
#define _user_H_
|
||||||
|
|
||||||
|
|
||||||
#define SAMPLE_INTERVAL 50 // 50ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
#define SAMPLE_INTERVAL 50 // 50ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
#define BLINK_TIMEOUT (1000 / SAMPLE_INTERVAL) // 1<><31><EFBFBD>ȶ<EFBFBD>ȷ<EFBFBD><C8B7>
|
#define BLINK_TIMEOUT (1000 / SAMPLE_INTERVAL) // 1<><31><EFBFBD>ȶ<EFBFBD>ȷ<EFBFBD><C8B7>
|
||||||
#define BLINK_WINDOW (1000 / SAMPLE_INTERVAL) // 1<><31><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD>ⴰ<EFBFBD><EFBFBD>
|
#define BLINK_WINDOW (1000 / SAMPLE_INTERVAL) // 1<><31><EFBFBD><EFBFBD>˸<EFBFBD><CBB8>ⴰ<EFBFBD><E2B4B0>
|
||||||
#define STABLE_CONFIRM_TIME (1000 / SAMPLE_INTERVAL) // 1<><31><EFBFBD><EFBFBD>˸<EFBFBD><CBB8><EFBFBD>ⴰ<EFBFBD><EFBFBD>
|
#define STABLE_CONFIRM_TIME (1000 / SAMPLE_INTERVAL) // 1<><31><EFBFBD><EFBFBD>˸<EFBFBD><CBB8>ⴰ<EFBFBD><E2B4B0>
|
||||||
#define MIN_BLINKS 2
|
#define MIN_BLINKS 2
|
||||||
|
|
||||||
#define MATCH_TIME (2000 / SAMPLE_INTERVAL)//<2F><>Ƶʱ<C6B5><CAB1>
|
#define MATCH_TIME (2000 / SAMPLE_INTERVAL)//<2F><>Ƶʱ<C6B5><CAB1>
|
||||||
#define MATCH_WAIT_TIME (1000 / SAMPLE_INTERVAL)//<2F><>Ƶ<EFBFBD>꣬<EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1>
|
#define MATCH_WAIT_TIME (1000 / SAMPLE_INTERVAL)//<2F><>Ƶ<EFBFBD>꣬<EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1>
|
||||||
|
|
||||||
#define CHANGE_TIME (200 / SAMPLE_INTERVAL)//<2F><>Ƶʱ<C6B5><CAB1>
|
#define CHANGE_TIME (200 / SAMPLE_INTERVAL)//<2F><>Ƶʱ<C6B5><CAB1>
|
||||||
|
|
||||||
#define MATCH_CMD 0xDB//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
|
#define MATCH_CMD 0xDB//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
|
||||||
#define CHANGE_CMD 0xBD//<2F>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
|
#define CHANGE_CMD 0xBD//<2F>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
|
|
||||||
#define uint32_t ulong
|
#define uint32_t ulong
|
||||||
@@ -64,25 +64,25 @@
|
|||||||
#define dfOut_15 SwOut11 //KGF15
|
#define dfOut_15 SwOut11 //KGF15
|
||||||
#define dfOut_16 SwOut12 //KGF16
|
#define dfOut_16 SwOut12 //KGF16
|
||||||
|
|
||||||
#define dfPwmH 10 //PWM<57><4D>???<3F><>???<3F><><EFBFBD><EFBFBD>??<3F><>?10<31><30>?10ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>???<3F><>?D<><44><EFBFBD><EFBFBD>a2a<32><61>?20181227
|
#define dfPwmH 10 //PWM<57><4D>???<3F><>???<3F><><EFBFBD><EFBFBD>??<3F><>?10<31><30>?10ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>???<3F><>?D<><44><EFBFBD><EFBFBD>a2a<32><61>?20181227
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define DF_ZeroValue 1000//?<3F><>?Y<><59><EFBFBD><EFBFBD>???<3F>¡<EFBFBD>???0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>y?Y?a1022
|
#define DF_ZeroValue 1000//?<3F><>?Y<><59><EFBFBD><EFBFBD>???<3F>¡<EFBFBD>???0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>y?Y?a1022
|
||||||
|
|
||||||
#define DF_Speed UnRemoteControlOutput_1.bit_data.speed//?<3F><>?<3F><>
|
#define DF_Speed UnRemoteControlOutput_1.bit_data.speed//?<3F><>?<3F><>
|
||||||
#define DF_Curvature UnRemoteControlOutput_1.bit_data.curvature//<2F><>a<EFBFBD><61>?
|
#define DF_Curvature UnRemoteControlOutput_1.bit_data.curvature//<2F><>a<EFBFBD><61>?
|
||||||
#define DF_Reserve UnRemoteControlOutput_1.bit_data.reserve1//<2F><><EFBFBD>ꨢ?
|
#define DF_Reserve UnRemoteControlOutput_1.bit_data.reserve1//<2F><><EFBFBD>ꨢ?
|
||||||
#define DF_SwA UnRemoteControlOutput_1.bit_data.switch_a//DF_SwA
|
#define DF_SwA UnRemoteControlOutput_1.bit_data.switch_a//DF_SwA
|
||||||
#define DF_SwB UnRemoteControlOutput_1.bit_data.switch_b//DF_SwB
|
#define DF_SwB UnRemoteControlOutput_1.bit_data.switch_b//DF_SwB
|
||||||
#define DF_SwC UnRemoteControlOutput_1.bit_data.switch_c//DF_SwC
|
#define DF_SwC UnRemoteControlOutput_1.bit_data.switch_c//DF_SwC
|
||||||
#define DF_SwD UnRemoteControlOutput_1.bit_data.switch_d//DF_SwD
|
#define DF_SwD UnRemoteControlOutput_1.bit_data.switch_d//DF_SwD
|
||||||
#define DF_RCHSta UnRemoteControlOutput_1.bit_data.enable//<2F><>?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1?<3F><><EFBFBD><EFBFBD><EFBFBD>䨬?
|
#define DF_RCHSta UnRemoteControlOutput_1.bit_data.enable//<2F><>?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1?<3F><><EFBFBD><EFBFBD><EFBFBD>䨬?
|
||||||
|
|
||||||
//#define DF_RCHEmSwSta UnRCH_1.BitData.RCHBit07//?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?a1?<3F><><EFBFBD>䨬?<3F><>1?<3F><><EFBFBD><EFBFBD><EFBFBD>䨬?
|
//#define DF_RCHEmSwSta UnRCH_1.BitData.RCHBit07//?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?a1?<3F><><EFBFBD>䨬?<3F><>1?<3F><><EFBFBD><EFBFBD><EFBFBD>䨬?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -98,10 +98,10 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ?<3F><><EFBFBD><EFBFBD>?2<><32>3?<3F><>??<3F><> SBus ?a???<3F><>11<31><31>?
|
// ?<3F><><EFBFBD><EFBFBD>?2<><32>3?<3F><>??<3F><> SBus ?a???<3F><>11<31><31>?
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16_t channels[16]; // <20><>?<3F><><EFBFBD><EFBFBD>16??<3F><><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD>??a???<3F><>1?
|
uint16_t channels[16]; // <20><>?<3F><><EFBFBD>16??<3F><><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD>??a???<3F><>1?
|
||||||
uint8_t flags; // <20><><EFBFBD><EFBFBD>??<3F><>??<3F><>
|
uint8_t flags; // <20><><EFBFBD><EFBFBD>??<3F><>??<3F><>
|
||||||
} SBusData;
|
} SBusData;
|
||||||
|
|
||||||
|
|
||||||
@@ -109,30 +109,30 @@ typedef struct {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ?<3F><><EFBFBD><EFBFBD>?<3F><><EFBFBD><EFBFBD>???<3F>¨<EFBFBD>?<3F><>?
|
// ?<3F><><EFBFBD><EFBFBD>?<3F><><EFBFBD><EFBFBD>???<3F>¨<EFBFBD>?<3F><>?
|
||||||
typedef struct _StrRemoteControlOutput
|
typedef struct _StrRemoteControlOutput
|
||||||
{
|
{
|
||||||
//-----<2D><><EFBFBD><EFBFBD>?<3F><><EFBFBD><EFBFBD>y?Y0x12000023----------------------------------------------
|
//-----<2D><><EFBFBD><EFBFBD>?<3F><><EFBFBD><EFBFBD>y?Y0x12000023----------------------------------------------
|
||||||
signed int speed : 16; // ?<3F><>?<3F><>
|
signed int speed : 16; // ?<3F><>?<3F><>
|
||||||
signed int curvature : 16; // ?<3F><>?<3F><>
|
signed int curvature : 16; // ?<3F><>?<3F><>
|
||||||
|
|
||||||
|
|
||||||
unsigned int reserve1 : 16; // <20><><EFBFBD><EFBFBD>???<3F><>
|
unsigned int reserve1 : 16; // <20><><EFBFBD><EFBFBD>???<3F><>
|
||||||
|
|
||||||
unsigned int switch_a : 1; // SwA
|
unsigned int switch_a : 1; // SwA
|
||||||
unsigned int switch_b : 2; // SwB ?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?a1? 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? 0/2<><32>??<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
unsigned int switch_b : 2; // SwB ?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?a1? 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? 0/2<><32>??<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
unsigned int switch_c : 2; // SwC ?<3F>??a1? 1<><31>??<3F><> 0/2<><32>?<3F><>??<3F><>
|
unsigned int switch_c : 2; // SwC ?<3F>??a1? 1<><31>??<3F><> 0/2<><32>?<3F><>??<3F><>
|
||||||
unsigned int switch_d : 1; // SwD <20><>?<3F><>??a1? ?<3F><>?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F><>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
unsigned int switch_d : 1; // SwD <20><>?<3F><>??a1? ?<3F><>?<3F><><EFBFBD><EFBFBD><EFBFBD>?<3F><>3<EFBFBD><33><EFBFBD><EFBFBD>
|
||||||
unsigned int reserve2 : 1; // <20><><EFBFBD>ꨢ?
|
unsigned int reserve2 : 1; // <20><><EFBFBD>ꨢ?
|
||||||
unsigned int reserve3 : 1; // <20><><EFBFBD>ꨢ?
|
unsigned int reserve3 : 1; // <20><><EFBFBD>ꨢ?
|
||||||
|
|
||||||
unsigned int enable : 8; // <20><>1?<3F><>
|
unsigned int enable : 8; // <20><>1?<3F><>
|
||||||
} StrRemoteControlInput;
|
} StrRemoteControlInput;
|
||||||
|
|
||||||
typedef union _UnRemoteControlInput
|
typedef union _UnRemoteControlInput
|
||||||
{
|
{
|
||||||
StrRemoteControlInput bit_data; // <20><>1<EFBFBD><31>??<3F><><EFBFBD><EFBFBD>?<3F><>??<3F><>11<31><31>?<3F><>?<3F><>???
|
StrRemoteControlInput bit_data; // <20><>1<EFBFBD><31>??<3F><><EFBFBD><EFBFBD>?<3F><>??<3F><>11<31><31>?<3F><>?<3F><>???
|
||||||
uint8_t arr[sizeof(StrRemoteControlInput)]; // <20><><EFBFBD><EFBFBD>1y?<3F><>11<31><31>?<3F><><EFBFBD><EFBFBD>D<EFBFBD><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F><><EFBFBD>䨮D?
|
uint8_t arr[sizeof(StrRemoteControlInput)]; // <20><><EFBFBD><EFBFBD>1y?<3F><>11<31><31>?<3F><><EFBFBD><EFBFBD>D<EFBFBD><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F><><EFBFBD>䨮D?
|
||||||
} UnRemoteControlOutput;
|
} UnRemoteControlOutput;
|
||||||
|
|
||||||
|
|
||||||
@@ -141,7 +141,7 @@ typedef union _UnRemoteControlInput
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//---<2D><>a2?<3F><>a<EFBFBD><61>1<EFBFBD><31>?<3F><>?<3F><>?<3F><><EFBFBD><EFBFBD>?<3F><>---------------------------------------------------------------------
|
//---<2D><>a2?<3F><>a<EFBFBD><61>1<EFBFBD><31>?<3F><>?<3F><>?<3F><><EFBFBD><EFBFBD>?<3F><>---------------------------------------------------------------------
|
||||||
extern UnSwOut UnSwOut_1;
|
extern UnSwOut UnSwOut_1;
|
||||||
extern UnInfCan UnInfCan_1;
|
extern UnInfCan UnInfCan_1;
|
||||||
extern uword CntCan_1;
|
extern uword CntCan_1;
|
||||||
@@ -150,7 +150,8 @@ extern bit FlgCan_1;
|
|||||||
extern ubyte rxbuf[25];
|
extern ubyte rxbuf[25];
|
||||||
extern ubyte uart2RxFlag;
|
extern ubyte uart2RxFlag;
|
||||||
extern ubyte can_error_cnt;
|
extern ubyte can_error_cnt;
|
||||||
|
extern ubyte RestartDataFlg1;
|
||||||
|
extern ubyte RestartDataFlg2;
|
||||||
|
|
||||||
void CanRXTX(void);
|
void CanRXTX(void);
|
||||||
void SwSample(void);
|
void SwSample(void);
|
||||||
|
|||||||
Reference in New Issue
Block a user