232 lines
4.9 KiB
C
232 lines
4.9 KiB
C
/**
|
|
******************************************************************************
|
|
* @file tim.c
|
|
* @author Jerry
|
|
* @version V2.1
|
|
* @date 19-April-2022
|
|
* @brief tim program body.
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "stm32f10x.h"
|
|
#include "global.h"
|
|
|
|
uint32_t tmrSys = 0;
|
|
uint32_t tmrTemp[20];
|
|
|
|
//10MS
|
|
void uf_TIM3_Init(void)
|
|
{
|
|
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
|
NVIC_InitTypeDef NVIC_InitStructure;
|
|
|
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
|
|
|
|
TIM_TimeBaseStructure.TIM_Period = 10000-1;
|
|
TIM_TimeBaseStructure.TIM_Prescaler = 72-1;
|
|
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
|
|
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
|
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
|
|
|
|
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
|
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //主定时器 优先级:0,0
|
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
|
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
|
NVIC_Init(&NVIC_InitStructure);
|
|
|
|
TIM_ITConfig(TIM3, TIM_IT_Update,ENABLE );
|
|
TIM_Cmd(TIM3, ENABLE); //使能TIMx外设
|
|
}
|
|
|
|
//10ms中断
|
|
void TIM3_IRQHandler(void) //TIM3中断
|
|
{
|
|
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
|
|
{
|
|
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx的中断待处理位:TIM 中断源
|
|
tmrSys++;
|
|
|
|
KEY_TIM_Moni();
|
|
|
|
Cali_SOC_Moni();
|
|
|
|
Screen_TIM_Moni(); //[陶晶驰]
|
|
CAN_TIM_Moni();
|
|
MODBUS_TIM_Moni();
|
|
MODBUS1_TIM_Moni();
|
|
|
|
// DI_TIM_Moni();
|
|
// DI_Ctrl();
|
|
|
|
OCC2_TIM_Moni();
|
|
OCC2_Ctrl();
|
|
|
|
#if Addr_SetAuto
|
|
//休眠时,地址变动暂停
|
|
if(sleep_flag == 0)
|
|
{
|
|
if(paraMem.addr_FREE_Flg == 0) ADDR_Rank_Moni();
|
|
if(paraMem.addr_FREE_Flg == 0) ADDR_Assign_Moni();
|
|
}
|
|
#endif
|
|
|
|
//只有RTC时钟有问题时,才会启用下列函数
|
|
if(LSEErrFlag==1)
|
|
{
|
|
SLEEP_TIM_Moni(); //休眠的倒计时
|
|
SLEEP2_TIM_Moni(); //休眠2的倒计时
|
|
UVOff_TIM_Moni(); //欠压强制复位的倒计时
|
|
FCCCali_TIM_Moni(); //容量校准要在12h内的倒计时
|
|
}
|
|
|
|
|
|
if(Screen_RevFlg == 1) //屏幕收到完整一帧去处理
|
|
{
|
|
Screen_RevCount++;
|
|
if(Screen_RevCount > 1)
|
|
{
|
|
Screen_RevFlg = 0;
|
|
Screen_RevCount = 0;
|
|
|
|
//Screen_IT_Update();
|
|
Screen_RevHandlerFlg = 1;
|
|
}
|
|
}
|
|
|
|
if(MODBUS_RevFlg == 1) //MODBUS收到完整一帧去处理
|
|
{
|
|
MODBUS_RevCount++;
|
|
if(MODBUS_RevCount > 1)
|
|
{
|
|
MODBUS_RevFlg = 0;
|
|
MODBUS_RevCount = 0;
|
|
|
|
MODBUS_IT_TIMUpdate();
|
|
}
|
|
}
|
|
|
|
if(MODBUS1_RevFlg == 1) //MODBUS1收到完整一帧去处理
|
|
{
|
|
MODBUS1_RevCount++;
|
|
if(MODBUS1_RevCount > 1)
|
|
{
|
|
MODBUS1_RevFlg = 0;
|
|
MODBUS1_RevCount = 0;
|
|
|
|
MODBUS1_IT_TIMUpdate();
|
|
}
|
|
}
|
|
|
|
|
|
/*三选一模块*/
|
|
#if BLE_Conn
|
|
BLE_TIM_Moni(); //BLE无通信定时初始化
|
|
|
|
if(BLE_RevFlg == 1) //BLE收到完整一帧去处理
|
|
{
|
|
BLE_RevCount++;
|
|
if(BLE_RevCount > 3)
|
|
{
|
|
BLE_RevFlg = 0;
|
|
BLE_RevCount = 0;
|
|
|
|
BLE_IT_Update();
|
|
}
|
|
}
|
|
#endif
|
|
#if WIFI_Conn
|
|
WIFI_TIM_Moni(); //WIFI无通信定时初始化
|
|
|
|
if(WIFI_RevFlg == 1) //WIFI收到完整一帧去处理
|
|
{
|
|
WIFI_RevCount++;
|
|
if(WIFI_RevCount > 3)
|
|
{
|
|
WIFI_RevFlg = 0;
|
|
WIFI_RevCount = 0;
|
|
|
|
WIFI_IT_Update();
|
|
}
|
|
}
|
|
#endif
|
|
#if LTE_Conn
|
|
LTE_TIM_Moni(); //LTE无通信定时初始化
|
|
|
|
if(LTE_RevFlg == 1) //LTE收到完整一帧去处理
|
|
{
|
|
LTE_RevCount++;
|
|
if(LTE_RevCount > 3)
|
|
{
|
|
LTE_RevFlg = 0;
|
|
LTE_RevCount = 0;
|
|
|
|
//有回复,清零等待倒计时
|
|
LTE_WaitRxFlg = 0;
|
|
LTE_WaitRxDelay = 0;
|
|
|
|
if(LTE_OTA_Flag == 0)
|
|
{
|
|
LTE_4G_IT_Update();
|
|
}
|
|
else
|
|
{
|
|
LTE_OTA_IT_Update();
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
|
|
/**************************************************************************
|
|
** 函数名: TIMER_Update
|
|
** 输 入: nothing
|
|
** 输 出: tmrSys value
|
|
** 备 注:tmrSys do ++ in the SysTick_Handler function
|
|
***************************************************************************/
|
|
uint32_t TIMER_Update(void)
|
|
{
|
|
return tmrSys;
|
|
}
|
|
|
|
/**************************************************************************
|
|
** 函数名:
|
|
** 输 入:
|
|
** 输 出:
|
|
** 备 注:
|
|
***************************************************************************/
|
|
uint32_t TIMER_IsOut(uint32_t cnt, uint32_t tmr)
|
|
{
|
|
uint32_t tmp = tmrSys;
|
|
|
|
tmp = cnt > tmp ? ( (uint32_t)(-1) - cnt + tmp ) : ( tmp-cnt );
|
|
|
|
if(tmp>=tmr)
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
/**************************************************************************
|
|
** 函数名:
|
|
** 输 入:
|
|
** 输 出:
|
|
** 备 注:
|
|
***************************************************************************/
|
|
uint32_t TIMER_IsOther(uint32_t cnt, uint32_t tmr)
|
|
{
|
|
uint32_t tmp = tmrSys;
|
|
uint32_t tmp1;
|
|
|
|
tmp = cnt > tmp ? ( (uint32_t)(-1) - cnt + tmp ) : ( tmp-cnt );
|
|
tmp1 = tmp>=tmr ? (tmp - tmr): (tmr-tmp);
|
|
|
|
return tmp1;
|
|
}
|
|
|