This commit is contained in:
parent
2f38a342f3
commit
c4a73d0399
|
@ -5,7 +5,7 @@
|
|||
"type": "mrs-debugger",
|
||||
"request": "launch",
|
||||
"name": "IoT_SCV_CH584M1",
|
||||
"cwd": "c:\\Users\\123\\Desktop\\物联网自闭阀\\iot_-scv_-ch584-m",
|
||||
"cwd": "c:\\Users\\123\\Desktop\\纯电自闭阀\\iot_-scv_-ch584-m",
|
||||
"openOCDCfg": {
|
||||
"useLocalOpenOCD": true,
|
||||
"executable": "d:/MounRiverV2/MounRiver_Studio2/resources/app/resources/win32/components/WCH/OpenOCD/OpenOCD/bin/openocd.exe",
|
||||
|
@ -39,8 +39,8 @@
|
|||
"additionalCommands": []
|
||||
},
|
||||
"loadedFiles": {
|
||||
"executableFile": "c:\\Users\\123\\Desktop\\物联网自闭阀\\iot_-scv_-ch584-m\\obj\\IoT_SCV_CH584M1.elf",
|
||||
"symbolFile": "c:\\Users\\123\\Desktop\\物联网自闭阀\\iot_-scv_-ch584-m\\obj\\IoT_SCV_CH584M1.elf",
|
||||
"executableFile": "c:\\Users\\123\\Desktop\\纯电自闭阀\\iot_-scv_-ch584-m\\obj\\IoT_SCV_CH584M1.elf",
|
||||
"symbolFile": "c:\\Users\\123\\Desktop\\纯电自闭阀\\iot_-scv_-ch584-m\\obj\\IoT_SCV_CH584M1.elf",
|
||||
"executableFileOffset": 0,
|
||||
"symbolFileOffset": 0
|
||||
},
|
||||
|
|
|
@ -32,6 +32,8 @@ extern "C" {
|
|||
#define SBP_PARAM_UPDATE_EVT 0x0008
|
||||
#define SBP_PHY_UPDATE_EVT 0x0010
|
||||
|
||||
#define SBP_REPLY_CMD_EVT 0x0020
|
||||
extern uint8_t Peripheral_TaskID;
|
||||
/*********************************************************************
|
||||
* MACROS
|
||||
*/
|
||||
|
|
142
APP/peripheral.c
142
APP/peripheral.c
|
@ -19,6 +19,17 @@
|
|||
#include "gattprofile.h"
|
||||
#include "peripheral.h"
|
||||
#include "bsp_iwdg.h"
|
||||
#include "bsp_valve.h"
|
||||
#include "bsp_uart.h"
|
||||
#include "log.h"
|
||||
#include "bsp_adc.h"
|
||||
#include "bsp_led.h"
|
||||
#include "SLEEP.h"
|
||||
#include <stdbool.h>
|
||||
#undef LOG_ENABLE
|
||||
#define LOG_ENABLE 1
|
||||
#undef LOG_TAG
|
||||
#define LOG_TAG "peripheral"
|
||||
/*********************************************************************
|
||||
* MACROS
|
||||
*/
|
||||
|
@ -61,6 +72,8 @@
|
|||
// Company Identifier: WCH
|
||||
#define WCH_COMPANY_ID 0x07D7
|
||||
|
||||
#define MAC_NAME "ZBF-93:B4:8F:10:53:5C"
|
||||
#define MAC_NAME_LEN 22
|
||||
/*********************************************************************
|
||||
* TYPEDEFS
|
||||
*/
|
||||
|
@ -68,7 +81,17 @@
|
|||
/*********************************************************************
|
||||
* GLOBAL VARIABLES
|
||||
*/
|
||||
volatile uint8_t mtu_flag = 0;
|
||||
static volatile bool periodic_upload_block_flag = false;
|
||||
|
||||
void BSP_NeeedReplyCMdFirst(void)
|
||||
{
|
||||
periodic_upload_block_flag = true;
|
||||
}
|
||||
void BSP_NoNeeedReplyCMd(void)
|
||||
{
|
||||
periodic_upload_block_flag = false;
|
||||
}
|
||||
/*********************************************************************
|
||||
* EXTERNAL VARIABLES
|
||||
*/
|
||||
|
@ -80,19 +103,19 @@
|
|||
/*********************************************************************
|
||||
* LOCAL VARIABLES
|
||||
*/
|
||||
static uint8_t Peripheral_TaskID = INVALID_TASK_ID; // Task ID for internal task/event processing
|
||||
uint8_t Peripheral_TaskID = INVALID_TASK_ID; // ????/???????ID
|
||||
|
||||
// GAP - SCAN RSP data (max size = 31 bytes)
|
||||
static uint8_t scanRspData[] = {
|
||||
// complete name
|
||||
0x12, // length of this data
|
||||
GAP_ADTYPE_LOCAL_NAME_COMPLETE,
|
||||
'S',
|
||||
'i',
|
||||
'm',
|
||||
'p',
|
||||
'l',
|
||||
'e',
|
||||
'I',
|
||||
'o',
|
||||
'T',
|
||||
'z',
|
||||
'b',
|
||||
'f',
|
||||
' ',
|
||||
'P',
|
||||
'e',
|
||||
|
@ -137,7 +160,7 @@ static uint8_t advertData[] = {
|
|||
};
|
||||
|
||||
// GAP GATT Attributes
|
||||
static uint8_t attDeviceName[GAP_DEVICE_NAME_LEN] = "Simple Peripheral";
|
||||
static uint8_t attDeviceName[GAP_DEVICE_NAME_LEN] = "IoTzbf Peripheral";
|
||||
|
||||
// Connection item list
|
||||
static peripheralConnItem_t peripheralConnList;
|
||||
|
@ -259,11 +282,11 @@ void Peripheral_Init()
|
|||
|
||||
// Setup the SimpleProfile Characteristic Values
|
||||
{
|
||||
uint8_t charValue1[SIMPLEPROFILE_CHAR1_LEN] = {1};
|
||||
uint8_t charValue2[SIMPLEPROFILE_CHAR2_LEN] = {2};
|
||||
uint8_t charValue3[SIMPLEPROFILE_CHAR3_LEN] = {3};
|
||||
uint8_t charValue4[SIMPLEPROFILE_CHAR4_LEN] = {4};
|
||||
uint8_t charValue5[SIMPLEPROFILE_CHAR5_LEN] = {1, 2, 3, 4, 5};
|
||||
uint8_t charValue1[SIMPLEPROFILE_CHAR1_LEN] = {0};
|
||||
uint8_t charValue2[SIMPLEPROFILE_CHAR2_LEN] = {0};
|
||||
uint8_t charValue3[SIMPLEPROFILE_CHAR3_LEN] = {0};
|
||||
uint8_t charValue4[SIMPLEPROFILE_CHAR4_LEN] = {0};
|
||||
uint8_t charValue5[SIMPLEPROFILE_CHAR5_LEN] = {0, 0, 0, 0, 0};
|
||||
|
||||
SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR1, SIMPLEPROFILE_CHAR1_LEN, charValue1);
|
||||
SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR2, SIMPLEPROFILE_CHAR2_LEN, charValue2);
|
||||
|
@ -287,6 +310,7 @@ void Peripheral_Init()
|
|||
// 注册广播事件和连接事件回调函数
|
||||
LL_AdvertiseEventRegister(BLE_AdvertiseEventCB);
|
||||
LL_ConnectEventRegister(BLE_ConnectEventCB);
|
||||
GATT_InitClient();
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
|
@ -343,16 +367,26 @@ uint16_t Peripheral_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
GAPRole_PeripheralStartDevice(Peripheral_TaskID, &Peripheral_BondMgrCBs, &Peripheral_PeripheralCBs);
|
||||
return (events ^ SBP_START_DEVICE_EVT);
|
||||
}
|
||||
if(events & SBP_REPLY_CMD_EVT)
|
||||
{
|
||||
logDebug("SBP_REPLY_CMD_EVT");
|
||||
peripheralChar4Notify((uint8_t *)&RelyData.buf[0], RelyData.len);
|
||||
BSP_NoNeeedReplyCMd();
|
||||
return (events ^ SBP_REPLY_CMD_EVT);
|
||||
}
|
||||
|
||||
if(events & SBP_PERIODIC_EVT)
|
||||
{
|
||||
// Restart timer
|
||||
if(SBP_PERIODIC_EVT_PERIOD)
|
||||
if(periodic_upload_block_flag == false && mtu_flag == 1)
|
||||
{
|
||||
performPeriodicTask();
|
||||
tmos_start_task(Peripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD);
|
||||
}
|
||||
// Perform periodic application task
|
||||
performPeriodicTask();
|
||||
else
|
||||
{
|
||||
tmos_start_task(Peripheral_TaskID, SBP_PERIODIC_EVT, 1600 * 1);
|
||||
}
|
||||
return (events ^ SBP_PERIODIC_EVT);
|
||||
}
|
||||
|
||||
|
@ -448,7 +482,8 @@ static void Peripheral_ProcessTMOSMsg(tmos_event_hdr_t *pMsg)
|
|||
if(pMsgEvent->method == ATT_MTU_UPDATED_EVENT)
|
||||
{
|
||||
peripheralMTU = pMsgEvent->msg.exchangeMTUReq.clientRxMTU;
|
||||
PRINT("mtu exchange: %d\n", pMsgEvent->msg.exchangeMTUReq.clientRxMTU);
|
||||
mtu_flag = 1;
|
||||
logDebug("****mtu exchange: %d****", pMsgEvent->msg.exchangeMTUReq.clientRxMTU);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -492,8 +527,13 @@ static void Peripheral_LinkEstablished(gapRoleEvent_t *pEvent)
|
|||
|
||||
// Start read rssi
|
||||
tmos_start_task(Peripheral_TaskID, SBP_READ_RSSI_EVT, SBP_READ_RSSI_EVT_PERIOD);
|
||||
attExchangeMTUReq_t req = {
|
||||
.clientRxMTU = BLE_BUFF_MAX_LEN - 4,
|
||||
};
|
||||
GATT_ExchangeMTU(peripheralConnList.connHandle, &req, Peripheral_TaskID);
|
||||
enable_notify(peripheralConnList.connHandle, ENABLE);
|
||||
|
||||
PRINT("Conn %x - Int %x \n", event->connectionHandle, event->connInterval);
|
||||
logDebug("Conn %x - Int %x= %.1fms", event->connectionHandle, event->connInterval, event->connInterval * 1.25);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -518,6 +558,7 @@ static void Peripheral_LinkTerminated(gapRoleEvent_t *pEvent)
|
|||
peripheralConnList.connTimeout = 0;
|
||||
tmos_stop_task(Peripheral_TaskID, SBP_PERIODIC_EVT);
|
||||
tmos_stop_task(Peripheral_TaskID, SBP_READ_RSSI_EVT);
|
||||
mtu_flag = 0;
|
||||
|
||||
// Restart advertising
|
||||
{
|
||||
|
@ -527,7 +568,7 @@ static void Peripheral_LinkTerminated(gapRoleEvent_t *pEvent)
|
|||
}
|
||||
else
|
||||
{
|
||||
PRINT("ERR..\n");
|
||||
logError("ERR..");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -543,7 +584,8 @@ static void Peripheral_LinkTerminated(gapRoleEvent_t *pEvent)
|
|||
*/
|
||||
static void peripheralRssiCB(uint16_t connHandle, int8_t rssi)
|
||||
{
|
||||
PRINT("RSSI -%d dB Conn %x \n", -rssi, connHandle);
|
||||
gValveData.rssi = rssi;
|
||||
logDebug("RSSI %d dB Conn %x ", gValveData.rssi, connHandle);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
|
@ -567,11 +609,12 @@ static void peripheralParamUpdateCB(uint16_t connHandle, uint16_t connInterval,
|
|||
peripheralConnList.connSlaveLatency = connSlaveLatency;
|
||||
peripheralConnList.connTimeout = connTimeout;
|
||||
|
||||
PRINT("Update %x - Int %x \n", connHandle, connInterval);
|
||||
logDebug("ParamUpdateCB (Handle)%x - (connInt 0x%x=%.1fms) - (connSlaveLatency) %x - (connTimeout 0x%x=%dms)",
|
||||
connHandle, connInterval, connInterval * 1.25, connSlaveLatency, connTimeout * 10, connTimeout * 10);
|
||||
}
|
||||
else
|
||||
{
|
||||
PRINT("ERR..\n");
|
||||
logError("ERR..");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -672,8 +715,22 @@ static void peripheralStateNotificationCB(gapRole_States_t newState, gapRoleEven
|
|||
*/
|
||||
static void performPeriodicTask(void)
|
||||
{
|
||||
uint8_t notiData[SIMPLEPROFILE_CHAR4_LEN] = {0x88};
|
||||
peripheralChar4Notify(notiData, SIMPLEPROFILE_CHAR4_LEN);
|
||||
// ??????
|
||||
gValveData.bat = BSP_ReadVbat();
|
||||
if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE)
|
||||
{
|
||||
gValveData.switch_status = kClosed;
|
||||
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
|
||||
}
|
||||
else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE)
|
||||
{
|
||||
tmos_set_event(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT);
|
||||
}
|
||||
logDebug("switch_status:%d Temp:%d Bat:%d Humi:%d%% RSSI: %d",
|
||||
gValveData.switch_status, gValveData.temp, gValveData.bat, gValveData.humi, gValveData.rssi);
|
||||
TsRawFrameData RawData;
|
||||
BSP_VALVE_Generate_UploadData(&RawData);
|
||||
peripheralChar4Notify(&RawData.buf[0], RawData.len);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
|
@ -719,21 +776,50 @@ static void peripheralChar4Notify(uint8_t *pValue, uint16_t len)
|
|||
*/
|
||||
static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len)
|
||||
{
|
||||
BSP_NeeedReplyCMdFirst();
|
||||
switch(paramID)
|
||||
{
|
||||
case SIMPLEPROFILE_CHAR1:
|
||||
{
|
||||
uint8_t newValue[SIMPLEPROFILE_CHAR1_LEN];
|
||||
tmos_memcpy(newValue, pValue, len);
|
||||
PRINT("profile ChangeCB CHAR1.. \n");
|
||||
logDebug("profile ChangeCB CHAR1.. Start");
|
||||
for (uint8_t i = 0; i < len; i++)
|
||||
{
|
||||
logDebug("%02x ", newValue[i]);
|
||||
}
|
||||
logDebug("\n profile ChangeCB CHAR1.. End");
|
||||
break;
|
||||
}
|
||||
|
||||
case SIMPLEPROFILE_CHAR3:
|
||||
{
|
||||
uint8_t newValue[SIMPLEPROFILE_CHAR3_LEN];
|
||||
tmos_memcpy(newValue, pValue, len);
|
||||
PRINT("profile ChangeCB CHAR3..\n");
|
||||
logDebug("CHAR3 Start");
|
||||
uint8_t *p_rev_msg;
|
||||
p_rev_msg = tmos_msg_allocate(len + 1);
|
||||
if (p_rev_msg)
|
||||
{
|
||||
p_rev_msg[0] = len;
|
||||
tmos_memcpy(&p_rev_msg[1], pValue, len);
|
||||
logDebug("rece data len: %d", len);
|
||||
for (uint8_t i = 0; i < len; i++) {
|
||||
logDebug("pValue%d: 0x%02X", i, pValue[i]);
|
||||
}
|
||||
int ret = tmos_msg_send(vavle_task_id, p_rev_msg);
|
||||
if (ret == SUCCESS)
|
||||
{
|
||||
logDebug("p_rev_msg send ret = %d", ret);
|
||||
}
|
||||
else
|
||||
{
|
||||
logError("p_rev_msg send ret = %d", ret);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logError("????");
|
||||
}
|
||||
logDebug("profile ChangeCB CHAR3.. End");
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "bsp_led.h"
|
||||
#include "bsp_key.h"
|
||||
#include "bsp_iwdg.h"
|
||||
#include "bsp_valve.h"
|
||||
#include "log.h"
|
||||
|
||||
#undef LOG_ENABLE
|
||||
|
@ -104,6 +105,8 @@ int main(void)
|
|||
|
||||
BSP_MOTOR_Init();
|
||||
VALVE_OPEN();
|
||||
DelayMs(2000);
|
||||
BSP_VAVLE_Init();
|
||||
|
||||
BSP_LED_Init();
|
||||
|
||||
|
|
|
@ -726,5 +726,18 @@ static void simpleProfile_HandleConnStatusCB(uint16_t connHandle, uint8_t change
|
|||
}
|
||||
}
|
||||
|
||||
uint8_t enable_notify(uint16_t connection_handle, uint8_t enable)
|
||||
{
|
||||
uint16_t cccd = 0; //定义一个变量cccd,特征的配置值
|
||||
if(enable) //使能
|
||||
{
|
||||
cccd |= GATT_CLIENT_CFG_NOTIFY; //将cccd置为使能通知的值
|
||||
}
|
||||
else
|
||||
{
|
||||
cccd &= ~GATT_CLIENT_CFG_NOTIFY; //不使能,将cccd置为禁止通知的值
|
||||
}
|
||||
return GATTServApp_WriteCharCfg( connection_handle, simpleProfileChar4Config, cccd); //将特征配置值写入到连接句柄,以实现通知的使能或禁用
|
||||
}
|
||||
/*********************************************************************
|
||||
*********************************************************************/
|
||||
|
|
|
@ -46,11 +46,11 @@ extern "C" {
|
|||
#define SIMPLEPROFILE_SERVICE 0x00000001
|
||||
|
||||
// Length of characteristic in bytes ( Default MTU is 23 )
|
||||
#define SIMPLEPROFILE_CHAR1_LEN 1
|
||||
#define SIMPLEPROFILE_CHAR2_LEN 1
|
||||
#define SIMPLEPROFILE_CHAR3_LEN 1
|
||||
#define SIMPLEPROFILE_CHAR4_LEN 1
|
||||
#define SIMPLEPROFILE_CHAR5_LEN 5
|
||||
#define SIMPLEPROFILE_CHAR1_LEN 64
|
||||
#define SIMPLEPROFILE_CHAR2_LEN 64
|
||||
#define SIMPLEPROFILE_CHAR3_LEN 64
|
||||
#define SIMPLEPROFILE_CHAR4_LEN 64
|
||||
#define SIMPLEPROFILE_CHAR5_LEN 64
|
||||
|
||||
/*********************************************************************
|
||||
* TYPEDEFS
|
||||
|
@ -125,6 +125,7 @@ extern bStatus_t SimpleProfile_GetParameter(uint8_t param, void *value);
|
|||
*/
|
||||
extern bStatus_t simpleProfile_Notify(uint16_t connHandle, attHandleValueNoti_t *pNoti);
|
||||
|
||||
extern uint8_t enable_notify(uint16_t connection_handle, uint8_t enable);
|
||||
/*********************************************************************
|
||||
*********************************************************************/
|
||||
|
||||
|
|
|
@ -20,4 +20,5 @@ void BSP_VBAT_Init(void);
|
|||
void Send_Low_Battery_Message(float vbat);
|
||||
void Handle_Low_Battery(float vbat);
|
||||
|
||||
uint8_t BSP_ReadVbat(void);
|
||||
#endif /* INCLUDE_BSP_ADC_H_ */
|
||||
|
|
|
@ -16,9 +16,11 @@
|
|||
#define KEY_IDLE_TIMEOUT_EVT (0x0001 << 2)
|
||||
|
||||
// KEY_B_PIN at PB7,low->active
|
||||
#define KEY_B_PIN GPIO_Pin_0
|
||||
#define KEY_A_PIN GPIO_Pin_7
|
||||
|
||||
#define IS_KEY_Vaild() ((GPIOB_ReadPortPin(KEY_B_PIN) ? 0 : 1))
|
||||
extern volatile uint8_t key_wakeup_flag;
|
||||
|
||||
#define IS_KEY_Vaild() ((GPIOA_ReadPortPin(KEY_A_PIN) ? 0 : 1))
|
||||
|
||||
typedef enum
|
||||
{
|
||||
|
|
|
@ -10,11 +10,10 @@
|
|||
|
||||
#include "CH58x_common.h"
|
||||
|
||||
#define LED_VALVE_R_PIN GPIO_Pin_7
|
||||
#define LED_VALVE_G_PIN GPIO_Pin_8
|
||||
#define LED_VALVE_Y_PIN GPIO_Pin_9
|
||||
#define LED_ALARM_PIN GPIO_Pin_9
|
||||
#define LED_VBAT_PIN GPIO_Pin_4
|
||||
#define LED_VALVE_R_PIN GPIO_Pin_8
|
||||
#define LED_VALVE_G_PIN GPIO_Pin_9
|
||||
#define LED_ALARM_PIN GPIO_Pin_12
|
||||
#define LED_VBAT_PIN GPIO_Pin_1
|
||||
|
||||
/***********************************************************************************************
|
||||
#define LED_VALVE_OPEN {GPIOA_ResetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN);\
|
||||
|
@ -42,66 +41,66 @@
|
|||
#define LED_VALVE_OPEN \
|
||||
do \
|
||||
{ \
|
||||
GPIOA_ResetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN);\
|
||||
GPIOA_SetBits(LED_VALVE_G_PIN); \
|
||||
GPIOA_ModeCfg(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
GPIOB_ResetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN );\
|
||||
GPIOB_SetBits(LED_VALVE_G_PIN); \
|
||||
GPIOB_ModeCfg(LED_VALVE_R_PIN | LED_VALVE_G_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
} while (0);
|
||||
|
||||
#define LED_VALVE_CLOSE \
|
||||
do \
|
||||
{ \
|
||||
GPIOA_ResetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN);\
|
||||
GPIOA_SetBits(LED_VALVE_R_PIN); \
|
||||
GPIOA_ModeCfg(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
GPIOB_ResetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN);\
|
||||
GPIOB_SetBits(LED_VALVE_R_PIN); \
|
||||
GPIOB_ModeCfg(LED_VALVE_R_PIN | LED_VALVE_G_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
} while (0);
|
||||
|
||||
/**********LED_ALARM**************/
|
||||
#define LED_ALARM_OPEN \
|
||||
do \
|
||||
{ \
|
||||
GPIOB_SetBits(LED_ALARM_PIN); \
|
||||
GPIOB_ModeCfg(LED_ALARM_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
GPIOA_SetBits(LED_ALARM_PIN); \
|
||||
GPIOA_ModeCfg(LED_ALARM_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
} while (0);
|
||||
|
||||
#define LED_ALARM_CLOSE \
|
||||
do \
|
||||
{ \
|
||||
GPIOB_ResetBits(LED_ALARM_PIN); \
|
||||
GPIOB_ModeCfg(LED_ALARM_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
GPIOA_ResetBits(LED_ALARM_PIN); \
|
||||
GPIOA_ModeCfg(LED_ALARM_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
} while (0);
|
||||
|
||||
/**********LED_VBAT**************/
|
||||
#define LED_VBAT_OPEN \
|
||||
do \
|
||||
{ \
|
||||
GPIOB_SetBits(LED_VBAT_PIN); \
|
||||
GPIOB_ModeCfg(LED_VBAT_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
GPIOA_SetBits(LED_VBAT_PIN); \
|
||||
GPIOA_ModeCfg(LED_VBAT_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
} while (0);
|
||||
|
||||
#define LED_VBAT_CLOSE \
|
||||
do \
|
||||
{ \
|
||||
GPIOB_ResetBits(LED_VBAT_PIN); \
|
||||
GPIOB_ModeCfg(LED_VBAT_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
GPIOA_ResetBits(LED_VBAT_PIN); \
|
||||
GPIOA_ModeCfg(LED_VBAT_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
} while (0);
|
||||
|
||||
/**********LED_ALL**************/
|
||||
#define LED_ALL_OPEN \
|
||||
do \
|
||||
{ \
|
||||
GPIOA_SetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN);\
|
||||
GPIOB_SetBits(LED_ALARM_PIN | LED_VBAT_PIN);\
|
||||
GPIOA_ModeCfg(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
GPIOB_ModeCfg(LED_ALARM_PIN | LED_VBAT_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
GPIOB_SetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN);\
|
||||
GPIOA_SetBits(LED_ALARM_PIN | LED_VBAT_PIN);\
|
||||
GPIOB_ModeCfg(LED_VALVE_R_PIN | LED_VALVE_G_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
GPIOA_ModeCfg(LED_ALARM_PIN | LED_VBAT_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
} while (0);
|
||||
|
||||
#define LED_ALL_CLOSE \
|
||||
do \
|
||||
{ \
|
||||
GPIOA_ResetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN);\
|
||||
GPIOB_ResetBits(LED_ALARM_PIN | LED_VBAT_PIN); \
|
||||
GPIOA_ModeCfg(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
GPIOB_ModeCfg(LED_ALARM_PIN | LED_VBAT_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
GPIOB_ResetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN);\
|
||||
GPIOA_ResetBits(LED_ALARM_PIN | LED_VBAT_PIN); \
|
||||
GPIOB_ModeCfg(LED_VALVE_R_PIN | LED_VALVE_G_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
GPIOA_ModeCfg(LED_ALARM_PIN | LED_VBAT_PIN, GPIO_ModeOut_PP_5mA); \
|
||||
} while (0);
|
||||
|
||||
void BSP_LED_Init(void);
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
#define ENABLE_3_8_V GPIO_Pin_3 //PB3
|
||||
|
||||
#define USIM_DECT_PIN GPIO_Pin_5 //PB5
|
||||
#define ML307_PWR_PIN GPIO_Pin_6 //PB6
|
||||
#define ML307_RST_PIN GPIO_Pin_7 //PB7
|
||||
#define ML307_PWR_PIN GPIO_Pin_7 //PB6
|
||||
#define ML307_RST_PIN GPIO_Pin_6 //PB7
|
||||
|
||||
#define ML307_UART_TX_PIN GPIO_Pin_13 //PB13
|
||||
#define ML307_UART_RX_PIN GPIO_Pin_12 //PB12
|
||||
|
|
|
@ -18,9 +18,9 @@ typedef struct state{
|
|||
uint8_t off_state; //用砿彜蓑
|
||||
}valve_state;
|
||||
extern valve_state valve_status;
|
||||
#define NSLEEP_PIN GPIO_Pin_8
|
||||
#define COIL_A GPIO_Pin_17
|
||||
#define COIL_B GPIO_Pin_16
|
||||
#define COIL_ADC GPIO_Pin_5
|
||||
#define COIL_A GPIO_Pin_1
|
||||
#define COIL_B GPIO_Pin_0
|
||||
|
||||
void BSP_MOTOR_Init(void);
|
||||
void VALVE_OPEN(void);
|
||||
|
|
|
@ -0,0 +1,125 @@
|
|||
/*
|
||||
* @Author : stark1898y 1658608470@qq.com
|
||||
* @Date : 2024-12-12 15:55:38
|
||||
* @LastEditors : stark1898y 1658608470@qq.com
|
||||
* @LastEditTime : 2025-02-24 16:39:07
|
||||
* @FilePath : \BLE_TYQ_CH584M\BSP\inc\bsp_valve.h
|
||||
* @Description :
|
||||
*
|
||||
* Copyright (c) 2024 by yzy, All Rights Reserved.
|
||||
*/
|
||||
#ifndef __BSP_VALVE_H__
|
||||
#define __BSP_VALVE_H__
|
||||
|
||||
#include "CONFIG.h"
|
||||
|
||||
extern tmosTaskID vavle_task_id;
|
||||
|
||||
|
||||
#define VAVLE_RX_DATA_EVT (0x0001 << 0)
|
||||
#define VAVLE_TX_DATA_EVT (0x0001 << 1)
|
||||
|
||||
#define VAVLE_CLOSE_START_EVT (0x0001 << 2) // 关阀,开始准备
|
||||
#define VAVLE_CLOSE_ACTION_EVT (0x0001 << 3) // 关阀,动作
|
||||
#define VAVLE_CLOSE_END_EVT (0x0001 << 4) // 关阀结束
|
||||
|
||||
#define VAVLE_OPEN_START_EVT (0x0001 << 5) // 开阀,开始准备
|
||||
#define VAVLE_OPEN_ACTION_EVT (0x0001 << 6) // 开阀,动作
|
||||
#define VAVLE_OPEN_END_EVT (0x0001 << 9) // 开阀结束
|
||||
|
||||
#define VAVLE_LOW_VBAT_ALARM_EVT (0x0001 << 7) // 低电压提醒
|
||||
|
||||
#define VAVLE_LOOP_DECT_EVT (0x0001 << 8) // 循环检测
|
||||
|
||||
#define VALVE_LOW_VBAT_ALARM_PERIOD_MS (1600 * 60 * 10)
|
||||
|
||||
#define VALVE_DECT_PERIOD_MS (1600 * 60 * 10)
|
||||
|
||||
|
||||
|
||||
#define CHARGE_TIME_MS (1500)
|
||||
|
||||
// 2.2V
|
||||
#define LOW_VABAT_ALARM_VALUE 22
|
||||
|
||||
#define LOW_VABAT_CLOSE_VALUE 20
|
||||
|
||||
|
||||
#define FRAME_HEADER 0xAA
|
||||
#define FRAME_TAIL 0x55
|
||||
|
||||
// 0xAA CMD/DATA/ DATA_LEN (DATA) checksum 0x55
|
||||
|
||||
typedef enum
|
||||
{
|
||||
kCmdCfg = 0X01,
|
||||
kCmdCloseVavle,
|
||||
kCmdOpenVavle,
|
||||
kCmdData,
|
||||
} TeFrameCmd;
|
||||
|
||||
typedef struct __attribute__((packed))
|
||||
{
|
||||
TeFrameCmd cmd; // CMD/DATA
|
||||
uint8_t len; // DATA_LEN
|
||||
// TsValveData data;
|
||||
uint8_t data[];
|
||||
} TsFrameData;
|
||||
|
||||
typedef struct __attribute__((packed))
|
||||
{
|
||||
uint8_t len;
|
||||
uint8_t buf[64];
|
||||
} TsRawFrameData;
|
||||
|
||||
extern TsRawFrameData RelyData;
|
||||
|
||||
// 阀门类型
|
||||
typedef enum
|
||||
{
|
||||
kTyq = 0X01,
|
||||
kZbf,
|
||||
kDcf,
|
||||
} TeVavleType;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
kUnknown = 0,
|
||||
kClosed,
|
||||
kOpened,
|
||||
kDisconnect,
|
||||
} TeValveSwitchStatus;
|
||||
|
||||
typedef struct __attribute__((packed))
|
||||
{
|
||||
// uint8_t status; // 1B 阀门工作状态 超欠压、过流
|
||||
// uint8_t connct_status; // 1B 阀门连接状态 (电磁阀BLE控制盒) 0=未连接 1=已连接
|
||||
uint8_t switch_status; // 1B 阀门开关状态 0=未知 1=关闭=关闭过,未按按键恢复 2=关闭过,按下了恢复键 = 打开
|
||||
int8_t temp; // 1B 阀门温度 有符号整数 25 ℃
|
||||
|
||||
uint32_t in_pressure; // 4B 阀门入口压力 Pa
|
||||
uint32_t out_pressure; // 4B 阀门出口压力 Pa
|
||||
uint32_t atm_pressure; // 4B 阀门大气压力 Pa
|
||||
uint8_t type; // 阀门类型
|
||||
uint8_t bat; // 1B 电池电压 30=3V,18=1.8V
|
||||
uint8_t humi; // 1B 阀门湿度 %RH
|
||||
int8_t rssi;
|
||||
} TsValveData;
|
||||
extern TsValveData gValveData;
|
||||
|
||||
uint8_t CheckSum(const uint8_t *data, size_t len);
|
||||
|
||||
void BSP_VAVLE_Init(void);
|
||||
void BSP_CloseValve(void);
|
||||
void BSP_OpenValve(void);
|
||||
|
||||
TsFrameData* BSP_VAVLE_GetFrameData(uint8_t *data, uint8_t len);
|
||||
|
||||
uint8_t GenerateRawFrame(TsRawFrameData *pRawData, uint8_t cmd, const uint8_t *p_src, uint8_t src_len);
|
||||
|
||||
void BSP_VALVE_Generate_Data(TsRawFrameData *pRawData, uint8_t switch_status, uint8_t bat, int8_t temp, uint8_t humi);
|
||||
void BSP_VALVE_Generate_ValveResponse(TsRawFrameData *pRawData, TeFrameCmd cmd, uint8_t status);
|
||||
|
||||
void BSP_VALVE_Generate_UploadData(TsRawFrameData *pRawData);
|
||||
|
||||
#endif // ! __BSP_VALVE_H__
|
|
@ -166,3 +166,40 @@ void BSP_VBAT_Init(void)
|
|||
vbat_task_id = TMOS_ProcessEventRegister(VBAT_ProcessEvent);
|
||||
tmos_set_event(vbat_task_id, VBAT_EVT_START);
|
||||
}
|
||||
uint16_t adcBuff[40];
|
||||
volatile uint8_t adclen;
|
||||
volatile uint8_t DMA_end = 0;
|
||||
uint32_t countadc = 0;
|
||||
uint16_t min_number = 0;
|
||||
uint16_t max_number = 0;
|
||||
double voltage = 0;
|
||||
uint8_t BSP_ReadVbat(void)
|
||||
{
|
||||
uint8_t i;
|
||||
uint32_t CountBat = 0;
|
||||
ADC_InterBATSampInit();
|
||||
DelayUs(1);
|
||||
ADC_ExcutSingleConver();
|
||||
DelayUs(1);
|
||||
for (i = 0; i < 20; i++)
|
||||
{
|
||||
adcBuff[i] = ADC_ExcutSingleConver(); // 连续采样20次
|
||||
}
|
||||
for (i = 0; i < 20; i++)
|
||||
{
|
||||
CountBat += adcBuff[i];
|
||||
if (i == 0)
|
||||
{
|
||||
min_number = adcBuff[i];
|
||||
max_number = adcBuff[i];
|
||||
}
|
||||
min_number = ((min_number > adcBuff[i]) ? adcBuff[i] : min_number); // 软件滤波
|
||||
max_number = ((max_number < adcBuff[i]) ? adcBuff[i] : max_number);
|
||||
}
|
||||
logDebug("min_number = %d, max_number = %d", min_number, max_number);
|
||||
CountBat = (CountBat - min_number - max_number) / 18; // 删除最小与最大值
|
||||
CountBat = CountBat * 2.05078125 - 3150;
|
||||
uint8_t vbat = (uint8_t)(CountBat / 100);
|
||||
logDebug("AverageCountBat = %dmV, vbat = %d(100mV)", CountBat, vbat);
|
||||
return vbat;
|
||||
}
|
|
@ -23,14 +23,14 @@ typedef enum
|
|||
|
||||
static tmosTaskID press_task_id = INVALID_TASK_ID;
|
||||
|
||||
#define PRESS_IN_CS_HIGH() GPIOA_SetBits(GPIO_Pin_5)
|
||||
#define PRESS_IN_CS_LOW() GPIOA_ResetBits(GPIO_Pin_5)
|
||||
#define PRESS_IN_CS_HIGH() GPIOA_SetBits(GPIO_Pin_8)
|
||||
#define PRESS_IN_CS_LOW() GPIOA_ResetBits(GPIO_Pin_8)
|
||||
|
||||
#define PRESS_OUT_CS_HIGH() GPIOA_SetBits(GPIO_Pin_0)
|
||||
#define PRESS_OUT_CS_LOW() GPIOA_ResetBits(GPIO_Pin_0)
|
||||
#define PRESS_OUT_CS_HIGH() GPIOA_SetBits(GPIO_Pin_2)
|
||||
#define PRESS_OUT_CS_LOW() GPIOA_ResetBits(GPIO_Pin_2)
|
||||
|
||||
#define PRESS_ATOM_CS_HIGH() GPIOA_SetBits(GPIO_Pin_3)
|
||||
#define PRESS_ATOM_CS_LOW() GPIOA_ResetBits(GPIO_Pin_3)
|
||||
#define PRESS_ATOM_CS_HIGH() GPIOA_SetBits(GPIO_Pin_0)
|
||||
#define PRESS_ATOM_CS_LOW() GPIOA_ResetBits(GPIO_Pin_0)
|
||||
|
||||
uint8_t volatile press_done_flag = 0;
|
||||
|
||||
|
@ -314,15 +314,15 @@ void PRESS_IO_SPI_Init(void)
|
|||
|
||||
// SDA: MOSI
|
||||
// SDO: MISO
|
||||
GPIOA_SetBits(GPIO_Pin_2);
|
||||
GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeOut_PP_5mA);
|
||||
|
||||
GPIOA_SetBits(GPIO_Pin_8);
|
||||
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeOut_PP_5mA);
|
||||
|
||||
GPIOA_SetBits(GPIO_Pin_0);
|
||||
GPIOA_ModeCfg(GPIO_Pin_0, GPIO_ModeOut_PP_5mA);
|
||||
|
||||
GPIOA_SetBits(GPIO_Pin_5);
|
||||
GPIOA_ModeCfg(GPIO_Pin_5, GPIO_ModeOut_PP_5mA);
|
||||
|
||||
GPIOA_SetBits(GPIO_Pin_3);
|
||||
GPIOA_ModeCfg(GPIO_Pin_3, GPIO_ModeOut_PP_5mA);
|
||||
|
||||
SPI_CsStop(kPressIn);
|
||||
SPI_CsStop(kPressOut);
|
||||
SPI_CsStop(kPressAtom);
|
||||
|
@ -342,29 +342,29 @@ void PRESS_LowerIO_Init(void)
|
|||
GPIOA_ModeCfg(GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15, GPIO_ModeIN_PU);
|
||||
|
||||
// CSB3: PA0
|
||||
GPIOA_SetBits(GPIO_Pin_0);
|
||||
GPIOA_ModeCfg(GPIO_Pin_0, GPIO_ModeIN_PU);
|
||||
GPIOA_SetBits(GPIO_Pin_2);
|
||||
GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeIN_PU);
|
||||
|
||||
// CSB2: PA5
|
||||
GPIOA_SetBits(GPIO_Pin_5);
|
||||
GPIOA_ModeCfg(GPIO_Pin_5, GPIO_ModeIN_PU);
|
||||
GPIOA_SetBits(GPIO_Pin_8);
|
||||
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
|
||||
|
||||
// CSB1: PA3
|
||||
GPIOA_SetBits(GPIO_Pin_3);
|
||||
GPIOA_ModeCfg(GPIO_Pin_3, GPIO_ModeIN_PU);
|
||||
GPIOA_SetBits(GPIO_Pin_0);
|
||||
GPIOA_ModeCfg(GPIO_Pin_0, GPIO_ModeIN_PU);
|
||||
}
|
||||
|
||||
void Lower_IO_Deinit(void)
|
||||
{
|
||||
// LED
|
||||
GPIOA_ResetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN);
|
||||
GPIOA_ModeCfg(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN, GPIO_ModeIN_PD);
|
||||
GPIOB_ResetBits(LED_VBAT_PIN | LED_ALARM_PIN);
|
||||
GPIOB_ModeCfg(LED_VBAT_PIN | LED_ALARM_PIN, GPIO_ModeIN_PD);
|
||||
GPIOB_ResetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN);
|
||||
GPIOB_ModeCfg(LED_VALVE_R_PIN | LED_VALVE_G_PIN, GPIO_ModeIN_PD);
|
||||
GPIOA_ResetBits(LED_VBAT_PIN | LED_ALARM_PIN);
|
||||
GPIOA_ModeCfg(LED_VBAT_PIN | LED_ALARM_PIN, GPIO_ModeIN_PD);
|
||||
|
||||
// KEY | RESET KEY | boot KEY
|
||||
GPIOB_ResetBits(KEY_B_PIN );
|
||||
GPIOB_ModeCfg(KEY_B_PIN, GPIO_ModeIN_PU);
|
||||
GPIOA_ResetBits(KEY_A_PIN );
|
||||
GPIOA_ModeCfg(KEY_A_PIN, GPIO_ModeIN_PU);
|
||||
// GPIOB_ResetBits(GPIO_Pin_23 | GPIO_Pin_22);
|
||||
// GPIOB_ModeCfg(GPIO_Pin_23 | GPIO_Pin_22, GPIO_ModeIN_PD);
|
||||
|
||||
|
@ -375,7 +375,7 @@ void Lower_IO_Deinit(void)
|
|||
|
||||
// BMP390
|
||||
// INT1: PA2 | INT2: PA6 | INT3: PA12
|
||||
GPIOA_ModeCfg(GPIO_Pin_2 | GPIO_Pin_6 | GPIO_Pin_12, GPIO_ModeIN_PD);
|
||||
GPIOA_ModeCfg(GPIO_Pin_6 | GPIO_Pin_9 | GPIO_Pin_3, GPIO_ModeIN_PD);
|
||||
// spi初始化
|
||||
GPIOA_ModeCfg(GPIO_Pin_13 | GPIO_Pin_14, GPIO_ModeIN_PD);
|
||||
GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeIN_PD);
|
||||
|
@ -392,12 +392,12 @@ void Lower_IO_Deinit(void)
|
|||
GPIOB_ModeCfg(USIM_DECT_PIN, GPIO_ModeIN_PD);
|
||||
|
||||
//motor
|
||||
GPIOB_ResetBits(NSLEEP_PIN);
|
||||
GPIOB_ModeCfg(NSLEEP_PIN, GPIO_ModeIN_PD);
|
||||
//GPIOA_ResetBits(COIL_ADC);
|
||||
//GPIOA_ModeCfg(COIL_ADC, GPIO_ModeIN_PD);
|
||||
//IN1 + ; IN2 +
|
||||
//GPIOB_SetBits(COIL_A);
|
||||
//GPIOB_SetBits(COIL_B);
|
||||
GPIOB_ModeCfg(COIL_A | COIL_B, GPIO_ModeIN_PD);
|
||||
//GPIOB_ModeCfg(COIL_A | COIL_B, GPIO_ModeIN_PD);
|
||||
|
||||
// UART3
|
||||
// GPIOB_ModeCfg(GPIO_Pin_21 | GPIO_Pin_20, GPIO_ModeIN_PD);
|
||||
|
@ -637,15 +637,15 @@ void BSP_PRESS_Init(void)
|
|||
PRESS_IO_SPI_Init();
|
||||
|
||||
// 中断引脚的配置
|
||||
GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeIN_PD);
|
||||
GPIOA_ITModeCfg(GPIO_Pin_9, GPIO_ITMode_RiseEdge);
|
||||
|
||||
GPIOA_ModeCfg(GPIO_Pin_3, GPIO_ModeIN_PD);
|
||||
GPIOA_ITModeCfg(GPIO_Pin_3, GPIO_ITMode_RiseEdge);
|
||||
|
||||
GPIOA_ModeCfg(GPIO_Pin_6, GPIO_ModeIN_PD);
|
||||
GPIOA_ITModeCfg(GPIO_Pin_6, GPIO_ITMode_RiseEdge);
|
||||
|
||||
GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeIN_PD);
|
||||
GPIOA_ITModeCfg(GPIO_Pin_12, GPIO_ITMode_RiseEdge);
|
||||
|
||||
GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeIN_PD);
|
||||
GPIOA_ITModeCfg(GPIO_Pin_2, GPIO_ITMode_RiseEdge);
|
||||
|
||||
PWR_PeriphWakeUpCfg(ENABLE, RB_GPIO_WAKE_MODE | RB_SLP_GPIO_WAKE, Long_Delay);
|
||||
PFIC_EnableIRQ(GPIO_A_IRQn);
|
||||
|
||||
|
@ -744,7 +744,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
|
|||
//欠压检测
|
||||
if(P[0] - P[2] <= 80) //800
|
||||
{
|
||||
VALVE_CLOSE();
|
||||
// VALVE_CLOSE();
|
||||
fault_state = 2;
|
||||
tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(1500)); //1000
|
||||
logDebug("motor low close");
|
||||
|
@ -805,23 +805,46 @@ __INTERRUPT
|
|||
__HIGH_CODE
|
||||
void GPIOA_IRQHandler(void)
|
||||
{
|
||||
if (R16_PA_INT_IF & GPIO_Pin_6)
|
||||
// 清除中断标志位
|
||||
GPIOA_ClearITFlagBit(KEY_A_PIN);
|
||||
|
||||
// 检查是否为真实按键事件(通过确认电平是否真的接近0V)
|
||||
if (GPIOA_ReadPortPin(KEY_A_PIN) == 0) {
|
||||
// 再次确认是否真的为低电平(接近0V)
|
||||
DelayUs(50); // 短暂延时
|
||||
if (GPIOA_ReadPortPin(KEY_A_PIN) == 0) {
|
||||
// 确认是真实按键事件
|
||||
// 阻止睡眠
|
||||
BSP_BlockSleep();
|
||||
// 关按键中断
|
||||
BSP_KEY_ExitLowpower();
|
||||
|
||||
printf("KEY IRQ");
|
||||
key_wakeup_flag = 1;
|
||||
}
|
||||
} else {
|
||||
// 可能是电源波动导致的中断,忽略此次中断
|
||||
// printf("Power Fluctuation - Ignored");
|
||||
}
|
||||
|
||||
|
||||
if (R16_PA_INT_IF & GPIO_Pin_9)
|
||||
{
|
||||
R16_PA_INT_IF = GPIO_Pin_6;
|
||||
R16_PA_INT_IF = GPIO_Pin_9;
|
||||
flag = 1;
|
||||
tmos_set_event(press_task_id, BMP390_EVT_READ);
|
||||
// logDebug("INT2 \r\n");
|
||||
}
|
||||
else if (R16_PA_INT_IF & GPIO_Pin_12)
|
||||
else if (R16_PA_INT_IF & GPIO_Pin_3)
|
||||
{
|
||||
R16_PA_INT_IF = GPIO_Pin_12;
|
||||
R16_PA_INT_IF = GPIO_Pin_3;
|
||||
flag = 2;
|
||||
tmos_set_event(press_task_id, BMP390_EVT_READ);
|
||||
// logDebug("INT3 \r\n");
|
||||
}
|
||||
else if (R16_PA_INT_IF & GPIO_Pin_2)
|
||||
else if (R16_PA_INT_IF & GPIO_Pin_6)
|
||||
{
|
||||
R16_PA_INT_IF = GPIO_Pin_2;
|
||||
R16_PA_INT_IF = GPIO_Pin_6;
|
||||
flag = 3;
|
||||
tmos_set_event(press_task_id, BMP390_EVT_READ);
|
||||
// logDebug("INT1 \r\n");
|
||||
|
|
|
@ -167,7 +167,7 @@ void BSP_KEY_EnterLowpower(void)
|
|||
|
||||
// TODO:按键电平触发设置
|
||||
// 下降沿触发
|
||||
GPIOB_ITModeCfg(KEY_B_PIN, GPIO_ITMode_FallEdge);
|
||||
GPIOA_ITModeCfg(KEY_A_PIN, GPIO_ITMode_FallEdge);
|
||||
|
||||
// 开启GPIO的睡眠唤醒,如果需要的话
|
||||
// PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_GPIO_WAKE, Long_Delay);
|
||||
|
@ -294,10 +294,10 @@ void BSP_KEY_Init(app_task_evt_handler_t handler)
|
|||
// 由外部上拉电阻了
|
||||
// 设置为浮空输入模式
|
||||
// GPIOB_SetBits(KEY_B_PIN);
|
||||
GPIOB_ModeCfg(KEY_B_PIN, GPIO_ModeIN_PU);
|
||||
GPIOA_ModeCfg(KEY_A_PIN, GPIO_ModeIN_PU);
|
||||
|
||||
// 下降沿触发
|
||||
GPIOB_ITModeCfg(KEY_B_PIN, GPIO_ITMode_FallEdge);
|
||||
GPIOA_ITModeCfg(KEY_A_PIN, GPIO_ITMode_FallEdge);
|
||||
|
||||
// 开启GPIO的睡眠唤醒,如果需要的话
|
||||
// PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_GPIO_WAKE, Long_Delay);
|
||||
|
@ -362,14 +362,14 @@ __INTERRUPT // 告诉编译器使用硬件压栈
|
|||
__HIGH_CODE // 放到RAM里
|
||||
void GPIOB_IRQHandler(void)
|
||||
{
|
||||
// 清除中断标志位
|
||||
GPIOB_ClearITFlagBit(KEY_B_PIN);
|
||||
/* // 清除中断标志位
|
||||
GPIOA_ClearITFlagBit(KEY_A_PIN);
|
||||
|
||||
// 检查是否为真实按键事件(通过确认电平是否真的接近0V)
|
||||
if (GPIOB_ReadPortPin(KEY_B_PIN) == 0) {
|
||||
if (GPIOA_ReadPortPin(KEY_A_PIN) == 0) {
|
||||
// 再次确认是否真的为低电平(接近0V)
|
||||
DelayUs(50); // 短暂延时
|
||||
if (GPIOB_ReadPortPin(KEY_B_PIN) == 0) {
|
||||
if (GPIOA_ReadPortPin(KEY_A_PIN) == 0) {
|
||||
// 确认是真实按键事件
|
||||
// 阻止睡眠
|
||||
BSP_BlockSleep();
|
||||
|
@ -382,7 +382,9 @@ void GPIOB_IRQHandler(void)
|
|||
} else {
|
||||
// 可能是电源波动导致的中断,忽略此次中断
|
||||
printf("Power Fluctuation - Ignored");
|
||||
}
|
||||
} */
|
||||
|
||||
|
||||
// // 阻止睡眠
|
||||
// BSP_BlockSleep();
|
||||
// // 关按键中断
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
|
||||
void BSP_LED_Init(void)
|
||||
{
|
||||
GPIOA_ResetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN);
|
||||
GPIOA_ModeCfg(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN, GPIO_ModeOut_PP_5mA);
|
||||
GPIOB_ResetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN);
|
||||
GPIOB_ModeCfg(LED_VALVE_R_PIN | LED_VALVE_G_PIN, GPIO_ModeOut_PP_5mA);
|
||||
|
||||
GPIOB_ResetBits(LED_ALARM_PIN);
|
||||
GPIOB_ModeCfg(LED_ALARM_PIN, GPIO_ModeOut_PP_5mA);
|
||||
GPIOA_ResetBits(LED_ALARM_PIN);
|
||||
GPIOA_ModeCfg(LED_ALARM_PIN, GPIO_ModeOut_PP_5mA);
|
||||
|
||||
GPIOB_ResetBits(LED_VBAT_PIN);
|
||||
GPIOB_ModeCfg(LED_VBAT_PIN, GPIO_ModeOut_PP_5mA);
|
||||
GPIOA_ResetBits(LED_VBAT_PIN);
|
||||
GPIOA_ModeCfg(LED_VBAT_PIN, GPIO_ModeOut_PP_5mA);
|
||||
}
|
||||
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
valve_state valve_status = {0};
|
||||
void BSP_MOTOR_Init(void)
|
||||
{
|
||||
GPIOB_ResetBits(NSLEEP_PIN);
|
||||
GPIOB_ModeCfg(NSLEEP_PIN, GPIO_ModeOut_PP_5mA);
|
||||
GPIOA_ResetBits(COIL_ADC);
|
||||
GPIOA_ModeCfg(COIL_ADC, GPIO_ModeOut_PP_5mA);
|
||||
|
||||
GPIOB_ResetBits(COIL_A);
|
||||
GPIOB_ModeCfg(COIL_A, GPIO_ModeOut_PP_5mA);
|
||||
|
@ -23,7 +23,7 @@ void BSP_MOTOR_Init(void)
|
|||
}
|
||||
void VALVE_OPEN(void)
|
||||
{
|
||||
GPIOB_SetBits(NSLEEP_PIN);
|
||||
GPIOA_SetBits(COIL_ADC);
|
||||
//IN1 + ; IN2 -
|
||||
GPIOB_SetBits(COIL_A);
|
||||
GPIOB_ResetBits(COIL_B);
|
||||
|
@ -32,7 +32,7 @@ void VALVE_OPEN(void)
|
|||
|
||||
void VALVE_CLOSE(void)
|
||||
{
|
||||
GPIOB_SetBits(NSLEEP_PIN);
|
||||
GPIOA_SetBits(COIL_ADC);
|
||||
//IN1 - ; IN2 +
|
||||
GPIOB_ResetBits(COIL_A);
|
||||
GPIOB_SetBits(COIL_B);
|
||||
|
@ -41,7 +41,7 @@ void VALVE_CLOSE(void)
|
|||
|
||||
void VALVE_STOP(void)
|
||||
{
|
||||
GPIOB_ResetBits(NSLEEP_PIN);
|
||||
GPIOA_ResetBits(COIL_ADC);
|
||||
//IN1 + ; IN2 +
|
||||
GPIOB_SetBits(COIL_A);
|
||||
GPIOB_SetBits(COIL_B);
|
||||
|
|
|
@ -0,0 +1,418 @@
|
|||
/*
|
||||
* @Author : stark1898y 1658608470@qq.com
|
||||
* @Date : 2024-12-15 15:01:15
|
||||
* @LastEditors : stark1898y 1658608470@qq.com
|
||||
* @LastEditTime : 2025-02-24 17:58:40
|
||||
* @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_valve.c
|
||||
* @Description :
|
||||
*
|
||||
* Copyright (c) 2024 by yzy, All Rights Reserved.
|
||||
*/
|
||||
#include "bsp_valve.h"
|
||||
#include "bsp_motor.h"
|
||||
// 0xAA CMD/DATA/ DATA_LEN (DATA) checksum 0x55
|
||||
|
||||
#include "bsp_uart.h"
|
||||
#include "log.h"
|
||||
#include "peripheral.h"
|
||||
#include "SLEEP.h"
|
||||
#include "bsp_adc.h"
|
||||
#include "bsp_led.h"
|
||||
|
||||
#undef LOG_ENABLE
|
||||
#define LOG_ENABLE 1
|
||||
|
||||
// #undef LOG_TAG
|
||||
// #define LOG_TAG "BSP_VALVE"
|
||||
|
||||
TsValveData gValveData = {0};
|
||||
TsRawFrameData RelyData;
|
||||
|
||||
tmosTaskID vavle_task_id = INVALID_TASK_ID;
|
||||
|
||||
#define ARRAY_SIZE(freq_arr) (sizeof(freq_arr) / sizeof((freq_arr)[0]))
|
||||
|
||||
/**
|
||||
* @description: From the frame start character to the sum of all bytes before the check code, modulo 256, i.e., the binary arithmetic sum of each byte without overflow value exceeding 255.
|
||||
* @param {uint8_t} *data
|
||||
* @param {uint16_t} len
|
||||
* @return {*}
|
||||
*/
|
||||
uint8_t CheckSum(const uint8_t *data, size_t len) // 计算校验和函数
|
||||
{
|
||||
uint8_t sum = 0;
|
||||
|
||||
for (size_t i = 0; i < len; i++)
|
||||
{
|
||||
sum += data[i];
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
TsFrameData *BSP_VAVLE_GetFrameData(uint8_t *data, uint8_t len) // 获取阀门数据帧函数
|
||||
{
|
||||
int ret = 0;
|
||||
uint16_t index = 0;
|
||||
|
||||
TsFrameData *get_buffer = NULL;
|
||||
|
||||
if (len < 4)
|
||||
{
|
||||
logError("Data frame length insufficient");
|
||||
return NULL;
|
||||
}
|
||||
while (index < len && data[index] != FRAME_HEADER)
|
||||
{
|
||||
index++;
|
||||
}
|
||||
if (index >= len - 3)
|
||||
{
|
||||
logError("Data frame header error");
|
||||
return NULL;
|
||||
}
|
||||
uint16_t data_len = data[index + 2];
|
||||
if (index + 3 + data_len + 1 >= len)
|
||||
{
|
||||
logError("Data frame length error");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
uint8_t check_sum = data[index + 3 + data_len];
|
||||
uint8_t calculated_sum = CheckSum(&data[index], data_len + 3);
|
||||
if (check_sum != calculated_sum)
|
||||
{
|
||||
logError("Data frame checksum error check_sum = %02X, calculated_sum = %02X", check_sum, calculated_sum);
|
||||
return NULL;
|
||||
}
|
||||
if (data[index + 3 + data_len + 1] != FRAME_TAIL)
|
||||
{
|
||||
logError("Data frame tail error");
|
||||
return NULL;
|
||||
}
|
||||
logDebug("Data frame verification passed");
|
||||
|
||||
get_buffer = (TsFrameData *)tmos_msg_allocate(sizeof(TsFrameData) + sizeof(uint8_t) * data_len);
|
||||
if (get_buffer == NULL)
|
||||
{
|
||||
logError("tmos_msg_allocate fail");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
get_buffer->cmd = data[index + 1]; // 设置命令字段
|
||||
get_buffer->len = data_len; // 设置长度字段
|
||||
// get_buffer->data = data;
|
||||
|
||||
if (data_len > 0)
|
||||
{
|
||||
tmos_memcpy(get_buffer->data, &data[index + 3], data_len);
|
||||
return get_buffer;
|
||||
}
|
||||
|
||||
// //有效数据长度
|
||||
// size_t data_len = (data_len + 5);
|
||||
// //到这一步说明数据没问题,将接收到的数据通过中心任务发送出去
|
||||
// uint8_t *p_data;
|
||||
// p_data = tmos_msg_allocate(data_len);
|
||||
// if (p_data)
|
||||
// {
|
||||
// tmos_memcpy(p_data, data, data_len);
|
||||
// tmos_msg_send(BtRxTaskId, p_data);
|
||||
// tmos_start_task(BtRxTaskId, SYS_EVENT_MSG, 0);
|
||||
// }
|
||||
}
|
||||
|
||||
uint8_t GenerateRawFrame(TsRawFrameData *pRawData, uint8_t cmd, const uint8_t *p_src, uint8_t src_len) // 生成原始帧函数
|
||||
{
|
||||
pRawData->len = src_len + 5;
|
||||
|
||||
tmos_memset(pRawData->buf, 0, sizeof(pRawData->buf));
|
||||
|
||||
pRawData->buf[0] = FRAME_HEADER;
|
||||
pRawData->buf[1] = cmd;
|
||||
pRawData->buf[2] = src_len;
|
||||
|
||||
tmos_memcpy(&pRawData->buf[3], p_src, src_len);
|
||||
|
||||
pRawData->buf[pRawData->len - 2] = CheckSum(&pRawData->buf[0], pRawData->len - 2);
|
||||
pRawData->buf[pRawData->len - 1] = FRAME_TAIL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void BSP_VALVE_Generate_UploadData(TsRawFrameData *pRawData) // 生成上传数据函数
|
||||
{
|
||||
GenerateRawFrame(pRawData, kCmdData, (uint8_t *)&gValveData, sizeof(gValveData));
|
||||
}
|
||||
|
||||
void BSP_VALVE_Generate_Data(TsRawFrameData *pRawData, uint8_t switch_status, uint8_t bat, int8_t temp, uint8_t humi) // 生成阀门数据函数
|
||||
{
|
||||
TsValveData ValveData;
|
||||
|
||||
ValveData.switch_status = 0;
|
||||
ValveData.temp = temp;
|
||||
|
||||
ValveData.in_pressure = 0;
|
||||
ValveData.out_pressure = 0;
|
||||
ValveData.atm_pressure = 0;
|
||||
|
||||
ValveData.type = kTyq;
|
||||
ValveData.bat = bat;
|
||||
ValveData.humi = humi;
|
||||
|
||||
ValveData.rssi = 0;
|
||||
|
||||
GenerateRawFrame(pRawData, kCmdData, (uint8_t *)&ValveData, sizeof(ValveData));
|
||||
}
|
||||
|
||||
void BSP_VALVE_Generate_ValveResponse(TsRawFrameData *pRawData, TeFrameCmd cmd, uint8_t status) // 生成阀门响应函数
|
||||
{
|
||||
uint8_t data = 0;
|
||||
data = status;
|
||||
GenerateRawFrame(pRawData, cmd, &data, 1);
|
||||
}
|
||||
|
||||
void BSP_CloseValve(void)
|
||||
{
|
||||
VALVE_CLOSE();
|
||||
DelayMs(100);
|
||||
}
|
||||
|
||||
void BSP_OpenValve(void)
|
||||
{
|
||||
VALVE_OPEN();
|
||||
DelayMs(100);
|
||||
}
|
||||
|
||||
static void VAVLE_Task_ProcessTmosMsg(uint8_t *p_rev_msg) // 处理TMOS消息函数
|
||||
{
|
||||
if (p_rev_msg)
|
||||
{
|
||||
#if 1
|
||||
TsFrameData *HostFrameData = BSP_VAVLE_GetFrameData(&p_rev_msg[1], p_rev_msg[0]);
|
||||
if (HostFrameData != NULL)
|
||||
{
|
||||
switch (HostFrameData->cmd)
|
||||
{
|
||||
case kCmdCfg: // 配置命令
|
||||
logDebug("kCmdCfg");
|
||||
break;
|
||||
case kCmdCloseVavle: // 关阀命令
|
||||
logDebug("kCmdCloseVavle");
|
||||
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
|
||||
|
||||
break;
|
||||
|
||||
case kCmdOpenVavle: // 开阀命令
|
||||
logDebug("kCmdOpenVavle");
|
||||
tmos_set_event(vavle_task_id, VAVLE_OPEN_START_EVT);
|
||||
break;
|
||||
default:
|
||||
logError("Invalid command");
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logError("Data frame parsing failed");
|
||||
}
|
||||
tmos_msg_deallocate((uint8_t *)HostFrameData);
|
||||
HostFrameData = NULL;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
logError("pMsg is NULL");
|
||||
}
|
||||
}
|
||||
|
||||
static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀门任务事件处理函数
|
||||
{
|
||||
if (events & SYS_EVENT_MSG) // 系统消息事件
|
||||
{
|
||||
uint8_t *p_rev_msg;
|
||||
if ((p_rev_msg = tmos_msg_receive(vavle_task_id)) != NULL)
|
||||
{
|
||||
VAVLE_Task_ProcessTmosMsg(p_rev_msg);
|
||||
tmos_msg_deallocate(p_rev_msg);
|
||||
}
|
||||
return (events ^ SYS_EVENT_MSG);
|
||||
}
|
||||
if (events & VAVLE_RX_DATA_EVT) // 阀门接收数据事件
|
||||
{
|
||||
logDebug("VAVLE_RX_DATA_EVT");
|
||||
|
||||
return (events ^ VAVLE_RX_DATA_EVT);
|
||||
}
|
||||
if (events & VAVLE_TX_DATA_EVT) // 阀门发送数据事件
|
||||
{
|
||||
logDebug("VAVLE_TX_DATA_EVT");
|
||||
|
||||
return (events ^ VAVLE_TX_DATA_EVT);
|
||||
}
|
||||
if (events & VAVLE_CLOSE_START_EVT) // 阀门关闭开始事件
|
||||
{
|
||||
logDebug("VAVLE_CLOSE_START_EVT");
|
||||
|
||||
BSP_BlockSleep();
|
||||
DelayUs(200);
|
||||
|
||||
VALVE_STOP();
|
||||
|
||||
logDebug("MOTOR_INIT");
|
||||
|
||||
tmos_start_task(vavle_task_id, VAVLE_CLOSE_ACTION_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS));
|
||||
|
||||
return (events ^ VAVLE_CLOSE_START_EVT);
|
||||
}
|
||||
if (events & VAVLE_CLOSE_ACTION_EVT) // 阀门关闭动作事件
|
||||
{
|
||||
BSP_BlockSleep();
|
||||
logDebug("VAVLE_CLOSE_ACTION_EVT");
|
||||
|
||||
VALVE_CLOSE();
|
||||
|
||||
logDebug("VALVE_CLOSE");
|
||||
|
||||
tmos_start_task(vavle_task_id, VAVLE_CLOSE_END_EVT, MS1_TO_SYSTEM_TIME(1600));
|
||||
|
||||
return (events ^ VAVLE_CLOSE_ACTION_EVT);
|
||||
}
|
||||
if (events & VAVLE_CLOSE_END_EVT) // 阀门关闭结束事件
|
||||
{
|
||||
VALVE_STOP();
|
||||
|
||||
LED_ALL_CLOSE;
|
||||
|
||||
gValveData.switch_status = kClosed;
|
||||
|
||||
tmos_memset(&RelyData, 0, sizeof(RelyData));
|
||||
BSP_VALVE_Generate_ValveResponse(&RelyData, kCmdCloseVavle, 1);
|
||||
|
||||
tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT);
|
||||
|
||||
BSP_RequestSleep();
|
||||
logDebug("VAVLE_CLOSE_END_EVT");
|
||||
return (events ^ VAVLE_CLOSE_END_EVT);
|
||||
}
|
||||
|
||||
if (events & VAVLE_OPEN_START_EVT) // 阀门打开开始事件
|
||||
{
|
||||
logDebug("VAVLE_OPEN_START_EVT");
|
||||
|
||||
BSP_BlockSleep();
|
||||
DelayUs(200);
|
||||
|
||||
VALVE_STOP();
|
||||
|
||||
logDebug("MOTOR_INIT");
|
||||
|
||||
tmos_start_task(vavle_task_id, VAVLE_OPEN_ACTION_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS));
|
||||
|
||||
return (events ^ VAVLE_OPEN_START_EVT);
|
||||
}
|
||||
|
||||
if (events & VAVLE_OPEN_ACTION_EVT) // 阀门打开动作事件
|
||||
{
|
||||
BSP_BlockSleep();
|
||||
logDebug("VAVLE_OPEN_ACTION_EVT");
|
||||
|
||||
VALVE_OPEN();
|
||||
|
||||
logDebug("VALVE_OPEN");
|
||||
|
||||
tmos_start_task(vavle_task_id, VAVLE_OPEN_END_EVT, MS1_TO_SYSTEM_TIME(1600));
|
||||
|
||||
return (events ^ VAVLE_OPEN_ACTION_EVT);
|
||||
}
|
||||
|
||||
if (events & VAVLE_OPEN_END_EVT) // 阀门打开结束事件
|
||||
{
|
||||
VALVE_STOP();
|
||||
|
||||
LED_ALL_CLOSE;
|
||||
|
||||
gValveData.switch_status = kOpened;
|
||||
|
||||
tmos_memset(&RelyData, 0, sizeof(RelyData));
|
||||
BSP_VALVE_Generate_ValveResponse(&RelyData, kCmdOpenVavle, 1);
|
||||
|
||||
tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT);
|
||||
BSP_RequestSleep();
|
||||
logDebug("VAVLE_OPEN_END_EVT");
|
||||
return (events ^ VAVLE_OPEN_END_EVT);
|
||||
}
|
||||
|
||||
if (events & VAVLE_LOOP_DECT_EVT) // 循环检测事件
|
||||
{
|
||||
logDebug("VAVLE_LOOP_DECT_EVT");
|
||||
|
||||
gValveData.bat = BSP_ReadVbat();
|
||||
|
||||
// 电压过低就关阀
|
||||
if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE)
|
||||
{
|
||||
gValveData.switch_status = kClosed;
|
||||
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
|
||||
}
|
||||
else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE)
|
||||
{
|
||||
tmos_set_event(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT);
|
||||
}
|
||||
tmos_start_task(vavle_task_id, VAVLE_LOOP_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS));
|
||||
|
||||
return (events ^ VAVLE_LOOP_DECT_EVT);
|
||||
}
|
||||
|
||||
if (events & VAVLE_LOW_VBAT_ALARM_EVT) // 低电压报警事件
|
||||
{
|
||||
logDebug("VAVLE_LOW_VBAT_ALARM_EVT"); // 记录低电压报警事件的调试信息
|
||||
|
||||
// 以下是被注释掉的代码块
|
||||
// BSP_BlockSleep(); // 阻止系统进入睡眠模式
|
||||
// BSP_RequestBoost(); // 请求提升系统性能
|
||||
|
||||
// LED_ALL_OFF_DEINIT; // 关闭所有LED并反初始化
|
||||
// LED_Y_ON; // 打开黄色LED
|
||||
|
||||
// BEEP_ON; // 打开蜂鸣器
|
||||
|
||||
// DelayMs(10); // 延时10毫秒
|
||||
|
||||
// LED_ALL_OFF_DEINIT; // 关闭所有LED并反初始化
|
||||
// BEEP_OFF_DEINIT; // 关闭蜂鸣器并反初始化
|
||||
|
||||
// BSP_NoNeedBoost(); // 取消系统性能提升请求
|
||||
// BSP_RequestSleep(); // 请求系统进入睡眠模式
|
||||
|
||||
// tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT); // 设置阀门关闭开始事件
|
||||
|
||||
// tmos_start_task(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT, MS1_TO_SYSTEM_TIME(VALVE_LOW_VBAT_ALARM_PERIOD_MS)); // 启动低电压报警事件,延时一段时间
|
||||
|
||||
return (events ^ VAVLE_LOW_VBAT_ALARM_EVT); // 返回未处理的事件
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void BSP_VAVLE_Init(void) // 阀门初始化函数
|
||||
{
|
||||
vavle_task_id = TMOS_ProcessEventRegister(VAVLE_Task_ProcessEvent);
|
||||
|
||||
tmos_memset(&gValveData, 0, sizeof(gValveData));
|
||||
|
||||
gValveData.switch_status = kClosed; // 设置阀门状态为关闭
|
||||
gValveData.temp = -100;
|
||||
gValveData.in_pressure = 0;
|
||||
gValveData.out_pressure = 0;
|
||||
gValveData.atm_pressure = 0;
|
||||
|
||||
gValveData.type = kTyq; // 设置阀门类型
|
||||
gValveData.bat = BSP_ReadVbat(); // 读取电池电压
|
||||
|
||||
BSP_MOTOR_Init(); // 初始化电机
|
||||
|
||||
tmos_start_task(vavle_task_id, VAVLE_LOOP_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS));
|
||||
|
||||
logInfo("BSP_Valve_Init");
|
||||
}
|
Loading…
Reference in New Issue