ZDBMS/code_app/Main.c

137 lines
3.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.

/********************************************************************************
Copyright (C), Sinowealth Electronic. Ltd.
Author: Sino
Version: V0.0
Date: 2020/04/26
History:
V2.0 2020/04/26 Preliminary
********************************************************************************/
#include "Main.h"
#include "stdio.h"
// 发送字符串
char putchar(char c)
{
REN = 0; // 开启发送
IO_485_DE = 1; // 开启485发送
SBUF = c; // 发
while(!TI);
IO_485_DE = 0; // 关闭485发送
TI = 0;
return c;
}
/*************************************************************************************************
* 函数名: main
* 参 数: 无
* 返回值: 无
* 描 述: 主函数当初始化结束后程序会在While(1)中死循环
1.可通过定时器来触发各个功能模块的执行
2.可通过其他中断源来触发对应模块的执行
*************************************************************************************************/
void main(void)
{
Initial(); //初始化系统
printf("SystemClock: 8MHz");
while(1)
{
//KeyProcess(); //按键处理
if(bTimer50msFlg) //50mS处理和AFE相关的数据采集、计算、保护等
{
McuWDTClear(); //定时清狗
bTimer50msFlg = 0;
AFEInfoProcess(); //获取AFE信息计算电压、温度、电流
BalanceProcess(); //平衡及断线处理
ProtectProcess(); //电压、电流、温度保护
PorSelfTest(); //第一次上电保护检测延时较短暂定50mS一次检测
LoadCheck(); //检测负载是否释放
ChgerCheck(); //检测充电器是否释放
MosCtrl(); //MOS状态检测及控制
ProtectOCRecover(); //过流保护自恢复
//LedDisplay(); //LED显示
#if (UART0_DEFINE != 0)
Uart0Check(); //检查UART0是否正常如果不正常则复位指针向量
#endif
#if (UART1_DEFINE != 0)
Uart1Check(); //检查UART1是否正常如果不正常则复位指针向量
#endif
#if (UART2_DEFINE != 0)
Uart2Check(); //检查UART2是否正常如果不正常则复位指针向量
#endif
}
if(bTimer1sFlg) //1s定时周期
{
IO_LED = ~IO_LED; //LED
printf("\r\n");
printf("BAT0:%.2f mV\r\n", AFE.uiCell[0]*1.0*CALIVOL/E2uiVPackGain);
printf("BAT1:%.2f mV\r\n", AFE.uiCell[1]*1.0*CALIVOL/E2uiVPackGain);
printf("BAT2:%.2f mV\r\n", AFE.uiCell[2]*1.0*CALIVOL/E2uiVPackGain);
printf("BAT3:%.2f mV\r\n", AFE.uiCell[3]*1.0*CALIVOL/E2uiVPackGain);
printf("BAT4:%.2f mV\r\n", AFE.uiCell[4]*1.0*CALIVOL/E2uiVPackGain);
printf("TOTAL:%.2f mV\r\n",(AFE.uiCell[1]+AFE.uiCell[2]+AFE.uiCell[3]+AFE.uiCell[4])*1.0*CALIVOL/E2uiVPackGain);
printf("\r\n");
printf("TEMP0:%.2f C\r\n", AFE.uiICTempe[0]*17.0/100.0-270);
// printf("TEMP1:%.2f C\r\n", (CalcuTemp(AFE.uiTS[0]) + E2siTS0Offset)*1.0);
printf("TEMP1.0:%.2f C\r\n", AFE.uiTS[0]*1.0);
printf("TEMP1.1:%.2f C\r\n", AFE.uiTS[1]*1.0);
bTimer1sFlg = 0;
GasGaugeManage(); //Calculate the battery charge and discharge capacity
AFERamCheck(); //检测AFE寄存器是否误写
AFETwiCheck(); //检测AFE有无连续5S通讯错误
E2PRomTwiCheck(); //检测EEPROM有无连续5S通讯错误
RTCTwiCheck(); //检测RTC有无连续5S通讯错误
if(!RamCheckProcess()) //检测参数变量区是否误写
{
SysParaInit();
}
McuFlashWrWaitCheck(); //检测是否需要更新参数到MCU Flash
E2PRomBKCheck(); //备份EEPROM
//LowPowerCheck(); //低功耗检测
}
SystemResetProcess(); //系统复位
ISPProcess(); //在线升级代码
CaliProcess(); //校准
McuFlashProcess(); //备份参数到MCU Flash区
E2PRomBKProcess(); //外挂EEPROM备份
//LowPowerProcess(); //低功耗处理
Info.uiPackStatus = uiPackStatus; //更新PACK和Battery的信息可通过UART反馈给主机
Info.uiBatStatus = uiBatStatus;
}
}