/*************************** (C) COPYRIGHT 2017 YNHB ****************************
 * 文件名  ：main.c
 * 描  述  ：主函数    
 * 版  本  ：V1.0
 * 作  者  ：XuZhongPing
 * 日  期  ：2017/03/05 
*********************************************************************************/
#include "stm32f10x.h"
#include "device.h"
#include "data_typedef.h"
#include "m_s_comm.h"

void NVIC_Configuration(void);
void RegularUploadTask(void);

int main(void)
{
	static timer waitingTimer_1s;
	timer_set(&waitingTimer_1s, 10);
	
	delay_init();	    	 							//延时函数初始化	  
	NVIC_Configuration(); 	 					//设置NVIC中断分组
	
	USART1_Init(2400);	 							//秤2
	USART2_Init(38400);								//主从MCU通信接口
	USART3_Init(2400);	 							//秤1
	USART4_Init(2400);								//Scale 3
	USART5_Init(2400);							//秤4
	
	TIM2_Int_Init(1000, 7200-1);			//10Khz的计数频率，计数到1000为100ms （即每个周期为0.1ms）
	TIM3_Int_Init(100, 7200-1);				//10Khz的计数频率（每个周期为0.1ms），定时10ms用于限位开关和按钮扫描
	TIM4_Int_Init(5000, 7200-1);			//10Khz的计数频率（每个周期为0.1ms），计数到5000为500ms
	TIM5_Int_Init(50, 7200-1);				//10Khz的计数频率（每个周期为0.1ms），计数到50为5ms
	
	printf("\r\n***************System Running***************\r\n");
	
	DeviceInit();											//硬件设备初始化
	
	IWDG_Init(5, 625);    						//看门狗初始化，分频数为128,重载值为625,溢出时间为2s	
	
	while(1)	
	{	
		LED_Task();											//LED灯指示任务
		WeightDetectionTask();					//称重检测
		GetTemperatureTask();						//取得温度任务
		GetDistanceTask();							//测距任务
		KeysSendTask();									//按键状态发送任务
		RegularUploadTask();						//定时上传任务
		M_S_DataDecodeTask();						//主从机通信任务
		
		SystemExceptionTask();					//系统异常处理任务
		IWDG_FeedTask();								//看门狗喂狗任务
		
		if(timer_expired(&waitingTimer_1s))
		{
			timer_restart(&waitingTimer_1s);
		}
	}
}


/*
***********************************************************************
*	函 数 名: RegularUploadTask
*	功能说明: 定时上传任务
*	形    参：无        
*	返 回 值: 无
***********************************************************************
*/
void RegularUploadTask(void)
{
	static timer sendDevStaTimer;			//上传设备运行状态信息（温度、信号、测距）
	
	static uint8_t timer_ok = 0;
	if(timer_ok == 0)
	{
		timer_ok = 1;
		timer_set(&sendDevStaTimer, 5);
	}
	
	//设备运行状态信息上传
	if(timer_expired(&sendDevStaTimer))
	{
		timer_restart(&sendDevStaTimer);
		M_S_CommandSend(0x01);
	}
}

/*
***********************************************************************
*	函 数 名: RegularUploadTask
*	功能说明: 定时上传任务
*	形    参：无        
*	返 回 值: 无
***********************************************************************
*/
void NVIC_Configuration(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);		//设置NVIC中断分组2:2位抢占优先级，2位响应优先级
}

/******************** (C) COPYRIGHT 2017 YNHB *****END OF FILE*******************/ 
