/* ********************************************************************************* 头文件 ********************************************************************************* */ #include "usart2.h" #include "bsp.h" /* ************************************************************************************ 变量定义 ************************************************************************************ */ char USART2_RX_BUF[USART2_MAX_RECV_LEN]; //接收缓冲,最大USART2_MAX_RECV_LEN个字节. u8 USART2_TX_BUF[USART2_MAX_SEND_LEN]; //发送缓冲,最大USART2_MAX_SEND_LEN字节 vu16 USART2_RX_STA=0; /* ********************************************************************************************************* * 函 数 名: USART2_ReceiveBuff_Clear() * 功能说明: 清空数组USART2_RX_BUF * 输 入 :无 * 输 出 :无 ********************************************************************************************************* */ void USART2_ReceiveBuff_Clear(void) { USART2_RX_STA=0; memset(USART2_RX_BUF,0,USART2_MAX_RECV_LEN); } /* ********************************************************************************************************* * 函 数 名: USART2_Configuration() * 功能说明: 串口2配置 * 输 入 :波特率baund * 输 出 :无 ********************************************************************************************************* */ void USART2_Configuration(u32 baund) { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //使能USART2 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //GPIOB时钟 USART_DeInit(USART2); //复位串口1 //USART2_TX PB.10 PB.11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2); USART_InitStructure.USART_BaudRate = baund; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART2,&USART_InitStructure); USART_Cmd(USART2,ENABLE); USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//开启USART2的接收中断 //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;//串口3中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、 USART_ClearFlag(USART2,USART_FLAG_TC); //清除发送完成标志位 } /* ********************************************************************************************************* * 函 数 名: u3_printf() * 功能说明: 串口3输出 * 输 入 : * 输 出 : ********************************************************************************************************* */ void u2_printf(char* fmt,...) { u16 i,j; va_list ap; USART2_ReceiveBuff_Clear(); va_start(ap,fmt); vsprintf((char*)USART2_TX_BUF,fmt,ap); va_end(ap); i=strlen((const char*)USART2_TX_BUF); //此次发送数据的长度 for(j=0;j12| ((temp_datas[6]-'0')*10+(temp_datas[7]-'0')*1)>31| ((temp_datas[8]-'0')*10+(temp_datas[9]-'0')*1)>23| ((temp_datas[10]-'0')*10+(temp_datas[11]-'0')*1)>59| ((temp_datas[12]-'0')*10+(temp_datas[13]-'0')*1)>59) { BC25_Senddata_mode(13,"parw-4,fail,*"); }else { SetRTC( ((temp_datas[2]-'0')*10+(temp_datas[3]-'0')*1), ((temp_datas[4]-'0')*10+(temp_datas[5]-'0')*1), ((temp_datas[6]-'0')*10+(temp_datas[7]-'0')*1), ((temp_datas[8]-'0')*10+(temp_datas[9]-'0')*1), ((temp_datas[10]-'0')*10+(temp_datas[11]-'0')*1), ((temp_datas[12]-'0')*10+(temp_datas[13]-'0')*1) ); DS3231_Set( ((temp_datas[2]-'0')*10+(temp_datas[3]-'0')*1), ((temp_datas[4]-'0')*10+(temp_datas[5]-'0')*1), ((temp_datas[6]-'0')*10+(temp_datas[7]-'0')*1), ((temp_datas[8]-'0')*10+(temp_datas[9]-'0')*1), ((temp_datas[10]-'0')*10+(temp_datas[11]-'0')*1), ((temp_datas[12]-'0')*10+(temp_datas[13]-'0')*1) ); EEPROM_WriteBytes(170,(u8*)temp_datas,2); if((RTC->CR)&0x100)//已经开启了远传闹钟 { RTC_AlarmAConfig(get_pubidv()); } if((RTC->CR)&0x200)//已经开启间隔闹钟 { RtcWakeUpConfig(get_meaidv() - 1); } BC25_Senddata_mode(11,"parw-4,OK,*"); Init_Data_Equipment.par_change=1; EEPROM_WriteBytes(185, 0,1); } } /*写入******传感器地址修改*********/ if((recString=strstr(USART2_RX_BUF, "parw-5")) !=NULL) //parw-aAb,0A1 { recString=strstr(recString, ","); recString++; recStringNext=recString+2; Sdi_chanegadd(recString[0],recStringNext[0]); adda=Sdi_Readone(recStringNext[0]); if(adda==0) { BC25_Senddata_mode(11,"parw-5,OK,*"); //数值相同 }else BC25_Senddata_mode(13,"parw-5,fail,*"); } /*读取******设备ID、测量间隔、预约时间、测量模式、远传时间*********/ if((recString=strstr(USART2_RX_BUF, "parr-1")) !=NULL) { //&&(strstr(USART2_RX_BUF.Data_RX_BUF, "\r\n"))!=NULL) memset(temp_datas,0,100); Init_Data_Equipment=Read_Equipment_Par(); sprintf(temp_datas,"parr-1,%s,%d,%s,%s,%d,*", Init_Data_Equipment.Equipment_ID, hexToDec(Init_Data_Equipment.Measure_Interval), (Init_Data_Equipment.appointment_time), (Init_Data_Equipment.measure_mode), hexToDec(Init_Data_Equipment.Pub_Time) ); BC25_Senddata_mode(strlen(temp_datas),temp_datas); } /*读取******远传IP、远传端口、wifi名称、wifi密码、wifi端口*********/ if(strstr(USART2_RX_BUF, "parr-2")) { memset(temp_datas,0,100); GetRTC(hhmmss,yymmdd); sprintf(temp_datas,"%s,%s,%s,%s,%s,%s,*", "parr-2", Init_Data_Equipment.Bc25_Ip, Init_Data_Equipment.Bc25_Port, Init_Data_Equipment.ESP8266_AP_SSIDs, Init_Data_Equipment.ESP8266_AP_PWDs, Init_Data_Equipment.ESP8266_AP_Ports ); BC25_Senddata_mode(strlen(temp_datas),temp_datas); } /*读取******系统时间 日期*********/ if(strstr(USART2_RX_BUF, "parr-4")) { memset(temp_datas,0,100); GetRTC(hhmmss,yymmdd); EEPROM_ReadBytes(170, (u8*)year_head,2); sprintf(temp_datas,"parr-4,%s%s %s,*",year_head,yymmdd,hhmmss); BC25_Senddata_mode(strlen(temp_datas),temp_datas); } /*读取******传感器地址查询*********/ if((recString=strstr(USART2_RX_BUF, "parr-s?")) !=NULL) { memset(temp_datas,0,100); Init_Data_Equipment=Read_Equipment_Par(); sprintf(temp_datas,"parr-6,%d,*", hexToDec(Init_Data_Equipment.Equipment_ID)); BC25_Senddata_mode(strlen(temp_datas),temp_datas); } } } /***************************** END OF FILE *********************************/