Commit 0e4e8eb5 authored by 时昊's avatar 时昊

feat:增加can功能,外发,接收,初始化

parent 0fb7e3f4
// #include "Can_User.h"
// #include <string.h>
// #include "can.h"
// #include "RTE.h"
// #include "CAN_CH0_CAN_Communication_Matrix.h"
// __align(4)
// uint32_t pRXBuff[CAN_RX_MSG_Block * CAN_CH0_ID_TOTAL_MAX];
// uint32_t pTXBuff[CAN_TX_MSG_Block * CAN_CH0_ID_SEND_TOTAL];
// static RSCAN0BusoffMonitorStruct RSCAN0Busoff;
// void Can_Init(void)
// {
// can_config_st_t Can_Config;
// Can_Config.ch = CAN_CH_0;
// Can_Config.freq = CAN_500Kbps;
// Can_Config.MASK[0] = 0x001fffffU;
// Can_Config.MASK[1] = 0x000fffffU;
// Can_Config.MASK[2] = 0x1fffffffU;
// Can_Config.MASK[3] = 0x1fffffffU;
// Can_Config.rx_callback = Can_Rx_Cak;
// COM_CAN_Init();
// rte_can_init(&Can_Config);
// Can_Tx_Apply_Buff();
// Can_RX_Apply_Buff();
// RTE_GPIO_Set_Level(RTE_GPIO_PORT05_PIN02,RTE_GPIO_LEVEL_LOW);
// }
// /**
// * @brief 用于申请RXBUFF CAN0MSG00~CAN0MSG07
// *
// */
// void Can_RX_Apply_Buff(void)
// {
// CAN_RecvMsg.Id = 0x101;
// CAN_RecvMsg.IDE = CAN_Id_Standard;
// CAN_RecvMsg.CacheType = CAN_CacheType_Rx_NoMask;
// CAN_RecvMsg.RTR = CAN_RTR_Data;
// CAN_RecvMsg.Interrupt = ENABLE;
// CAN_MessageCache_DeInit(CAN0MSG01);
// CAN_MessageCache_Init(CAN0MSG01, &CAN_RecvMsg);
// CAN_MessageCache_OverWriteConfig(CAN0MSG01, ENABLE);
// // CAN_RecvMsg.Id = DIAG_ID_Rx_PHY;
// // CAN_RecvMsg.IDE = CAN_Id_Standard;
// // CAN_RecvMsg.CacheType = CAN_CacheType_Rx_NoMask;
// // CAN_RecvMsg.RTR = CAN_RTR_Data;
// // CAN_RecvMsg.Interrupt = ENABLE;
// // CAN_MessageCache_DeInit(CAN0MSG03);
// // CAN_MessageCache_Init(CAN0MSG03, &CAN_RecvMsg);
// // CAN_MessageCache_OverWriteConfig(CAN0MSG03, ENABLE);
// // CAN_RecvMsg.Id = DIAG_ID_Rx_FUN;
// // CAN_RecvMsg.IDE = CAN_Id_Standard;
// // CAN_RecvMsg.CacheType = CAN_CacheType_Rx_NoMask;
// // CAN_RecvMsg.RTR = CAN_RTR_Data;
// // CAN_RecvMsg.Interrupt = ENABLE;
// // CAN_MessageCache_DeInit(CAN0MSG04);
// // CAN_MessageCache_Init(CAN0MSG04, &CAN_RecvMsg);
// // CAN_MessageCache_OverWriteConfig(CAN0MSG04, ENABLE);
// }
// /**
// * @brief 用于申请TXBUFF
// *
// */
// void Can_Tx_Apply_Buff(void)
// {
// CanTxRxMsg CAN_SendMsg;
// CanTxRxMsg CAN_SendMsg_Diag_Tx;
// CAN_SendMsg.Id = 0x500;
// CAN_SendMsg.IDE = CAN_Id_Standard;
// CAN_SendMsg.CacheType = CAN_CacheType_Tx;
// CAN_SendMsg.RTR = CAN_RTR_Data;
// CAN_RecvMsg.Interrupt = DISABLE;
// CAN_SendMsg.DLC = 8;
// for (uint8_t i = 0; i < CAN_SendMsg.DLC; i++)
// {
// CAN_SendMsg.Data[i] = 0;
// }
// CAN_MessageCache_DeInit(CAN0MSG08);
// CAN_MessageCache_Init(CAN0MSG08, &CAN_SendMsg);
// // CAN_SendMsg_Diag_Tx.Id = DIAG_ID_Tx;
// // CAN_SendMsg_Diag_Tx.IDE = CAN_Id_Standard;
// // CAN_SendMsg_Diag_Tx.CacheType = CAN_CacheType_Tx;
// // CAN_SendMsg_Diag_Tx.RTR = CAN_RTR_Data;
// // CAN_SendMsg_Diag_Tx.Interrupt = DISABLE;
// // CAN_SendMsg_Diag_Tx.DLC = 8;
// // for (uint8_t i = 0; i < CAN_SendMsg_Diag_Tx.DLC; i++)
// // {
// // CAN_SendMsg_Diag_Tx.Data[i] = 0;
// // }
// // CAN_MessageCache_DeInit(CAN0MSG09);
// // CAN_MessageCache_Init(CAN0MSG09, &CAN_SendMsg_Diag_Tx);
// }
// /**
// * @brief 用于接收回调函数
// * @code
// */
// void Can_Rx_Cak(CanTxRxMsg *Msg)
// {
// Co_Can_Buff_Set(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(Msg->Id), Msg->DLC, Msg->Data);
// if ((Msg->Id == DIAG_ID_Rx_FUN) || (Msg->Id == DIAG_ID_Rx_PHY))
// {
// DoCAN_L_Data_Indication(Msg->Id, Msg->DLC, Msg->Data);
// }
// }
// /**
// * @brief CAN库初始化TX/RX
// *
// */
// void COM_CAN_Init(void)
// {
// memset(pRXBuff, 0, sizeof(pRXBuff));
// CAN_CH0_CanMsgOp.CAN_MSG_Analysis = (st_CANMsgStruct *)pRXBuff;
// CAN_CH0_CanMsgOp.pAttrubute = CAN_CH0_CAN_MSG_CONST_ARRAY;
// CAN_CH0_CanMsgOp.Total_Msg = CAN_CH0_ID_TOTAL_MAX;
// CAN_CH0_CanMsgOp.u8CAN_RX_ENABLE = CAN_N_RX_Enable;
// Can_RX_BuffInit(&CAN_CH0_CanMsgOp, CAN_CH0_CAN_MSG_CONST_ARRAY, CAN_CH0_ID_TOTAL_MAX);
// CAN_RX_SetEnable(&CAN_CH0_CanMsgOp, CAN_N_RX_Enable);
// memset(pTXBuff, 0, sizeof(pTXBuff));
// CAN_CH0_CanMsgTxOp.CanMsg = (st_CAN_SendOperation *)pTXBuff;
// Can_TX_BuffInit(&CAN_CH0_CanMsgTxOp, CAN_CH0_CANSendAttr, CAN_CH0_ID_SEND_TOTAL, COM_APP_Process);
// CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable);
// }
// /**
// * @brief Buff恢复函数
// * @param deltaTime 调用时间 单位ms 10MS调用
// */
// void Can_BusOff_Recover(uint8_t deltaTime)
// {
// if (get_can_busoff(CAN_CH_0) == 2)
// {
// if (RSCAN0Busoff.Status == RSCAN0_BUS_STABLE)
// {
// RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV1;
// }
// if (RSCAN0Busoff.Status == RSCAN0_BUS_OFF_LV1)
// {
// RSCAN0Busoff.Timer++;
// if (RSCAN0Busoff.Timer >= RSCAN0_BUS_OFF_LV1_RECOVERY_TIME / deltaTime)
// {
// RSCAN0Busoff.Timer = 0U;
// RSCAN0Busoff.Cnt++;
// if (RSCAN0Busoff.Cnt >= 10U)
// {
// RSCAN0Busoff.Cnt = 0U;
// RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV2;
// }
// reset_busoff(CAN_CH_0);
// }
// }
// else if (RSCAN0Busoff.Status == RSCAN0_BUS_OFF_LV2)
// {
// RSCAN0Busoff.Timer++;
// if (RSCAN0Busoff.Timer >= RSCAN0_BUS_OFF_LV2_RECOVERY_TIME / deltaTime)
// {
// RSCAN0Busoff.Timer = 0U;
// reset_busoff(CAN_CH_0);
// }
// }
// else
// {
// }
// }
// else /* 总线正常,没有Bus-off发生*/
// {
// }
// }
// /**
// * @brief 获取busoff状态
// * @return 0 没有busoff
// * 1 错误的操作
// * 2 busoff
// */
// uint8_t Get_Busoff_Status(void)
// {
// return get_can_busoff(CAN_CH_0);
// }
// uint8_t COM_APP_Process(st_CAN_Msg *Msg)
// {
// Can_Write((st_CAN_Msg *)Msg);
// return 0;
// }
// void Can_Write(st_CAN_Msg *Msg)
// {
// uint32_t i = 0;
// CanTxRxMsg CAN_SendMsg;
// CAN_SendMsg.Id = Msg->MsgID; /* ID */
// CAN_SendMsg.DLC = Msg->MsgDLC; /* Len */
// CAN_SendMsg.RTR = Msg->MsgRTR; /* Default 0 */
// CAN_SendMsg.IDE = CAN_Id_Standard; /* Stand 0 Ext 1 */
// CAN_SendMsg.CacheType = CAN_CacheType_Tx;
// for (i = 0; i < CAN_SendMsg.DLC; i++) /* 获取数据 */
// {
// CAN_SendMsg.Data[i] = Msg->Msg[i];
// }
// switch (CAN_SendMsg.Id)
// {
// case 0x500:
// CAN_Transmit(CAN0MSG08, &CAN_SendMsg);
// break;
// default:
// break;
// }
// }
#include "Can_User.h"
#include <string.h>
#include "can.h"
#include "RTE.h"
#include "CAN_CH0_CAN_Communication_Matrix.h"
__align(4)
uint32_t pRXBuff[CAN_RX_MSG_Block * CAN_CH0_ID_TOTAL_MAX];
uint32_t pTXBuff[CAN_TX_MSG_Block * CAN_CH0_ID_SEND_TOTAL];
static RSCAN0BusoffMonitorStruct RSCAN0Busoff;
void Can_Init(void)
{
can_config_st_t Can_Config;
Can_Config.ch = CAN_CH_0;
Can_Config.freq = CAN_500Kbps;
Can_Config.MASK[0] = 0x001fffffU;
Can_Config.MASK[1] = 0x000fffffU;
Can_Config.MASK[2] = 0x1fffffffU;
Can_Config.MASK[3] = 0x1fffffffU;
Can_Config.rx_callback = Can_Rx_Cak;
COM_CAN_Init();
rte_can_init(&Can_Config);
Can_Tx_Apply_Buff();
Can_RX_Apply_Buff();
RTE_GPIO_Set_Level(RTE_GPIO_PORT05_PIN02,RTE_GPIO_LEVEL_LOW);
}
/**
* @brief 用于申请RXBUFF CAN0MSG00~CAN0MSG07
*
*/
void Can_RX_Apply_Buff(void)
{
CAN_RecvMsg.Id = 0x101;
CAN_RecvMsg.IDE = CAN_Id_Standard;
CAN_RecvMsg.CacheType = CAN_CacheType_Rx_NoMask;
CAN_RecvMsg.RTR = CAN_RTR_Data;
CAN_RecvMsg.Interrupt = ENABLE;
CAN_MessageCache_DeInit(CAN0MSG01);
CAN_MessageCache_Init(CAN0MSG01, &CAN_RecvMsg);
CAN_MessageCache_OverWriteConfig(CAN0MSG01, ENABLE);
// CAN_RecvMsg.Id = DIAG_ID_Rx_PHY;
// CAN_RecvMsg.IDE = CAN_Id_Standard;
// CAN_RecvMsg.CacheType = CAN_CacheType_Rx_NoMask;
// CAN_RecvMsg.RTR = CAN_RTR_Data;
// CAN_RecvMsg.Interrupt = ENABLE;
// CAN_MessageCache_DeInit(CAN0MSG03);
// CAN_MessageCache_Init(CAN0MSG03, &CAN_RecvMsg);
// CAN_MessageCache_OverWriteConfig(CAN0MSG03, ENABLE);
// CAN_RecvMsg.Id = DIAG_ID_Rx_FUN;
// CAN_RecvMsg.IDE = CAN_Id_Standard;
// CAN_RecvMsg.CacheType = CAN_CacheType_Rx_NoMask;
// CAN_RecvMsg.RTR = CAN_RTR_Data;
// CAN_RecvMsg.Interrupt = ENABLE;
// CAN_MessageCache_DeInit(CAN0MSG04);
// CAN_MessageCache_Init(CAN0MSG04, &CAN_RecvMsg);
// CAN_MessageCache_OverWriteConfig(CAN0MSG04, ENABLE);
}
/**
* @brief 用于申请TXBUFF
*
*/
void Can_Tx_Apply_Buff(void)
{
CanTxRxMsg CAN_SendMsg;
CanTxRxMsg CAN_SendMsg_Diag_Tx;
CAN_SendMsg.Id = 0x500;
CAN_SendMsg.IDE = CAN_Id_Standard;
CAN_SendMsg.CacheType = CAN_CacheType_Tx;
CAN_SendMsg.RTR = CAN_RTR_Data;
CAN_RecvMsg.Interrupt = DISABLE;
CAN_SendMsg.DLC = 8;
for (uint8_t i = 0; i < CAN_SendMsg.DLC; i++)
{
CAN_SendMsg.Data[i] = 0;
}
CAN_MessageCache_DeInit(CAN0MSG08);
CAN_MessageCache_Init(CAN0MSG08, &CAN_SendMsg);
// CAN_SendMsg_Diag_Tx.Id = DIAG_ID_Tx;
// CAN_SendMsg_Diag_Tx.IDE = CAN_Id_Standard;
// CAN_SendMsg_Diag_Tx.CacheType = CAN_CacheType_Tx;
// CAN_SendMsg_Diag_Tx.RTR = CAN_RTR_Data;
// CAN_SendMsg_Diag_Tx.Interrupt = DISABLE;
// CAN_SendMsg_Diag_Tx.DLC = 8;
// for (uint8_t i = 0; i < CAN_SendMsg_Diag_Tx.DLC; i++)
// {
// CAN_SendMsg_Diag_Tx.Data[i] = 0;
// }
// CAN_MessageCache_DeInit(CAN0MSG09);
// CAN_MessageCache_Init(CAN0MSG09, &CAN_SendMsg_Diag_Tx);
}
/**
* @brief 用于接收回调函数
* @code
*/
void Can_Rx_Cak(CanTxRxMsg *Msg)
{
Co_Can_Buff_Set(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(Msg->Id), Msg->DLC, Msg->Data);
// if ((Msg->Id == DIAG_ID_Rx_FUN) || (Msg->Id == DIAG_ID_Rx_PHY))
// {
// DoCAN_L_Data_Indication(Msg->Id, Msg->DLC, Msg->Data);
// }
}
/**
* @brief CAN库初始化TX/RX
*
*/
void COM_CAN_Init(void)
{
memset(pRXBuff, 0, sizeof(pRXBuff));
CAN_CH0_CanMsgOp.CAN_MSG_Analysis = (st_CANMsgStruct *)pRXBuff;
CAN_CH0_CanMsgOp.pAttrubute = CAN_CH0_CAN_MSG_CONST_ARRAY;
CAN_CH0_CanMsgOp.Total_Msg = CAN_CH0_ID_TOTAL_MAX;
CAN_CH0_CanMsgOp.u8CAN_RX_ENABLE = CAN_N_RX_Enable;
Can_RX_BuffInit(&CAN_CH0_CanMsgOp, CAN_CH0_CAN_MSG_CONST_ARRAY, CAN_CH0_ID_TOTAL_MAX);
CAN_RX_SetEnable(&CAN_CH0_CanMsgOp, CAN_N_RX_Enable);
memset(pTXBuff, 0, sizeof(pTXBuff));
CAN_CH0_CanMsgTxOp.CanMsg = (st_CAN_SendOperation *)pTXBuff;
Can_TX_BuffInit(&CAN_CH0_CanMsgTxOp, CAN_CH0_CANSendAttr, CAN_CH0_ID_SEND_TOTAL, COM_APP_Process);
CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable);
}
/**
* @brief Buff恢复函数
* @param deltaTime 调用时间 单位ms 10MS调用
*/
void Can_BusOff_Recover(uint8_t deltaTime)
{
if (get_can_busoff(CAN_CH_0) == 2)
{
if (RSCAN0Busoff.Status == RSCAN0_BUS_STABLE)
{
RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV1;
}
if (RSCAN0Busoff.Status == RSCAN0_BUS_OFF_LV1)
{
RSCAN0Busoff.Timer++;
if (RSCAN0Busoff.Timer >= RSCAN0_BUS_OFF_LV1_RECOVERY_TIME / deltaTime)
{
RSCAN0Busoff.Timer = 0U;
RSCAN0Busoff.Cnt++;
if (RSCAN0Busoff.Cnt >= 10U)
{
RSCAN0Busoff.Cnt = 0U;
RSCAN0Busoff.Status = RSCAN0_BUS_OFF_LV2;
}
reset_busoff(CAN_CH_0);
}
}
else if (RSCAN0Busoff.Status == RSCAN0_BUS_OFF_LV2)
{
RSCAN0Busoff.Timer++;
if (RSCAN0Busoff.Timer >= RSCAN0_BUS_OFF_LV2_RECOVERY_TIME / deltaTime)
{
RSCAN0Busoff.Timer = 0U;
reset_busoff(CAN_CH_0);
}
}
else
{
}
}
else /* 总线正常,没有Bus-off发生*/
{
}
}
/**
* @brief 获取busoff状态
* @return 0 没有busoff
* 1 错误的操作
* 2 busoff
*/
uint8_t Get_Busoff_Status(void)
{
return get_can_busoff(CAN_CH_0);
}
uint8_t COM_APP_Process(st_CAN_Msg *Msg)
{
Can_Write((st_CAN_Msg *)Msg);
return 0;
}
void Can_Write(st_CAN_Msg *Msg)
{
uint32_t i = 0;
CanTxRxMsg CAN_SendMsg;
CAN_SendMsg.Id = Msg->MsgID; /* ID */
CAN_SendMsg.DLC = Msg->MsgDLC; /* Len */
CAN_SendMsg.RTR = Msg->MsgRTR; /* Default 0 */
CAN_SendMsg.IDE = CAN_Id_Standard; /* Stand 0 Ext 1 */
CAN_SendMsg.CacheType = CAN_CacheType_Tx;
for (i = 0; i < CAN_SendMsg.DLC; i++) /* 获取数据 */
{
CAN_SendMsg.Data[i] = Msg->Msg[i];
}
switch (CAN_SendMsg.Id)
{
case 0x500:
CAN_Transmit(CAN0MSG08, &CAN_SendMsg);
break;
default:
break;
}
}
// #ifndef _CAN_USER_H_
// #define _CAN_USER_H_
// #include "RTE.h"
// #include "Components.h"
#ifndef _CAN_USER_H_
#define _CAN_USER_H_
#include "RTE.h"
#include "Components.h"
// /******************************************************************************
// Bus-off
// ******************************************************************************/
// #define RSCAN0_BUS_STABLE 0x00U
// #define RSCAN0_BUS_OFF_LV1 0x01U
// #define RSCAN0_BUS_OFF_LV2 0x02U
// #define RSCAN00_BUS_LIMP 0x03U
// /******************************************************************************
// Bus-off
// ******************************************************************************/
/******************************************************************************
Bus-off
******************************************************************************/
#define RSCAN0_BUS_STABLE 0x00U
#define RSCAN0_BUS_OFF_LV1 0x01U
#define RSCAN0_BUS_OFF_LV2 0x02U
#define RSCAN00_BUS_LIMP 0x03U
/******************************************************************************
Bus-off
******************************************************************************/
// #define RSCAN0_BUS_OFF_LV1_RECOVERY_TIME 90U
// #define RSCAN0_BUS_OFF_LV2_RECOVERY_TIME 1000U
#define RSCAN0_BUS_OFF_LV1_RECOVERY_TIME 90U
#define RSCAN0_BUS_OFF_LV2_RECOVERY_TIME 1000U
// typedef struct
// {
// uint8_t Status;
// uint8_t Timer;
// uint8_t Cnt;
// uint8_t ReportDTCCnt;
// } RSCAN0BusoffMonitorStruct;
typedef struct
{
uint8_t Status;
uint8_t Timer;
uint8_t Cnt;
uint8_t ReportDTCCnt;
} RSCAN0BusoffMonitorStruct;
// extern void Can_Tx_Apply_Buff(void);
// extern void Can_RX_Apply_Buff(void);
// extern void Can_BusOff_Recover(uint8_t deltaTime);
// extern void COM_CAN_Init(void);
// extern void Can_Init(void);
// extern void Can_Rx_Cak(CanTxRxMsg *Msg);
// extern void Busoff(void);
// extern uint8_t COM_APP_Process(st_CAN_Msg *Msg);
// extern void Can_Write(st_CAN_Msg *Msg);
extern void Can_Tx_Apply_Buff(void);
extern void Can_RX_Apply_Buff(void);
extern void Can_BusOff_Recover(uint8_t deltaTime);
extern void COM_CAN_Init(void);
extern void Can_Init(void);
extern void Can_Rx_Cak(CanTxRxMsg *Msg);
extern void Busoff(void);
extern uint8_t COM_APP_Process(st_CAN_Msg *Msg);
extern void Can_Write(st_CAN_Msg *Msg);
// #endif
#endif
......@@ -4,7 +4,7 @@
uint32_t PowerIgnOnTimeLine;
uint32_t PowerIgnOffTimeLine;
uint32_t PowerIgnOffTimeLine;
static uint32_t PowerSocTimeLine;
......
......@@ -28,5 +28,7 @@
#include "Data_VSpeed.h"
#include "BackLight.h"
#include "RTC\RTE_RTC.h"
#include "CAN_Signal\CAN_Lib.h"
#include "CAN_CH0_CAN_Communication_Matrix.h"
#endif
......@@ -64,14 +64,13 @@ static void Power_KL30_Init(void)
g_stRTCInformation.u8RTCYear = 20;
//RTE_RTC_Init(g_stRTCInformation);
Menu_User_Init();
Can_Init();
Protocol_KL30_Wakeup_Init();
RTE_DEEPSLEEP_GPIO_Interrupt_Enable(KL15_AD_IN, Trigger_Rising);
}
//extern uint32_t PowerIgnOffTimeLine;
static void Power_Wakeup_Init(void)
{
// PowerIgnOffTimeLine = 0;
Gpio_Init(Gpio_WakeUp_Init);
eeprom_StoreInfo_Init();
Analog_Signal_Conv_Init();
......@@ -89,6 +88,7 @@ static void Power_Wakeup_Init(void)
//Telltales_Init();
Key_KL30_Init_EXample();
Menu_User_WAKEUP();
Can_Init();
Protocol_KL30_Wakeup_Init();
RTE_DEEPSLEEP_GPIO_Interrupt_Enable(KL15_AD_IN, Trigger_Rising);
}
......@@ -184,6 +184,7 @@ static Power_Status_em Power_Stay_Protect(void)
/* 关闭所有外设,坪保留AD采集,电溝状思切�? */
{
TimerM_PWM_set_duty(TIMERM_COUNTER1, TIMERM_CHB, 0);
CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Disable);
}
u8PowerSts = EM_IGN_OFF_Init;
/* 电溝模弝正常 */
......@@ -196,6 +197,7 @@ static Power_Status_em Power_Stay_Protect(void)
if ( SYS_OPR_STAT_RUN )
{
CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Enable);
return u8PowerSts;
}
......
......@@ -15,6 +15,8 @@ void Sys_2ms_Tasks(void)
Sys_Status_Update_Service();
Analog_Signal_Conv_Service();
AMT630H_Main();
Can_Write_Fun(&CAN_CH0_CanMsgTxOp, 2000u);
CanMSg_XMS_Analysis(&CAN_CH0_CanMsgOp, 2u);
}
void Sys_5ms_Tasks(void)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment