#include "led.h" #include "delay.h" #include "sys.h" #include "stm32f10x.h" #include "adc.h" #include "stdio.h" #include "key.h" #include "usart.h" #include "stdio.h" #include "string.h" #define version 2 #define EN_INTERRUPT __enable_irq(); #define DI_INTERRUPT __disable_irq(); unsigned char LRC_Check(unsigned char* data, int data_len) { int i = 0; unsigned char lrc = 0; unsigned int sum=0; for (i = 0; i < data_len; i++) { sum+= data[i]; } lrc = (sum%256); lrc = ~lrc+1; return lrc; } #define KEY_GPIO_PROT GPIOA #define KEY1_GPIO_PIN GPIO_Pin_7 #define KEY2_GPIO_PIN GPIO_Pin_6 #define KEY3_GPIO_PIN GPIO_Pin_5 #define KEY1_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY1_GPIO_PIN) #define KEY2_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY2_GPIO_PIN) #define KEY3_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY3_GPIO_PIN) //#define KEY1_IN PCin(1) //#define KEY2_IN PCin(13) //#define KEY3_IN PCin(2) void key_gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = KEY1_GPIO_PIN|KEY2_GPIO_PIN|KEY3_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //���ó��������� GPIO_Init(KEY_GPIO_PROT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // �˿����� GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //������� GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO���ٶ�Ϊ50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); //�����趨������ʼ��GPIOC13 GPIO_ResetBits(GPIOA,GPIO_Pin_4); } uint32_t get_sys_time=0; uint16_t NO_val=0; uint16_t CO2_val=0; uint8_t no_changeflag=0; uint8_t co2_changeflag=0; uint16_t no_changeval=0; uint16_t co2_changeval=0; uint16_t no_tempval=0; uint16_t co2_tempval=0; long cnt_temp=0; //ȡ����ָ�� 05 30 05 02 01 C3 //NO�� 15% //CO2 �� 15% int key_Task(void) { static char key_flag=0; if(KEY1_IN==0||KEY2_IN==0||KEY3_IN==0) { if(key_flag==0) { key_flag=1; if(KEY1_IN==0) { //printf("k1\r\n");��ɫ #if (version==1) no_changeflag=1; no_changeval+=150; #elif (version==2) no_changeflag=1; no_changeval+=15; if(no_changeval>90)no_changeval=90; #endif // printf("k1\r\n"); }else if(KEY2_IN==0) { // printf("k2\r\n"); ��ɫ #if (version==1) co2_changeflag=1; co2_changeval+=15; #elif (version==2) co2_changeflag=1; co2_changeval+=5; if(co2_changeval>90)co2_changeval=90; #endif // printf("k2\r\n"); } else if(KEY3_IN==0) { // printf("k3\r\n");//��ɫ no_changeflag=0; no_changeval=0; co2_changeflag=0; co2_changeval=0; __set_FAULTMASK(1);//�ر����ж� NVIC_SystemReset();//����Ƭ������ } } }else { key_flag=0; } return 20; } /* 06H-30H-LB-02H-�̶ȼ�����λ-��·ѹ����λ-��·ѹ����λ-���¸�λ -���µ�λ-ת�ٸ�λ-ת�ٵ�λ-NO��λ-NO��λ-CO2��λ- CO2��λ -N ֵ��λ-N ֵ��λ-Ns ֵ��λ-Ns ֵ��λ-K ֵ��λ -K ֵ��λ-�����¶�-У���� */ void user_data_check(void) { if(user_uart_handle.uart2_sta) { if(user_uart_handle.uart2_len>0&&user_uart_handle.uart2_len<Usart2ReadLen) { if(user_uart_handle.uart2_len==3&&user_uart_handle.uart2_buff[0]==0x88&&user_uart_handle.uart2_buff[1]==0x55&&user_uart_handle.uart2_buff[2]==0x99) { user_uart_handle.uart2_buff[0]=no_changeval<<8; user_uart_handle.uart2_buff[1]=no_changeval; user_uart_handle.uart2_buff[2]=co2_changeval<<8; user_uart_handle.uart2_buff[3]=co2_changeval; USART2_String(user_uart_handle.uart2_buff,4); }else { USART1_String(user_uart_handle.uart2_buff,user_uart_handle.uart2_len); } user_uart_handle.uart2_sta=0; } } if(user_uart_handle.uart1_sta) { user_uart_handle.uart1_sta=0; if(user_uart_handle.uart1_len>0&&user_uart_handle.uart1_len<Usart1ReadLen) { if(user_uart_handle.uart1_buff[0]==0x06 &&user_uart_handle.uart1_buff[1]==0x30 &&user_uart_handle.uart1_buff[2]==0x16 &&user_uart_handle.uart1_buff[3]==0x02 &&user_uart_handle.uart1_buff[4]==0x01 ) { if(LRC_Check(user_uart_handle.uart1_buff,user_uart_handle.uart1_len-1)==user_uart_handle.uart1_buff[user_uart_handle.uart1_len-1]) { NO_val = user_uart_handle.uart1_buff[11]<<8|user_uart_handle.uart1_buff[12]; CO2_val = user_uart_handle.uart1_buff[13]<<8|user_uart_handle.uart1_buff[14]; if(no_changeflag) { #if (version==1) cnt_temp = NO_val - no_changeval; #elif (version==2) cnt_temp = NO_val - (no_changeval*NO_val)/100; #endif if(cnt_temp<1)cnt_temp=1; no_tempval = cnt_temp; user_uart_handle.uart1_buff[11]=no_tempval>>8; user_uart_handle.uart1_buff[12]=no_tempval; } if(co2_changeflag) { #if (version==1) cnt_temp = CO2_val + co2_changeval; #elif (version==2) cnt_temp = CO2_val + (co2_changeval*CO2_val)/100; #endif if(cnt_temp>2000)cnt_temp=2000; co2_tempval = cnt_temp; user_uart_handle.uart1_buff[13]=co2_tempval>>8; user_uart_handle.uart1_buff[14]=co2_tempval; } user_uart_handle.uart1_buff[user_uart_handle.uart1_len-1]=LRC_Check(user_uart_handle.uart1_buff,user_uart_handle.uart1_len-1); USART2_String(user_uart_handle.uart1_buff,user_uart_handle.uart1_len); } }else { USART2_String(user_uart_handle.uart1_buff,user_uart_handle.uart1_len); } } } } void TIM4_IRQHandler() //20ms 1�� { u8 st; st=TIM_GetFlagStatus(TIM4, TIM_IT_Update); if(st!=0) { TIM_ClearFlag(TIM4, TIM_IT_Update); get_sys_time++; key_Task(); } } void Timer4_init() //T4 20msʱ�� { // TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM4,ENABLE);//M TIM_TimeBaseStructure.TIM_Period = 20000-1; //�������� //20ms TIM_TimeBaseStructure.TIM_Prescaler =72-1;//��Ƶֵ TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //�ָ�ʱ�� TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //���ϼ��� TIM_DeInit(TIM4); TIM_TimeBaseInit(TIM4, & TIM_TimeBaseStructure); TIM_Cmd(TIM4, ENABLE); //ʹ�ܶ�ʱ��2 /*���¶�ʱ��4�жϳ�ʼ��*/ TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE); //���ϼ�����������ж� NVIC_InitStructure.NVIC_IRQChannel =TIM4_IRQn;// TIM4_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init (&NVIC_InitStructure); } void IWDG_Init(u8 prer,u16 rlr) { IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); IWDG_SetPrescaler(prer); IWDG_SetReload(rlr); IWDG_ReloadCounter(); IWDG_Enable(); } void IWDG_Feed(void) { IWDG_ReloadCounter();//reload } //ĸͷuart2�ӵ��� ��ͷuart1����λ�� int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//�����ж����ȼ�����Ϊ��2��2λ��ռ���ȼ���2λ��Ӧ���ȼ� delay_init(); //��ʱ������ʼ�� LED_Init(); //��ʼ����LED���ӵ�Ӳ���ӿ� uart_init(9600);//���ڳ�ʼ�� uart2_init(9600); key_gpio_init(); Timer4_init();//��ʼ����ʱ�� // printf("sys_init\r\n"); // USART2_String((u8*)"sys_init\r\n",10); IWDG_Init(4,625); //Ϊ1s while(1) { #if (version==1) if(get_sys_time>50) { get_sys_time=0; LED_OUT^=1; //USART2_String((u8*)"sys_init\r\n",10); // printf("sys_init\r\n"); } #elif (version==2) if(get_sys_time>100) { get_sys_time=0; LED_OUT^=1; //USART2_String((u8*)"sys_init\r\n",10); // printf("sys_init\r\n"); } #endif user_data_check(); IWDG_Feed(); } }