#include "main.h" #include "public.h" #include "key.h" #include "sim_eeprom.h" #include "tim3_pwm_output.h" #include "adc_dma_multichanit.h" #include #include "heater.h" #include "fpc.h" #include "ST7735S.h" #include "pid.h" #include "uart.h" #include "timer.h" #include "adc_anychannel_continuousscan_interrupt.h" #include "spi_master_dma_interrupt.h" #include "sim_eeprom.h" int temp_pwm; u8 T_temp_0 = 0; char T_temp_1 = 0; float hot_1_C = 0 ; // 加热1s上升多少 度 float PWM_SCALE = 0; // pwm 比例; float down_up_rate = 0; // 下段升温速率 double down_per; // 下段百分比 float down_V ; u8 one_times_0 = 0; u8 one_times_1 = 0; double Q_J = 0; u8 last_pwm = 0; u8 down_rise_pwm = 0; u8 up_down_flag = 0; u8 work_mode = 1; //0 待机;1开机 2加热; u8 restart = 1 ; u8 heat_start = 0; u8 heat_stage = 0; void SystemInit(void); void GPIO_AIN_ALL(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOB, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOC, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOD, ENABLE); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_15; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOC, &GPIO_InitStruct); GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_Init(GPIOD, &GPIO_InitStruct); } void PWR_GPIO_Configure(void) { PVCC_EN_OFF(); Beep_OFF(); IR_OFF(); Charge_ON(); LCD_OFF(); GPIO_AIN_ALL(); FPC_Init(); GPIO_InitTypeDef GPIO_InitStruct; RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOB, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOD, ENABLE); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11 ;//PVCC GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = PVCC_EN_Pin ;//spi2 sda GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = ST7735_LED_Pin ;//LED GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(ST7735_LED_GPIO_Port, &GPIO_InitStruct); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;//HEAT GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_ResetBits(GPIOA,GPIO_Pin_2); GPIO_ResetBits(GPIOA,GPIO_Pin_11); PVCC_EN_OFF(); Beep_OFF(); IR_OFF(); Charge_ON(); LCD_OFF(); } void PWR_EXTI_Configure(void) { EXTI_InitTypeDef EXTI_InitStruct; NVIC_InitTypeDef NVIC_InitStruct; //External interrupt Mode SYSCFG_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); // 按键 //Interrupt threads where pins are located EXTI_InitStruct.EXTI_Line = EXTI_Line0; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; //rising trigger EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); SYSCFG_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource3); // 5V充电 //Interrupt threads where pins are located EXTI_InitStruct.EXTI_Line = EXTI_Line3; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; //rising trigger EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); SYSCFG_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource5); // 触摸 //Interrupt threads where pins are located EXTI_InitStruct.EXTI_Line = EXTI_Line5; EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; //rising trigger EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStruct.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStruct); NVIC_InitStruct.NVIC_IRQChannel = EXTI0_1_IRQn; NVIC_InitStruct.NVIC_IRQChannelPriority = 0x01; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); NVIC_InitStruct.NVIC_IRQChannel = EXTI2_3_IRQn; NVIC_InitStruct.NVIC_IRQChannelPriority = 0x01; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); NVIC_InitStruct.NVIC_IRQChannel = EXTI4_15_IRQn; NVIC_InitStruct.NVIC_IRQChannelPriority = 0x01; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); } void PWR_Pretreatment(void) { #ifdef _debug_ printf("lowpower in !\n"); #endif ADC_VrefintCmd(DISABLE); ADC_Cmd(ADC1,DISABLE); DMA_Cmd(DMA1_Channel2, DISABLE); DMA_Cmd(DMA1_Channel3, DISABLE); DMA_Cmd(DMA1_Channel4, DISABLE); DMA_Cmd(DMA1_Channel5, DISABLE); SPI_Cmd(SPI1, DISABLE); SPI_Cmd(SPI2, DISABLE); TIM_Cmd(TIM2, DISABLE); UART_Cmd(UART1, DISABLE); RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBENR_DMA1,DISABLE); RCC_APB2PeriphClockCmd(RCC_APB2ENR_UART1,DISABLE); RCC_APB2PeriphClockCmd(RCC_APB2ENR_SPI1,DISABLE); RCC_APB1PeriphClockCmd(RCC_APB1ENR_SPI2, DISABLE); RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM2, DISABLE); PWR_GPIO_Configure(); PWR_EXTI_Configure(); } void PWR_Reinitialize(void) { SystemInit(); CONSOLE_Init(115200); TimerInit(); g_work.m_work_flag._Uart_match = 0; FPC_Init();//包括FPC 充电 蜂鸣器 触摸引脚初始化 SPI1_Configure();//16M flash SPI2_Configure();//LCD spi SPI1_FLASH_ReadDeviceID(); SPI1_FLASH_ReadJEDEC_ID(); ST7735_Init(); Heater_Init(); ADC_Configure(); ADC_SoftwareStartConvCmd(ADC1, ENABLE); OFF_delay_time = 5000; FPC_Scan(); } void work_new(void) { if(work_mode == 0 )//低功耗 { restart = 1; logo1_flag = 0; logo2_flag = 0; logo3_flag = 0; logo4_flag = 0; logo5_flag = 0; heat_stage = 0; PWR_Pretreatment();//准备进入低功耗前 /* Deep Stop Mode */ RCC_APB1PeriphClockCmd(RCC_APB1ENR_PWR, ENABLE); PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); PWR_Reinitialize(); } else if(work_mode == 1)//开机+电量显示 { logo3_flag = 0; logo4_flag = 0; logo5_flag = 0; heat_stage = 0; temp_control_new(0,0); if(restart == 1) { logo2_flag = 0; animation_start();//播放开机动画 } else { logo1_flag = 0; animation_show_v(); } } else if(work_mode == 2)//加热 { logo1_flag = 0; logo2_flag = 0; heat_control(); if(heat_stage == 1)//升温状态 { animation_temp_on(); } else if(heat_stage == 2)//恒温抽吸状态 { animation_smoking(); } else if (heat_stage ==3)//加热完成状态 { animation_heat_over(); } } }