/************************************************************************ * 功能: 读取温度,精度是0.01摄氏度 */ unsigned int ReadTemperatureXX_XC(void) { unsigned long TP_temp; Convert_T(); TP_temp = Read_Temperature(); TP_temp *= 100; TP_temp /= 16; return (unsigned int)TP_temp; }
/************************************************************************ * 功能: 读取温度,精度是0.01摄氏度 */ unsigned int ReadTemperatureChannel(unsigned char index) { unsigned long TP_temp; set_temp_channel(index); TP_temp = Read_Temperature(); Convert_T(); TP_temp *= 100; TP_temp /= 16; return (unsigned int)TP_temp; }
uint16_t Read_Temp_Filter() { uint16_t Temp_Data[Temp_N]; uint8_t sign; uint8_t i; uint16_t temp; uint32_t Sum = 0; for(i=0; i<Temp_N; i++){ Read_Temperature(&sign,&temp); Temp_Data[i] = sign*temp; } L_From_B(Temp_Data,Temp_N); //去掉最大最小值求平均 for(i=1; i<Temp_N-1; i++){ Sum += Temp_Data[i]; } temp = Sum/(Temp_N-2); return temp; }
/** * @brief Main program. * @param None * @retval None */ int main(void) { NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000); Redbull_Init(); char buff[128] = { 0 }; LCD_DisplayStringLine(LINE(10), (uint8_t*) " Analog .............................."); Analog_Config(); printRight(10, "ok"); LCD_DisplayStringLine(LINE(11), (uint8_t*) " DAC ................................."); DAC_Config(); printRight(11, "ok"); f_mount(0, &fatfs); LCD_DisplayStringLine(LINE(12), (uint8_t*) " TEMP ................................"); OneWireInit(); float c = Read_Temperature(); sprintf(buff, "%.1f", c); printRight(12, buff); printf("%s\n", buff); RGBLED_GPIO_Config(0xff); RGBLED_Update(0xff,0xff,0xff); Delay(200); RGBLED_Update(0xff,0,0); Delay(200); RGBLED_Update(0,0xff,0); Delay(200); RGBLED_Update(0,0,0xff); Delay(200); RGBLED_Update(0,0,0); //static char path[1024] = "0:"; //LCD_Clear(LCD_COLOR_BLUE); //LCD_DisplayStringLine(0, (uint8_t*) "Loading..."); Delay(1000); //int i = 10; LCD_Clear(LCD_COLOR_BLACK); LCD_SetDisplayWindow(0, 0, 239, 319); LCD_WriteReg(3, 0x1000); LCD_WriteRAM_Prepare(); TIM_Cmd(TIM7, ENABLE); DMARead(); //float h = 0, s = 1, v = 1; while (1) { while (DMA_GetFlagStatus(DMA1_FLAG_TE1) == SET) { printf("DMA error\n"); Delay(100); } //uint32_t ms = millis(); uint16_t rem = DMA_GetCurrDataCounter(DMA1_Channel1); uint16_t cnt = 0xffff - rem; if (cnt >= 80 && cnt < 512) { continue; } uint32_t buff[160] = { 0 }; uint16_t tillend = cnt > 160 ? 160 : cnt; uint16_t fromstart = 160 - tillend; uint16_t bcnt = cnt - 160; // before SRAM_ReadBuffer((uint16_t*) &buff[0], bcnt * 4, tillend * 2); // after if (fromstart) { SRAM_ReadBuffer((uint16_t*) &buff[tillend], 0, fromstart * 2); } uint8_t prevsv = 0; for (uint16_t i = 0; i < 320; i++) { uint16_t val = 0; if (i & 1) { val = buff[i >> 1] & 0x0fff; } else { val = (buff[i >> 1] >> 16) & 0x0fff; } #define MAXV (17 * 238) val = val > MAXV ? MAXV : val; uint8_t sv = val / 17; sv = sv > 238 ? 238 : sv; sv++; if (!prevsv) { prevsv = sv; } uint16_t pbuf[240]; uint8_t minv = sv > prevsv ? prevsv : sv; uint8_t maxv = sv < prevsv ? prevsv : sv; for (uint8_t y = 0; y < 240; y++) { if (y >= minv && y <= maxv) { pbuf[y] = LCD_COLOR_YELLOW; } else { pbuf[y] = LCD_COLOR_BLACK; } } prevsv = sv; DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(DMA2_Channel5); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) pbuf; DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) &LCD->LCD_RAM; // FSMC DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 240; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_Low; DMA_InitStructure.DMA_M2M = DMA_M2M_Enable; DMA_Init(DMA2_Channel5, &DMA_InitStructure); DMA_Cmd(DMA2_Channel5, ENABLE); RTC_t rtc; RTC_GetTime(&rtc); //RGBLED_Update((rtc.min & 1) ? 0 : (rtc.hour * 10), ((rtc.sec >> 2) & 1) ? 0 : (rtc.min * 4), rtc.sec * 4); while (!DMA_GetFlagStatus(DMA2_FLAG_TC5)) ; DMA_ClearFlag(DMA2_FLAG_TC5); while (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) == RESET) ; }
//=========================================== void EXTI1_IRQHandler(void) { if(EXTI_GetFlagStatus(EXTI_Line1) == SET) { u8 i = 0,j = 0; static u8 sec_count = 0; static u16 bat_count = 0; static u8 current_sec = 0; sec_count ++; if(networkStatus != NETWORK_LOST) { connTimeout ++; if(connTimeout == CONNECTION_TIMEOUT) { networkStatus = NETWORK_LOST; event = EVENT_NETWORK_LOST; sysStatus |= SYSTEM_ERR_NETWORK; displayStatus(sysStatus); sendResponse(CMD_REQUEST_RECONNECT,CMD_REQUEST_RECONNECT); connTimeout = 0; } } else //network lost { if(!fEthernetHardReseted) { u32 i = 0; GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_WriteBit(ETHERNET_RESET_PORT, ETHERNET_RESET_PIN,Bit_SET); for(i=0;i<10000;i++) __NOP; GPIO_WriteBit(ETHERNET_RESET_PORT, ETHERNET_RESET_PIN,Bit_RESET); fEthernetHardReseted = true; } } // Check if SDC error in running time if(sysStatus & SYSTEM_ERR_SDC) { // Try to reinit SDC initSDC(); // If SDC still not avaiable then reset system if(sysStatus & SYSTEM_ERR_SDC) { if(!fSdcErr) NVIC_SystemReset(); } else { fSdcErr = false; displayStatus(sysStatus); } } if(sec_count == 60) { sec_count = 0; bat_count ++; if(bat_count == 5) { u16 adc_value = 0; u32 battery_volt = 0; u32 power_volt = 0; adc_value = ADC_GetConversionValue(ADC1); battery_volt = ((adc_value*33*62/4096)/15); if(battery_volt < BATTERY_VOLT_EMPTY) { GPIO_WriteBit(CHARGE_PORT,CHARGE_PIN,Bit_RESET); } else if(battery_volt >= BATTERY_VOLT_FULL) { GPIO_WriteBit(CHARGE_PORT,CHARGE_PIN,Bit_SET); } adc_value = ADC_GetConversionValue(ADC2); power_volt = ((adc_value*33*62/4096)/15); if(power_volt < BATTERY_VOLT_FULL) { //sendWarning(WARNING_OUT_OF_POWER); // fWarning = true; // warning = WARNING_OUT_OF_POWER; } bat_count = 0; } rtS = DS1307_GetTime(); for(i = 0;i<page->header.itemCount;i++) { PLAYLIST_ITEM* playlist = (PLAYLIST_ITEM*)page->popup[i].Info.data; if((playlist[0].header.dataType == PLAYLIST_CLOCK)||(playlist[0].header.dataType == PLAYLIST_TEMP)) page->popup[i].Info.header.isUpdate = false; } sysTemp = Read_Temperature(); if(sysTemp > wnConfig.maxTemp) { //sendWarning(WARNING_TOO_HOT); //fWarning = true; //warning = WARNING_TOO_HOT; } } for(i = 0;i<page->header.itemCount;i++) { if(page->popup[i].Info.header.dataType == POPUP_PLAYLIST) { PLAYLIST_ITEM* playlist = (PLAYLIST_ITEM*)page->popup[i].Info.data; if((page->popup[i].Info.header.isUpdate)&&(page->popup[i].Info.header.countDown)) { page->popup[i].Info.header.countDown --; if(!page->popup[i].Info.header.countDown) page->popup[i].Info.header.isUpdate = false; } for(j = 0;j<page->popup[i].Info.header.itemCount;j++) { if((playlist[j].TTL_count < 0xFFFF)&&(playlist[j].TTL_count>0)) playlist[j].TTL_count --; } } } EXTI_ClearFlag(EXTI_Line1); } }