BLE_DCF_TYQ_CH592F/APP/peripheral_main.c

348 lines
8.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/********************************** (C) COPYRIGHT *******************************
* File Name : main.c
* Author : WCH
* Version : V1.1
* Date : 2020/08/06
* Description : 外设从机应用主函数及任务系统初始化
*********************************************************************************
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* Attention: This software (modified or not) and binary are used for
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
*******************************************************************************/
#include "CONFIG.h"
#include "HAL.h"
#include "gattprofile.h"
#include "peripheral.h"
#include "bsp_adc.h"
#include "bsp_key.h"
#include "bsp_beep_led_emv.h"
#include "log.h"
#include "bsp_uart.h"
#include "bsp_i2c.h"
#include "bsp_iwdg.h"
#include "bsp_flash.h"
#include "bsp_valve.h"
#undef LOG_ENABLE
#define LOG_ENABLE 1
#undef LOG_TAG
#define LOG_TAG "main"
__attribute__((aligned(4))) uint32_t MEM_BUF[BLE_MEMHEAP_SIZE / 4];
static uint8_t key_press_cnt = 0;
void app_task_handler(TeAppEvtType app_evt_type)
{
BSP_BlockSleep();
BSP_RequestBoost();
// DelayMs(15);
switch (app_evt_type)
{
case kKeyShort:
logDebug("button short press");
key_press_cnt++;
logDebug("key_press_cnt = %d", key_press_cnt);
if (valve_switch_dect_flag)
{
valve_switch_dect_flag = 0;
logDebug("LED显示状态");
// tmos_set_event(led_task_id, LED_SHOW_START_EVT);
BSP_BlockSleep();
BSP_RequestBoost();
DelayMs(1);
ShowLed();
}
if (key_press_cnt >= 2)
{
// if (gValveData.switch_status == kClosed)
// {
// logDebug("kClosed-->kOpened");
// // tmos_set_event(led_task_id, LED_SHOW_START_EVT);
// gValveData.switch_status = kOpened;
// BSP_BlockSleep();
// BSP_RequestBoost();
// DelayMs(1);
// ShowLed();
// // tmos_stop_task(led_task_id, LED_SHOW_ONCE_EVT);
// // tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000);
// }
// else
if (gValveData.switch_status != kClosed)
{
logDebug("kOpened-->kClosed");
gValveData.switch_status = kClosed;
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
// tmos_set_event(led_task_id, LED_SHOW_START_EVT);
BSP_BlockSleep();
BSP_RequestBoost();
DelayMs(1);
ShowLed();
// tmos_stop_task(led_task_id, LED_SHOW_ONCE_EVT);
// tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000);
}
}
break;
case kKeyLong:
logDebug("button long press");
break;
case kKeyRelease:
// BSP_KEY_EnterLowpower();
// DelayMs(10);
key_press_cnt = 0;
// BSP_RequestSleep();
// tmos_set_event(led_task_id, LED_SHOW_END_EVT);
LED_ALL_OFF_DEINIT;
BEEP_OFF_DEINIT;
BSP_NoNeedBoost();
BSP_RequestSleep();
logDebug("gpio relase;BSP_RequestSleep");
break;
default:
break;
}
}
/*********************************************************************
* @fn Main_Circulation
*
* @brief 主循环
*
* @return none
*/
__HIGH_CODE
__attribute__((noinline)) void Main_Circulation()
{
while (1)
{
TMOS_SystemProcess();
KEY_ProcessLoop();
BSP_UART1_TxLoop();
}
}
// https://www.cnblogs.com/gscw/p/18530905
// 在连接间隔和广播间隔到来时,会进入该回调,可以在回调函数加上其他执行逻辑代码,如喂狗等。
void BLE_AdvertiseEventCB(uint32_t timeUs)
{
FEED_IWDG();
logDebug("BLE_AdvertiseEventCB");
}
void BLE_ConnectEventCB(uint32_t timeUs)
{
FEED_IWDG();
logDebug("BLE_ConnectEventCB");
}
/*********************************************************************
* @fn main
*
* @brief 主函数
*
* @return none
*/
int main(void)
{
#if (defined(DCDC_ENABLE)) && (DCDC_ENABLE == TRUE)
PWR_DCDCCfg(ENABLE);
#endif
HSECFG_Capacitance(HSECap_18p);
SetSysClock(CLK_SOURCE_HSE_PLL_62_4MHz);
#if (defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)
GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PD);
GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PD);
#endif
#ifdef DEBUG
// 改成 1500000 波特率了
BSP_UART1_Init(2500000);
#endif
DelayMs(1000 * 3);
CH58x_BLEInit();
HAL_Init();
GAPRole_PeripheralInit();
Peripheral_Init();
logDebug("GetSysClock = %d Hz", GetSysClock());
// extern void Peripheral_SetMacName(void);
// Peripheral_SetMacName();
// while(1)
// {
// DelayMs(1000);
// }
BSP_FLASH_Init();
BSP_BEEP_LED_EMV_Init();
logDebug("Start @ChipID=%02X\n", R8_CHIP_ID);
logError("中文测试 %2.2f", 123.456);
logDebug("%s\n", VER_LIB);
uint8_t MacAddr[6];
GetMACAddress(MacAddr);
// 手机APP显示是倒序的[5-0],不是[0-5]
logDebug("MacAddr: %02X:%02X:%02X:%02X:%02X:%02X", MacAddr[0], MacAddr[1], MacAddr[2], MacAddr[3], MacAddr[4], MacAddr[5]);
// log打印编译时间和编译日期
logDebug("Compile Time: %s %s", __DATE__, __TIME__);
GXHTC3C_Init();
BSP_KEY_Init(app_task_handler);
// IWDG_Init(1500);
DelayMs(1000 * 3);
BSP_ADC_Init();
BSP_VAVLE_Init();
HAL_Init();
GAPRole_PeripheralInit();
Peripheral_Init();
BSP_BlockSleep();
BSP_RequestBoost();
#if 0
DelayMs(1);
EMV_CHARGE_EN;
logDebug("EMV_CHARGE_EN");
DelayMs(1500);
BOOST_EN;
// 关阀动作,一定要先关充电的防止其他12V用电
EMV_CHARGE_OFF_DEINIT;
BEEP_ON;
logDebug("EMV_CHARGE_OFF_DEINIT");
EMV_ON;
logDebug("EMV_ON");
DelayMs(100);
BEEP_OFF_DEINIT;
EMV_CHARGE_OFF_DEINIT;
EMV_OFF_DEINIT;
LED_ALL_OFF_DEINIT;
DelayMs(100);
BSP_VAVLE_Init();
VavleDect_Start();
DelayMs(10);
valve_switch_off_freq = VavleDect_GetFreq();
logDebug("valve_switch_off_freq = %06d Hz", valve_switch_off_freq);
while (1)
{
LED_ALL_OFF_DEINIT;
DelayMs(500);
LED_R_ON;
DelayMs(500);
if (IS_KEY_Vaild())
{
DelayMs(20);
if (IS_KEY_Vaild())
{
break;
}
}
}
DelayMs(100);
BSP_VAVLE_Init();
VavleDect_Start();
DelayMs(10);
valve_switch_on_freq = VavleDect_GetFreq();
logDebug("valve_switch_on_freq = %06d Hz", valve_switch_on_freq);
valve_switch_freq = valve_switch_on_freq;
VavleDect_Switch();
#endif
BSP_VAVLE_Init();
ShowLed();
BEEP_ON;
DelayMs(1000 * 1);
// tmos_set_event(Peripheral_TaskID, SBP_REPLY_CMD_EVT);
#if 0
// GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeIN_Floating);
// TMR3功能引脚映射选择位
// 1TMR3_/PWM3_/CAP3_映射到PA[2]
R16_PIN_ALTERNATE |= (1 << 3);
logDebug("TMR3_CapInit 0");
TMR3_CapInit(FallEdge_To_FallEdge);
// (1 / 62.4MHz) * 2的26次方 = 0.01602564102564102564102564102564 us * 67108864 约等于 1.0754625641025641025641025641025 S
// TMR3_CAPTimeoutCfg(FREQ_SYS ); // 设置捕捉超时时间
TMR3_CAPTimeoutCfg(GetSysClock() / 100); // 设置捕捉超时时间 10ms
// TMR3_CAPTimeoutCfg(0x3FFFFFF); // 设置捕捉超时时间
TMR3_DMACfg(ENABLE, (uint16_t)(uint32_t)&CapBuf[0], (uint16_t)(uint32_t)&CapBuf[20], Mode_Single);
TMR3_ITCfg(ENABLE, TMR0_3_IT_DMA_END); // 开启DMA完成中断
PFIC_EnableIRQ(TMR3_IRQn);
logDebug("TMR3_CapInit");
while(capFlag == 0);
capFlag = 0;
for(uint8_t i = 0; i < 20; i++)
{
logDebug("%08ld ", CapBuf[i] & 0x1ffffff); // 26bit, 最高位表示 高电平还是低电平
uint16_t t = ((CapBuf[i] & 0x1ffffff) * 1.0f) / FREQ_SYS * 1000000;
uint16_t f = 1000000 / t;
logDebug("T = %04d us, f = %04d Hz", t, f);
BSP_UART1_TxLoop();
}
// DelayMs(1000 * 30);
#endif
LED_ALL_OFF_DEINIT;
BEEP_OFF_DEINIT;
// logDebug("IWDG_Init 0");
// IWDG_Init(1500);
BSP_NoNeedBoost();
BSP_RequestSleep();
// 在连接间隔和广播间隔到来时,会进入回调中喂狗
// LL_AdvertiseEventRegister(BLE_AdvertiseEventCB);
// LL_ConnectEventRegister(BLE_ConnectEventCB);
// FEED_IWDG();
// logDebug("IWDG_Init 1");
Main_Circulation();
}
/******************************** endfile @ main ******************************/