/*************************************************************************** Declaration : void init_mcu (void) Function : Initializes ATmega88 MCU ***************************************************************************/ void init_mcu (void) { #ifdef DEBUG debug(); #endif /* System Clocks Configuration */ RCC_Configuration(); /* Configure the GPIO ports */ GPIO_Configuration(); /* Configure EXTI Line9 to generate an interrupt on falling edge */ EXTI_Configuration(); /* SPI the GPIO ports */ SPI_Configuration(); /* USART Configuration as SPI */ USART1_Configuration(); /* TIM2 Configuration */ TIM2_Configuration(); /* TIM3 Configuration */ TIM3_Configuration(); /* TIM4 Configuration */ TIM4_Configuration(); /* Configure RTC clock source and prescaler */ RTC_Configuration(); /* NVIC configuration */ NVIC_Configuration(); }
void timer2_init(void) { TIM2_NVIC_Configuration(); TIM2_Configuration(); // timer2_disable(); }
//================================================================================================ // System Pheriperal Initialize //================================================================================================ void SysConfiguration_Test(void) { RCC_ClocksTypeDef clocks; RCC_Configuration(); GPIO_Configuration(); USART_Configuration(); NVIC_Configuration(); TIM2_Configuration(); // ExtI_Configuration(); // TIM3_Configuration(); RCC_GetClocksFreq(&clocks); dp("ADC Clk: %d\r\n", clocks.ADCCLK_Frequency); dp("HCLK Clk: %d\r\n", clocks.HCLK_Frequency); dp("PCLK1 Clk: %d\r\n", clocks.PCLK1_Frequency); dp("PCLK2 Clk: %d\r\n", clocks.PCLK2_Frequency); dp("SYSCLK Clk: %d\r\n", clocks.SYSCLK_Frequency); if(SysTick_Config(SystemCoreClock/1000) != 0){ // Sys Tick을 1ms로 설정 dp("Sys Tick Configuration Fail\r\n"); } }
/* * 函数名:main * 描述 :主函数 * 输入 :无 * 输出 :无 */ int main(void) { /* 配置系统时钟为 72M */ SystemInit(); /* led 端口配置 */ LED_GPIO_Config(); /* TIM2 定时配置 */ TIM2_NVIC_Configuration(); TIM2_Configuration(); /* TIM2 开始计时 */ START_TIME; while(1) { if ( time == 1000 ) /* 1s 时间到 */ { time = 0; /* LED1 取反 */ GPIO_WriteBit(GPIOE, GPIO_Pin_5, (BitAction)((1-GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_5)))); } } }
/** * @brief Main program * @param None * @retval None */ int main(void) { GPIO_Configuration(); DAC_Configuration(); TIM2_Configuration(); while (1) { } }
/** * @brief Main program. * @param None * @retval None */ int main(void) { RCC_ClocksTypeDef RCC_Clocks; /* SysTick end of count event each 10ms */ RCC_GetClocksFreq(&RCC_Clocks); SysTick_Config(RCC_Clocks.HCLK_Frequency / 100); /********************输出 初始化 ******************/ PWM_init(); STM324xG_LCD_Init(); LCD_Clear(BLACK);/* Clear the LCD */ LCD_SetBackColor(BLACK);/* Set the LCD Back Color */ LCD_SetTextColor(WHITE);/* Set the LCD Text Color */ LCD_DisplayStringLine(LINE(0), " Hello jaja. I'm xiaohei01"); /********************输入 初始化 ******************/ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);/*!< 3 bits for pre-emption priority 1 bits for subpriority */ Encoder_init(); //encoder tim8 usart_init();//通信COM usart2 115200 IMU_init(); if (get_mode()==1) { IMU_BE10(); } KEY_init(); AD_Init(); GPS_int(); TIM2_Configuration(); printf("uart init OK 2 \r\n"); while(1) { if(LCD_flag) { LCD_flag=0; lcd_refresh(); } } }
/* * ³õʼ»¯Òº¾§£¬´®¿Ú£¬´¥ÃþÆÁ£¬flash¼°sd¿¨ * */ void ISO_Init(void) { uint8_t k; /* ÅäÖÃUSART1 */ USART1_Config(); /* ÅäÖÃUSART2 */ USART2_Config(); /* ÉèÖà TIM */ TIM2_Configuration(); USART2_DMATxd_Init(); Set_PrintfPort(1); //ÉèÖÃDebugPf´Ó´®¿Ú1Êä³ö }
/** * @brief * @param 无 * @retval 无 */ int main(void) { /* USART1 115200 8-N-1, */ USART1_Config(); NVIC_Configuration(); /* 10us*/ SysTick_Init(); MOTOR_GPIO_Config(); TIM2_Configuration(); TIM2_NVIC_Configuration(); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); //printf(READY); printf("POLARGRAPH ON!"); setAcceleration(&motorA,currentAcceleration); setAcceleration(&motorB,currentAcceleration); mmPerStep = mmPerRev / motorStepsPerRev; stepsPerMM = motorStepsPerRev / mmPerRev; motorA._name = 0; motorB._name = 1; setAcceleration(&motorA,currentAcceleration); setAcceleration(&motorB,currentAcceleration); pixel_drawSquarePixel(990,486,18,23); for(;;) { if(getNewComms) { exec_executeBasicCommand(); getNewComms = 0; } } }
int main(void) { // setup SYSCLK SYSCLK_Configuration(); // setup RCC RCC_Configuration(); // Remap JTRST so PB4 (red LED) can be used as GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST , ENABLE); // setup system tick timer // SysTick_Configuration(); // set SysTick priority NVIC_SetPriority (SysTick_IRQn, NVIC_IPR0_PRI_1); //NVIC->ISER[0] |= (1 << SysTick_IRQn); // enable SysTick int in NVIC // Configure PB5 (green LED) and PB4 (red LED) GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); // Configure Timer3 & 4 to be used as push pull alternative function on pins 0 1 8 9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); // Setup timers TIM1_Configuration(); TIM2_Configuration(); TIM3_Configuration(); TIM4_Configuration(); // FreeRTOS initialization FreeRTOS_Configuration(); // start scheduler vTaskStartScheduler(); return 0; }
/** * @brief Main program * @param None. * @retval : None. */ int main(void) { /* System clocks configuration */ RCC_Configuration(); /* NVIC configuration*/ NVIC_Configuration(); /* GPIO configuration ----------------------------------------------------*/ GPIO_Configuration(); #ifdef master /* Master configuration --------------------------------------------------*/ Master_Configuration(); #endif #if defined(slave1) || defined(slave2) /* Slave configuration ---------------------------------------------------*/ Slave_Configuration(); /* ADC1 configuration ----------------------------------------------------*/ ADC1_Configuration(); /* ADC DMA Channel1 configuration */ DMA_Channel1_Configuration(); #endif #ifdef DMA_Master_Receive DMA_Channel7_Configuration(); #endif #ifdef DMA_Slave_Transmit DMA_Channel4_Configuration(); #endif #ifdef master /* TIM2 configuration ----------------------------------------------------*/ TIM2_Configuration(); #endif while (1) { #if defined(slave1) || defined(slave2) I2C_Slave_BufferWrite(Slave_Buffer_Tx, 255); #endif } }
//================================================================================================ // System Pheriperal Initialize //================================================================================================ void SysConfiguration(void) { RCC_Configuration(); GPIO_Configuration(); USART_Configuration(); NVIC_Configuration(); // ExtI_Configuration(); TIM2_Configuration(); TIM3_Configuration(); RCC_ClocksTypeDef clocks; // trace_printf("trace_printf Message\r\n"); RCC_GetClocksFreq(&clocks); if(SysTick_Config(SystemCoreClock/1000) != 0){ // Sys Tick을 1ms로 설정 dp("Sys Tick Configuration Fail\r\n"); } }
int main(void) { //设置NVIC中断分组2位抢占优先级,2位响应优先级 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2) ; Ticker_Configuration(); LED_Configuration(); USART2_Configuration(); delay_init(); //Do_Loop_LED_Test(); //Do_Loop_Motor_Test(); //DISABLE_FOLLOWING_CODE(1); //主控通信控制器初始化 Maincontrol_Configuration(); Encoder_Configuration(); Encoder_Start(); //速度采样控制器初始化 TIM2_Configuration(5); TIM2_Start(); //电流检测 ADC_Configuration(); //电机初始化 Motor_Init(); while (1) { delay_ms(200); LED_RED_TOGGLE(); LED_GREEN_TOGGLE(); } }
int main(void) { uint16_t i; NVIC_Configuration(); delay_init(); //延时函数初始化 uart_init(9600); //串口初始化为9600 Dac1_Init(); //DAC通道1初始化 TIM2_NVIC_Configuration(); TIM2_Configuration(25*360/STEP); //生成数据 for(i=0; i<360; i++) { sine_table1[i] = (uint16_t)((sin((i*PI)/180) + 1)*4095/2); sine_table2[i] = (uint16_t)((sin((i*PI)/180 + PHA_DIFF) + 1)*4095/2); } while(1) { } }
void Hardware_Init(void) { RCC_Configuration(); SysTick_Configuration(); NVIC_Configuration(); GPIO_Configuration(); //TIM1_Configuration(); TIM2_Configuration(); TIM3_Configuration(); TIM4_Configuration(); UART2_Init(); Unselect_SPI_Device(); //不选中任何一个SPI设备 SPI1_FLASH_Init(); }
/** * @brief 主函数 * @param 无 * @retval 无 */ int main(void) { /* led 端口配置 */ LED_GPIO_Config(); /* TIM2 定时配置 */ TIM2_Configuration(); /* 实战定时器的中断优先级 */ TIM2_NVIC_Configuration(); /* TIM2 重新开时钟,开始计时 */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); while(1) { if ( time == 1000 ) /* 1000 * 1 ms = 1s 时间到 */ { time = 0; /* LED1 取反 */ LED1_TOGGLE; } } }
/** * @brief Description 外设初始化 * @param None * @retval None */ void PeripheralInit(void) { RCC_Config(); SysTick_Init(); TIM2_Configuration(); LED_GPIO_Config(); KEY_GPIO_Config(); EXTI15_10_Config(); General_GPIO_Config(); LCD_GLASS_Init(); USART1_Config(115200); // Delay_ms(10); //开启滴答定时 LCD_GLASS_Clear(); AVCC1_POWER(OFF); //关ADC1电源 BATTEST_POWER(OFF); //关电池电压检测电源 MODEL_PWRCTRL(ON); //开对外接口电源 ADC1_Init(); /* 8M串行flash W25Q64初始化 */ SPI_FLASH_Init(); I2C_GPIO_Config(); //rtc 初始化 rtc_init(); }
/** * @brief Main program * @param None * @retval None */ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f10x_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f10x.c file */ /* System Clocks Configuration */ RCC_Configuration(); /* System Tick Configuration at 1us */ SysTick_Config(SystemCoreClock / 1000000); #if (defined USE_EQDAS01) || (defined USE_EQDAS02) /* TIM2 Configuration (Client & ATFC Server) */ TIM2_Configuration(); #elif defined USE_EQDAS_SERVER /* TIM4 Configuration */ TIM4_Configuration(); #endif /* TIM5 Configuration (GLCD & Ethernet) */ TIM5_Configuration(); /* TIM6 Configuration (RTC load) */ //TIM6_Configuration(); /* CLCD Configuration */ CLCD_Configuration(); /* GLCD Configuration */ GLCD_Configuration(); /* UART1 Configuration */ UART_Configuration(); /* RTC configuration by setting the time by Serial USART1 */ RTC_SetTimeBySerial(); /* Let user set the IP through terminal forcefully */ //ForceIPSetBySerial(); /* WIZ820io SPI1 configuration */ WIZ820io_SPI1_Configuration(); /* W5200 Configuration */ Set_network(); /* Print WIZ820io configuration */ printSysCfg(); /* EXTI Configuration */ EXTI_Configuration(); /* FatFS configuration */ f_mount(0, &fs); // mSD //f_mount(1, &fs); // NAND /* Display Total size of SD card in MB scale */ SD_TotalSize(); /* Scan all files in mSD card */ //scan_files(path); /* MAL configuration */ //Set_System(); /* UMS configuration */ //Set_USBClock(); //USB_Interrupts_Config(); //USB_Init(); /* loop upon completion of USB Enumeration */ //while (bDeviceState != CONFIGURED); /* ATFC Algorithm GPIO */ ATFC_GPIO_Configuration(); /* ATFC Parameter Initialization */ ATFCAlgorithmParameterSetup(); /* GPS-UART3 Configuration - This have to be here otherwise it wouldn't work */ GPS_Configuration(); // For TCP client's connection request delay presentTime = my_time; /* Create directory and sub directory in accordance with current date */ filePath = CreateDirectoryAccordingly(GetYearAndMergeToInt(), GetMonthAndMergeToInt(), GetDayAndMergeToInt(), RTC_GetCounter() / 3600); /* Create file in append mode in accordance with current minute */ CreateFileAppendModeAccordingly(filePath, (RTC_GetCounter() % 3600) / 60); /* Clear GLCD to better represent waveform */ GLCD_Clear(); //BKP_WriteBackupRegister(BKP_DR8, 0); // When everything is set, print message printf("\r\n\n - System is ready - "); while (1) { #if (defined USE_EQDAS01) || (defined USE_EQDAS02) /* Index synchronization routine -----------------------------------------------*/ if(SyncFlag) { // prevent unpleasant impuse from happening // Index synchronization dedicated to GLCD & Ethernet if(arrIdx != index) { // Index synchronization arrIdx = index; } } /* End of index synchronization routine -----------------------------------------*/ if(TimerCount > 999) { // 0 ~ 999 (1000) = 1 sec TimerCount = 0; //my_time++; // uncomment when tcp connection is needed /* Setup TCP Client or Server -------------------------------------------------*/ /* Please open config.h file to choose a proper board you wish to use ---------*/ /* Start TCP Client process */ ProcessTcpClient(SOCK_ZERO); // TCP Client /* Parameter setting Server side with port 5050 in default */ ATFCTcpServer(SOCK_TWO, EQDAS_Conf_PORT); // SOCK_TWO because of flag conformity /*------------------------------------------------------------------------------*/ /* Process Parameter Text Stream -----------------------------------------------*/ if(PCFlag) { // EQDAS Client System and ATFC Algorithm Setting PCFlag = false; ProcessParameterStream(); } /* End of Parameter process ----------------------------------------------------*/ } /* 10ms interval between points */ if(TIM5Count >= 9) { TIM5Count = 0; // Make a copy from raw collected data to temporary array CopyToTmpArray(arrIdx); // Determine KMA scale KMAGrade = DetermineKMA(arrIdx); // Check sign bit and apply to int container CheckSignAndToInt(arrIdx); // this function also cuts surplus 1G /* Switch menu & waveform display through graphic lcd */ GLCD_AxisViewWithWaveform(mode, arrIdx); //int mATFCBit; //mATFCBit_lcd = mAxisBuf.ATFCBit_lcd[arrIdx]; int AxisDataToATFCAlgorithm, mATFCEventDetection; AxisDataToATFCAlgorithm = mAxisBuf.tmp_data_y_lcd[arrIdx]; // Axis Z ATFCAlgorithm(AxisDataToATFCAlgorithm); mATFCEventDetection = EventDetection; /* Display KMA Intensity on Graphic LCD */ GLCD_DisplayKMAIntensity(KMAGrade, mATFCEventDetection); /* Prevent access to volatile variable warning */ /* This have to be here in order to correct data to be used in ATFC */ /* ATFC Server side for each EQ DAS Client */ if(EQATFCFlag) { int mYear, mMonth, mDay, mHour, mMin, mSec, mTMSec; mYear = year; mMonth = month; mDay = day; mHour = hour; mMin = minute; mSec = second; mTMSec = arrIdx; int mX, mY, mZ, mATFCBit; mX = mAxisBuf.tmp_data_x_lcd[arrIdx] >> 2; mY = mAxisBuf.tmp_data_y_lcd[arrIdx] >> 2; mZ = mAxisBuf.tmp_data_z_lcd[arrIdx] >> 2; mATFCBit = mATFCEventDetection; char ATFC_Buf[40]; sprintf(ATFC_Buf, "%04d%02d%02d_%02d%02d%02d%02d_%+05d_%+05d_%+05d_%d\r\n", mYear, mMonth, mDay, mHour, mMin, mSec, mTMSec, mX, mY, mZ, mATFCBit); // Only when socket is established, allow send data if(getSn_SR(SOCK_TWO) == SOCK_ESTABLISHED) { // SOCK_TWO : PC /* send selected data */ send(SOCK_TWO, (uint8_t*)ATFC_Buf, strlen(ATFC_Buf), (bool)false); } } // Copy to data buffer to be written through FATFS //CopyToFatFsDataBuffer(arrIdx); } /* RTC 1Hz interrupt */ if(RTCTimeDisplay) { // 1Hz calibrated by RTC RTCTimeDisplay = false; int TimeVar; TimeVar = RTC_GetCounter(); /* Compute hour */ THH = TimeVar / 3600; /* Compute minute */ TMM = (TimeVar % 3600) / 60; /* Compute second */ TSS = (TimeVar % 3600) % 60; /* Refresh date on every 1s */ year = GetYearAndMergeToInt(); month = GetMonthAndMergeToInt(); day = GetDayAndMergeToInt(); hour = THH; minute = TMM; second = TSS; tmsecond = 0; if(ThirtyMinuteMark == 1799) { ThirtyMinuteMark = 0; ThirtyMinuteFlag = true; } else { ThirtyMinuteMark++; } /* Adjust realtime clock deviation */ if(hour > 23) { int i, currentDay, mDay, mHour, mMin, mSec; mDay = hour / 24; for(i=0; i<mDay; i++) { IncreaseSingleDay(); if(i == mDay - 1) { currentDay = (GetMonthAndMergeToInt() * 100) + GetDayAndMergeToInt(); BKP_WriteBackupRegister(BKP_DR3, currentDay); // Save Month and Date } } mHour = THH % 24; mMin = TMM; mSec = TSS; /* Change the current time */ RTC_SetCounter(mHour*3600 + mMin*60 + mSec); } } #endif if(ParseGPS) { ParseGPS = false; char *srcstr = "$GPRMC"; char *token = ","; char *processedString; char StringYear[3], StringMonth[3], StringDay[3], StringHour[3], StringMinute[3], StringSecond[3]; int GPSYear, GPSMonth, GPSDay, GPSHour, GPSMinute, GPSSecond; if(strncmp((char const*)GPS_Buffer, srcstr, 6) == 0) { //printf("GPS_Buffer = %s\r\n\r\n", (char*)GPS_Buffer); processedString = strtok((char*)GPS_Buffer, token); processedString = strtok(NULL, token); strncpy(StringHour, processedString, 2); StringHour[2] = 0; strncpy(StringMinute, processedString+2, 2); StringMinute[2] = 0; strncpy(StringSecond, processedString+4, 2); StringSecond[2] = 0; GPSHour = atoi(StringHour) + 9; // Current Hour = StringHour + 9 GPSMinute = atoi(StringMinute); GPSSecond = atoi(StringSecond); int i; for(i=4; i!=0 ; i--) processedString = strtok(NULL, token); strncpy(StringYear, processedString+4, 2); StringYear[2] = 0; strncpy(StringMonth, processedString+2, 2); StringMonth[2] = 0; strncpy(StringDay, processedString, 2); StringDay[2] = 0; GPSYear = atoi(StringYear) + 2000; // Currnet Year = StringYear + 2000 GPSMonth = atoi(StringMonth); GPSDay = atoi(StringDay); /* The Year is chosen as criteria to the time */ if( (GPSYear == GetYearAndMergeToInt()) && ThirtyMinuteFlag ) { // only when year matches between RTC and GPS ThirtyMinuteFlag = false; if(GPSMonth != GetMonthAndMergeToInt() || GPSDay != GetDayAndMergeToInt() || GPSHour != THH || GPSMinute != TMM || GPSSecond != TSS) { /* Change the month and day */ TranslateIntoMonth(GPSMonth); TranslateIntoDay(GPSDay); /* Save year data to unresettable backup register addr. no. 3 */ int MMDD; MMDD = (GPSMonth * 100) + GPSDay; BKP_WriteBackupRegister(BKP_DR3, MMDD); // Save Month and Date /* Change the current time */ RTC_SetCounter(GPSHour*3600 + GPSMinute*60 + GPSSecond); printf("GPSHour = %d\r\n", GPSHour); printf("GPSMinute = %d\r\n", GPSMinute); printf("GPSSecond = %d\r\n\r\n", GPSSecond); printf("GPSYear = %d\r\n", GPSYear); printf("GPSMonth = %d\r\n", GPSMonth); printf("GPSDay = %d\r\n\r\n", GPSDay); printf("GPS-to-System synchronization complete!\r\n\r\n"); } } } } if(ParseUSART1) { ParseUSART1 = false; // run some test on SDIO //SDIO_TEST(); #if (defined USE_EQDAS01) || (defined USE_EQDAS02) /* Print WIZ820io configuration */ printSysCfg(); printf("\r\n"); printf("BKP_DR1 = %d\r\n", BKP_ReadBackupRegister(BKP_DR1)); printf("BKP_DR2 = %d\r\n", BKP_ReadBackupRegister(BKP_DR2)); printf("BKP_DR3 = %d\r\n", BKP_ReadBackupRegister(BKP_DR3)); printf("BKP_DR4 = %d\r\n", BKP_ReadBackupRegister(BKP_DR4)); printf("BKP_DR5 = %d\r\n", BKP_ReadBackupRegister(BKP_DR5)); printf("BKP_DR6 = %d\r\n", BKP_ReadBackupRegister(BKP_DR6)); printf("BKP_DR7 = %d\r\n", BKP_ReadBackupRegister(BKP_DR7)); printf("BKP_DR8 = %d\r\n", BKP_ReadBackupRegister(BKP_DR8)); printf("BKP_DR9 = %d\r\n", BKP_ReadBackupRegister(BKP_DR9)); printf("BKP_DR10 = %d\r\n", BKP_ReadBackupRegister(BKP_DR10)); printf("BKP_DR11 = %d\r\n", BKP_ReadBackupRegister(BKP_DR11)); printf("BKP_DR12 = %d\r\n", BKP_ReadBackupRegister(BKP_DR12)); printf("BKP_DR13 = %d\r\n", BKP_ReadBackupRegister(BKP_DR13)); printf("BKP_DR14 = %d\r\n", BKP_ReadBackupRegister(BKP_DR14)); printf("BKP_DR15 = %d\r\n", BKP_ReadBackupRegister(BKP_DR15)); printf("BKP_DR16 = %d\r\n\r\n", BKP_ReadBackupRegister(BKP_DR16)); printf("RX_BUF = %s\r\n", RX_BUF); /* printf("\r\nstrlen(HEADER) : %d %s", strlen(HEADER), HEADER); printf("\r\nf_mkdir1 : "); char *dirPath = "0:/20130517"; res = f_mkdir(dirPath); FPrintFatResult(res); printf("\r\nf_mkdir2 : "); dirPath = "0:/20130517/22H-23H"; res = f_mkdir(dirPath); FPrintFatResult(res); char *filePath = "0:/20130517/2-23H/test.txt"; // Create log file on the drive 0 res = open_append(&fsrc, filePath); FPrintFatResult(res); if(res == FR_OK) { printf("test.txt successfully created\r\n"); // Write buffer to file int bytesWritten; bytesWritten = f_printf(&fsrc, HEADER); printf("\r\n%d of bytesWritten", bytesWritten); // Close file f_close(&fsrc); } else if ( res == FR_EXIST ) { printf("\r\ntest.txt already exist"); } */ #elif (defined) USE_EQDAS_SERVER char buffer[40]; sprintf(buffer, "%s_%s_%s_%s_%s\r\n", DAQBoardOne[arrIdx].Date, DAQBoardOne[arrIdx].Time, DAQBoardOne[arrIdx].AxisX, DAQBoardOne[arrIdx].AxisY, DAQBoardOne[arrIdx].AxisZ); printf("\r\nRX_BUF : %s, strlen(RX_BUF) : %d", (char*)RX_BUF, strlen((char*)RX_BUF)); printf("\r\nstrlen(buffer) = %d\n%s", strlen(buffer), buffer); #endif } // following routine is only necessary when the board works as server #if defined USE_EQDAS_SERVER /* Server also needs to have get CLCD going while running */ /* RTC 1Hz interrupt */ if(RTCTimeDisplay) { // 1Hz calibrated by RTC RTCTimeDisplay = false; /* Adjust realtime clock deviation */ if(hour > 23) { int i, currentDay, mDay, mHour, mMin, mSec; mDay = hour / 24; for(i=0; i<mDay; i++) { IncreaseSingleDay(); if(i == mDay - 1) { currentDay = (GetMonthAndMergeToInt() * 100) + GetDayAndMergeToInt(); BKP_WriteBackupRegister(BKP_DR3, currentDay); // Save Month and Date } } mHour = THH % 24; mMin = TMM; mSec = TSS; /* Change the current time */ RTC_SetCounter(mHour*3600 + mMin*60 + mSec); } /* Display current time */ Time_Display(RTC_GetCounter()); } /* EQ-DAQ-01 Parsing routine ------------------------------------------------- */ /* Set E1Flag indicate that we have valid connection from EQ-DAQ-01(port 5050) */ if(E1Flag) { E1Flag = false; // clear flag since this routine excutes ceaselessly over time ProcessTextStream(EQ_ONE, (char*)RX_BUF, E1Order); /* PC Client Parsing routine ------------------------------------------------- */ /* Set PCFlag indicate that we have valid connection from PC Client(port 7070) */ if(PCFlag && !E2Flag) { // only when PC is connected and EQ-DAQ-02 is not connected // Send directly to PC SingleBoardDataToSendToPC(EQ_ONE, E1Order-10); } if(E1Order < 99) E1Order++; else E1Order = 0; } /* EQ-DAQ-02 Parsing routine ------------------------------------------------- */ /* Set E2Flag indicate that we have valid connection from EQ-DAQ-02(port 6060) */ if(E2Flag) { E2Flag = false; ProcessTextStream(EQ_TWO, (char*)RX_BUF, E2Order); /* PC Client Parsing routine ------------------------------------------------- */ /* Set PCFlag indicate that we have valid connection from PC Client(port 7070) */ if(PCFlag && !E1Flag) { // only when PC is connected and EQ-DAQ-01 is not connected // Send directly to PC //SendToPC(EQ_TWO, E2Order); } if(E2Order < 99) E2Order++; else E2Order = 0; /* PC Client Parsing routine ------------------------------------------------- */ /* Set PCFlag indicate that we have valid connection from PC Client(port 7070) */ if(PCFlag) { // Send directly to PC MultipleBoardDataToSendToPC(EQ_BOTH, E1Order-10, E2Order-10); } } /* Process server socket with each port */ ProcessTcpServer(SOCK_ZERO, 5050); // designated as for EQM-DAQ-01 with port 5050 ProcessTcpServer(SOCK_ONE, 6060); // designated as for EQM-DAQ-02 with port 6060 ProcessTcpServer(SOCK_TWO, 7070); // designated as for PC-CLIENT with port 7070 ProcessTcpServer(SOCK_THREE, 8080); // designated as for PC_DUMP with port 8080 /* ProcessTcpServer(SOCK_FOUR, 9090); // designated as for TOBEUSED with port 9090 ProcessTcpServer(SOCK_FIVE, 10010); // designated as for TOBEUSED with port 10010 ProcessTcpServer(SOCK_SIX, 10020); // designated as for TOBEUSED with port 10020 ProcessTcpServer(SOCK_SEVEN, 10030); // designated as for TOBEUSED with port 10030 */ #endif }
/** * @brief Main program * @param None * @retval None */ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f10x_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f10x.c file */ uint32_t delay; uint8_t sendFlag_Ai = 0; SOE_Struct soe; uint32_t start = 0; /* System clocks configuration ---------------------------------------------*/ SystemInit(); RCC_ClocksTypeDef clock; RCC_GetClocksFreq(&clock); RCC_Configuration(); GPIO_Configuration(); ADC_Configuration(); COM3_Configuration(9600); DMA_Configuration(); TIM_UART_Config(); //uart3-rx FREQ_MEA_Init(); //freq采样 TIM2_Configuration(); //adc采样 SysTick_Configuration(); //DI采样 RTC_Init(); NVIC_Configuration(); DataBase_Init(); //memset(DiStatus_DI, 0, sizeof(DiStatus_Type)*DI_NUM); //初始化DI内存列表 GetComAddr(); SetCurrent.ChannelCoef[0] =1050;//1#:1029;2#:1028 SetCurrent.ChannelCoef[1] =1029;//1#:1029;2#:1027 SetCurrent.ChannelCoef[2] =1050;//1#:1030;2#:1028 SetCurrent.ChannelCoef[3] =1028;//1#:1033;2#:1028 SetCurrent.ChannelCoef[4] =1029;//1#:1033;2#:1029 SetCurrent.ChannelCoef[5] =1028;//1#:1033;2#:1028 SetCurrent.ChannelCoef[6] =1025;//1#:1029;2#:1028 SetCurrent.ChannelCoef[7] =1026;//1#:1029;2#:1027 SetCurrent.ChannelCoef[8] =1027;//1#:1030;2#:1028 #ifdef WATCHDOG IWDG_Configuration(); #endif DMA_Cmd(DMA1_Channel3, ENABLE); // Emable TIM3, 使能串口接收通道 TIM_Cmd(TIM3, ENABLE); //UART3接收,使能 while (1) { Di_PostWork(); if(63==PeriodCycle_Index) { TOTAL_MEASURE(&meas); SequenceFilter_2(&meas); SequenceFilter_0(&meas); ValueScaling(MeaTab,&meas); //tyh:20150629 添加遥测数据上送 if(Begin_AI_Send) { if(Is_new_soe()) { get_soe(&soe, 1); SoeResponse(soe); } else { if((sendFlag_Ai%3)==0) AiResponse(0); else { if((sendFlag_Ai%5)==0) //tyh:20150803 增加遥信数据上送 DiResponse(0); } sendFlag_Ai++; } } } if(Flag_Uart_Recv) BusCalling_Process(Flag_Uart_Recv); //处理数据 #ifdef WATCHDOG WDGFeeding(); #endif } }
int main(void) { while (1); /* Configuration */ SystemInit(); LED_Configuration(); BUZZ_Configuration(); //ADC_Configuration(); CAN_Configuration(); /****************************µ×Å̳õʼ»¯******************************/ Elmo_Init(elmo, 3); // PositionPID_Init(); PositionIPD_Init(); MoveLock(); Delay_ms(100); BLUETOOTH_Configuration(); Delay_ms(100); Encoder_Clear(); Delay_ms(1000); MPU6500_init(); TIM1_Configuration(); TIM2_Configuration(); TIM3_Configuration(); TIM4_Configuration(); if (SysTick_Config(SystemCoreClock / 1000)) /* Setup SysTick Timer for 1 msec interrupts */ { while(1){LED_ON(LED2);}/* Capture error */ } // IpdAxisX.setpoint = 200; // IpdAngle.setpoint = 90; // PidAxisX.setpoint = 200; // CMDVelocity.X = 10; // CMDVelocity.Y = 0; // CMDVelocity.A = 0;//Degree/Second // Elmo_Write(&elmo[0],0x01,0x01,50); while (1) { if(MPU_FLAG == 1) { MPU_FLAG = 0; } if(MAPAN_FLAG == 1) { MAPAN_FLAG = 0; // LED_TOGGLE(LED1); MapanTask();//ÂëÅÌ } if(PID_PFLAG ==1) { PID_PFLAG = 0; // PositionPIDCal(); PositionIPDCal(); VelocityTransform(); // LED_TOGGLE(LED2); } if (LED_FLAG == 1) { LED_FLAG = 0; // SquareTracking(); // CircleTracking(); // GoBack(); // LED_TOGGLE(LED3); // SignalTracking(); // angle_print(); // PositionVelocity_print(); } } }
/** * @brief Main program * @param None * @retval None */ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f10x_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f10x.c file */ /* System Clocks Configuration */ RCC_Configuration(); /* System Tick Configuration at 1us */ SysTick_Config(SystemCoreClock / 1000000); #if (defined USE_EQDAS01) || (defined USE_EQDAS02) /* TIM2 Configuration */ TIM2_Configuration(); /* TIM3 Configuration */ TIM3_Configuration(); /* TIM6 Configuration (RTC load) */ TIM6_Configuration(); #elif defined USE_EQDAS_SERVER /* TIM4 Configuration */ TIM4_Configuration(); #endif /* UART1 Configuration */ UART_Configuration(); /* WIZ820io SPI1 configuration */ WIZ820io_SPI1_Configuration(); /* W5200 Configuration */ Set_network(); /* EXTI Configuration */ EXTI_Configuration(); /* CLCD Configuration */ CLCD_Configuration(); /* GLCD Configuration */ GLCD_Configuration(); #if (defined USE_EQDAS01) || (defined USE_EQDAS02) /* RTC configuration by setting the time by Serial USART1 */ RTC_SetTimeBySerial(); #endif /* FatFS configuration */ f_mount(0, &fs); // mSD //f_mount(1, &fs); // NAND /* Display Total size of SD card in MB scale */ SD_TotalSize(); /* Scan all files in mSD card */ scan_files(path); /* MAL configuration */ //Set_System(); /* UMS configuration */ //Set_USBClock(); //USB_Interrupts_Config(); //USB_Init(); /* loop upon completion of USB Enumeration */ //while (bDeviceState != CONFIGURED); // For TCP client's connection request delay presentTime = my_time; /* Clear CLCD before branch into main */ CLCD_Clear(); /* Alarm in 3 second */ //RTC_SetAlarm(RTC_GetCounter() + 3); /* Wait until last write operation on RTC registers has finished */ //RTC_WaitForLastTask(); // When everything is set, print message printf("\r\n\n - System is ready - "); while (1) { #if (defined USE_EQDAS01) || (defined USE_EQDAS02) if(TimerCount >= 999) { // 0 ~ 999 (1000) = 1 sec TimerCount = 0; /* int x, y, z; x = mAxisBuf.tmp_data_x_lcd[index]; y = mAxisBuf.tmp_data_y_lcd[index]; z = mAxisBuf.tmp_data_z_lcd[index]; char Serial_Buf[37]; int hour, minute, second, tmsecond; hour = THH; minute = TMM; second = TSS; tmsecond = 0; sprintf(Serial_Buf, "%04d%02d%02d_%02d%02d%02d%02d_%+05d_%+05d_%+05d\r\n", year, month, day, hour, minute, second, tmsecond, x, y, z); printf(Serial_Buf); */ //my_time++; // uncomment when tcp connection is needed } /* Clock generated by TIM3 */ if(ClientTimerCounter >= 99) { // 0 ~ 999 (1000) = 1 sec ClientTimerCounter = 0; arrIdx = index; year = GetYearAndMergeToInt(); month = GetMonthAndMergeToInt(); day = GetDayAndMergeToInt(); hour = THH; minute = TMM; second = TSS; tmsecond = 0; /* EQDAQ01, 02 Client Routine ---------------------------------------------*/ /* E1Flag or E2Flag set when client board successfully connect to server --*/ /* Refer to wiz820.c line no. 300 for which flag to be set */ if(E1Flag) { int x, y, z; x = mAxisBuf.tmp_data_x_lcd[arrIdx]; y = mAxisBuf.tmp_data_y_lcd[arrIdx]; z = mAxisBuf.tmp_data_z_lcd[arrIdx]; char E1_Buf[20]; sprintf(E1_Buf, "%04d%02d%02d_%02d%02d%02d%02d_%+05d_%+05d_%+05d\r\n", year, month, day, hour, minute, second, tmsecond, x, y, z); // Only when socket is established, allow send data if(getSn_SR(SOCK_ZERO) == SOCK_ESTABLISHED) { /* send selected data */ CountSendByte = send(SOCK_ZERO, (uint8_t*)E1_Buf, strlen(E1_Buf), (bool)false); } } if(E2Flag) { int x, y, z; x = mAxisBuf.tmp_data_x_lcd[arrIdx]; y = mAxisBuf.tmp_data_y_lcd[arrIdx]; z = mAxisBuf.tmp_data_z_lcd[arrIdx]; char E2_Buf[20]; sprintf(E2_Buf, "%04d%02d%02d_%02d%02d%02d%02d_%+05d_%+05d_%+05d\r\n", year, month, day, hour, minute, second, tmsecond, x, y, z); // Only when socket is established, allow send data if(getSn_SR(SOCK_ZERO) == SOCK_ESTABLISHED) { /* send selected data */ send(SOCK_ZERO, (uint8_t*)E2_Buf, strlen(E2_Buf), (bool)false); } } } /* do RTC work on every 0.5 sec */ if(RTCTIM6Count >= 499) { RTCTIM6Count = 0; /* RTC 1Hz interrupt */ if(RTCTimeDisplay) { // 1Hz calibrated by RTC RTCTimeDisplay = false; /* Display current time */ Time_Display(RTC_GetCounter()); } /* RTC Alarm interrupt */ if(RTCAlarmFlag) { RTCAlarmFlag = false; printf("\r\nRTC Alarm Actviated!"); } } #endif if(ParseUSART1) { ParseUSART1 = false; // print system configuration //printSysCfg(); // run some test on SDIO //SDIO_TEST(); #if (defined USE_EQDAS01) || (defined USE_EQDAS02) #elif (defined) USE_EQDAS_SERVER char buffer[37]; sprintf(buffer, "%s_%s_%s_%s_%s\r\n", DAQBoardOne[arrIdx].Date, DAQBoardOne[arrIdx].Time, DAQBoardOne[arrIdx].AxisX, DAQBoardOne[arrIdx].AxisY, DAQBoardOne[arrIdx].AxisZ); printf("\r\nRX_BUF : %s, strlen(RX_BUF) : %d", (char*)RX_BUF, strlen((char*)RX_BUF)); printf("\r\nstrlen(buffer) = %d\n%s", strlen(buffer), buffer); /* char *original = "-3843,+4095,+2069"; char target[20]; strncpy(target, original, strlen(original)); char *one, *two, *three; char *AfterToken; AfterToken = strtok(target, ","); one = AfterToken; AfterToken = strtok(NULL, ","); two = AfterToken; AfterToken = strtok(NULL, ","); three = AfterToken; AfterToken = strtok(NULL, ","); if(AfterToken != NULL) printf("AfterToken is not empty"); printf("\r\none : %s, two : %s, three : %s", one, two, three);*/ #endif } #if (defined USE_EQDAS01) || (defined USE_EQDAS02) for(i=0; i<100; i++) { // Make a copy from raw collected data to temporary array CopyToTmpArray(i); // Copy to Temporary GAL array CopyToTmpGalArray(i); // Calculate GAL and copy to single temporary GAL value CalculateGalAndCopyToGal(i); // Determine KMA scale DetermineKMA(i); // Check sign bit and apply to int container CheckSignAndToInt(i); // this function also cuts surplus 1G // Copy to data buffer to be written through FATFS //CopyToFatFsDataBuffer(arrIdx); } /* Save log to file process */ if(GoAppendDataFlag) { // every 500 sample (equals 5 sec), go save file. GoAppendDataFlag = false; int bytesWritten = 0; /* Open or create a log file and ready to append */ //char *filePath = "/20130517/22H-23H/test.txt"; //res = open_append(&fsrc, filePath); //FPrintFatResult(res); if(FiveSecFlag) { // it means that DATA1_BUF is full and ready to flush out // be sure to empty out DATA1_BUF or will overflow and cause system to halt. /* Append 5 second of data */ bytesWritten = f_printf(&fsrc, DATA1_BUF); /* Close the file */ f_close(&fsrc); printf("\r\n%d of bytesWritten", bytesWritten); // Reset DATA1_BUF memset(DATA1_BUF, 0, sizeof(DATA1_BUF)); } else { // here means that DATA2_BUF is full and ready to flush out // be sure to empty out DATA2_BUF or will overflow and cause system to halt. /* Append 5 second of data */ bytesWritten = f_printf(&fsrc, DATA2_BUF); /* Close the file */ f_close(&fsrc); printf("\r\n%d of bytesWritten", bytesWritten); // Reset DATA2_BUF memset(DATA2_BUF, 0, sizeof(DATA2_BUF)); } } // following routine is only necessary when the board works as server #elif defined USE_EQDAS_SERVER /* EQ-DAQ-01 Parsing routine ------------------------------------------------- */ /* Set E1Flag indicate that we have valid connection from EQ-DAQ-01(port 5050) */ if(E1Flag) { E1Flag = false; // clear flag since this routine excutes ceaselessly over time ProcessTextStream(EQ_ONE, (char*)RX_BUF, E1Order); /* PC Client Parsing routine ------------------------------------------------- */ /* Set PCFlag indicate that we have valid connection from PC Client(port 7070) */ if(PCFlag) { // Send directly to PC SendToPC(E1Order); } if(E1Order < 99) E1Order++; else E1Order = 0; } /* EQ-DAQ-02 Parsing routine ------------------------------------------------- */ /* Set E2Flag indicate that we have valid connection from EQ-DAQ-02(port 6060) */ if(E2Flag) { E2Flag = false; ProcessTextStream(EQ_TWO, (char*)RX_BUF, E2Order); /* PC Client Parsing routine ------------------------------------------------- */ /* Set PCFlag indicate that we have valid connection from PC Client(port 7070) */ if(PCFlag) { // Send directly to PC SendToPC(E2Order); } if(E2Order < 99) E2Order++; else E2Order = 0; } #endif /* Setup TCP Client or Server -----------------------------------------------------*/ /* Please open config.h file to choose a proper board you wish to use */ #if (defined USE_EQDAS01) || (defined USE_EQDAS02) /* Start TCP Client process */ ProcessTcpClient(SOCK_ZERO); #elif defined USE_EQDAS_SERVER /* Process server socket with each port */ ProcessTcpServer(SOCK_ZERO, 5050); // designated as for EQM-DAQ-01 with port 5050 ProcessTcpServer(SOCK_ONE, 6060); // designated as for EQM-DAQ-02 with port 6060 ProcessTcpServer(SOCK_TWO, 7070); // designated as for PC-CLIENT with port 7070 ProcessTcpServer(SOCK_THREE, 8080); // designated as for PC_DUMP with port 8080 /* ProcessTcpServer(SOCK_FOUR, 9090); // designated as for TOBEUSED with port 9090 ProcessTcpServer(SOCK_FIVE, 10010); // designated as for TOBEUSED with port 10010 ProcessTcpServer(SOCK_SIX, 10020); // designated as for TOBEUSED with port 10020 ProcessTcpServer(SOCK_SEVEN, 10030); // designated as for TOBEUSED with port 10030 */ #endif } }
/** * @brief Main program * @param None * @retval None */ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f10x_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f10x.c file */ /* System Clocks Configuration */ RCC_Configuration(); /* System Tick Configuration at 1us */ SysTick_Config(SystemCoreClock / 1000000); #if (defined USE_EQDAS01) || (defined USE_EQDAS02) /* TIM2 Configuration */ TIM2_Configuration(); /* TIM3 Configuration */ TIM3_Configuration(); /* TIM6 Configuration (RTC load) */ TIM6_Configuration(); #elif defined USE_EQDAS_SERVER /* TIM4 Configuration */ TIM4_Configuration(); #endif /* CLCD Configuration */ CLCD_Configuration(); /* GLCD Configuration */ GLCD_Configuration(); /* UART1 Configuration */ UART_Configuration(); /* RTC configuration by setting the time by Serial USART1 */ //RTC_SetTimeBySerial(); /* WIZ820io SPI1 configuration */ WIZ820io_SPI1_Configuration(); /* W5200 Configuration */ Set_network(); /* Print WIZ820io configuration */ printSysCfg(); /* EXTI Configuration */ EXTI_Configuration(); /* FatFS configuration */ f_mount(0, &fs); // mSD //f_mount(1, &fs); // NAND /* Display Total size of SD card in MB scale */ SD_TotalSize(); /* Scan all files in mSD card */ scan_files(path); /* MAL configuration */ //Set_System(); /* UMS configuration */ //Set_USBClock(); //USB_Interrupts_Config(); //USB_Init(); /* loop upon completion of USB Enumeration */ //while (bDeviceState != CONFIGURED); /* ATFC Algorithm GPIO */ ATFC_GPIO_Configuration(); /* ATFC Parameter Initialization */ ATFCAlgorithmParameterSetup(); // For TCP client's connection request delay presentTime = my_time; /* Clear CLCD before branch into main */ CLCD_Clear(); /* Alarm in 3 second */ //RTC_SetAlarm(RTC_GetCounter() + 3); /* Wait until last write operation on RTC registers has finished */ //RTC_WaitForLastTask(); /* Create directory and sub directory in accordance with current date */ //filePath = CreateDirectoryAccordingly(GetYearAndMergeToInt(), GetMonthAndMergeToInt(), //GetDayAndMergeToInt(), RTC_GetCounter() / 3600); /* Create file in append mode in accordance with current minute */ //CreateFileAppendModeAccordingly(filePath, (RTC_GetCounter() % 3600) / 60); // When everything is set, print message printf("\r\n\n - System is ready - "); while (1) { #if (defined USE_EQDAS01) || (defined USE_EQDAS02) if(TimerCount > 1000) { // 0 ~ 999 (1000) = 1 sec TimerCount = 0; /* int x, y, z; x = mAxisBuf.tmp_data_x_lcd[index]; y = mAxisBuf.tmp_data_y_lcd[index]; z = mAxisBuf.tmp_data_z_lcd[index]; char Serial_Buf[37]; int hour, minute, second, tmsecond; hour = THH; minute = TMM; second = TSS; tmsecond = 0; sprintf(Serial_Buf, "%04d%02d%02d_%02d%02d%02d%02d_%+05d_%+05d_%+05d\r\n", year, month, day, hour, minute, second, tmsecond, x, y, z); printf(Serial_Buf); */ //my_time++; // uncomment when tcp connection is needed /* Process Parameter Text Stream */ if(PCFlag) { // EQDAS Client System and ATFC Algorithm Setting PCFlag = false; ProcessParameterStream(); } } /* Clock generated by TIM3 */ if(ClientTimerCounter > 10) { // 0 ~ 999 (1000) = 1 sec ClientTimerCounter = 0; int mAlgorithmContainer; year = GetYearAndMergeToInt(); month = GetMonthAndMergeToInt(); day = GetDayAndMergeToInt(); hour = THH; minute = TMM; second = TSS; tmsecond = 0; int mYear, mMonth, mDay, mHour, mMin, mSec, mTMSec; mYear = year; mMonth = month; mDay = day; mHour = hour; mMin = minute; mSec = second; mTMSec = tmsecond; x = mAxisBuf.tmp_data_x_lcd[arrIdx]; y = mAxisBuf.tmp_data_y_lcd[arrIdx]; z = mAxisBuf.tmp_data_z_lcd[arrIdx]; if(flag_uart) { // prevent unpleasant impuse // Index synchronization arrIdx = index; // Make a copy from raw collected data to temporary array CopyToTmpArray(arrIdx); // Copy to Temporary GAL array CopyToTmpGalArray(arrIdx); // Calculate GAL and copy to single temporary GAL value CalculateGalAndCopyToGal(arrIdx); // Determine KMA scale DetermineKMA(arrIdx); // Check sign bit and apply to int container CheckSignAndToInt(arrIdx); // this function also cuts surplus 1G /* Switch menu & waveform display through graphic lcd */ GLCD_AxisViewWithWaveform(mode, arrIdx, x, y, z); if(GoATFCFlag) { // Apply ATFC Algorithm to Axis x ATFCAlgorithm(mAxisBuf.tmp_data_x_lcd[arrIdx]); } } if(EventDetection) { GPIO_WriteBit(GPIOE, GPIO_Pin_15, Bit_SET); mAlgorithmContainer = x; } else { GPIO_WriteBit(GPIOE, GPIO_Pin_15, Bit_RESET); mAlgorithmContainer = 0; } // Copy to data buffer to be written through FATFS //CopyToFatFsDataBuffer(arrIdx); /* EQDAQ01, 02 Client Routine ---------------------------------------------*/ /* E1Flag or E2Flag set when client board successfully connect to server --*/ /* Refer to wiz820.c line no. 300 for which flag to be set */ if(E1Flag) { char E1_Buf[45]; sprintf(E1_Buf, "%04d%02d%02d_%02d%02d%02d%02d_%+05d_%+05d_%+05d_%+05d\r\n", mYear, mMonth, mDay, mHour, mMin, mSec, mTMSec, x, y, z, mAlgorithmContainer); // Only when socket is established, allow send data if(getSn_SR(SOCK_TWO) == SOCK_ESTABLISHED) { /* send selected data */ CountSendByte = send(SOCK_TWO, (uint8_t*)E1_Buf, strlen(E1_Buf), (bool)false); } } if(E2Flag) { char E2_Buf[45]; sprintf(E2_Buf, "%04d%02d%02d_%02d%02d%02d%02d_%+05d_%+05d_%+05d\r\n", mYear, mMonth, mDay, mHour, mMin, mSec, mTMSec, x, y, z); // Only when socket is established, allow send data if(getSn_SR(SOCK_ZERO) == SOCK_ESTABLISHED) { /* send selected data */ send(SOCK_ZERO, (uint8_t*)E2_Buf, strlen(E2_Buf), (bool)false); } } } /* do RTC work on every second */ if(RTCTIM6Count > 1000) { RTCTIM6Count = 0; if(InitialThirteenSeconds == 12) { InitialThirteenSeconds = 0; GoATFCFlag = true; } else { if(!GoATFCFlag) { InitialThirteenSeconds++; } } /* RTC 1Hz interrupt */ if(RTCTimeDisplay) { // 1Hz calibrated by RTC RTCTimeDisplay = false; /* Display current time */ Time_Display(RTC_GetCounter()); } /* RTC Alarm interrupt */ if(RTCAlarmFlag) { RTCAlarmFlag = false; printf("\r\nRTC Alarm Actviated!"); } } /* Save log to file process ------------------------------------------------*/ /* Save process needs to be run every single cycle due to delay might occur */ if(GoAppendDataFlag) { // every 500 sample (equals 5 sec), go save file. GoAppendDataFlag = false; int bytesWritten = 0; if(EachSecFlag) { // it means that DATA1_BUF is full and ready to flush out // be sure to empty out DATA1_BUF or will overflow and cause system to halt. /* Append first data for the duration of 1 second */ bytesWritten = f_printf(&fsrc, DATA1_BUF); printf("\r\n%d of bytesWritten", bytesWritten); if(FileRecordCompleteFlag) { FileRecordCompleteFlag = false; printf("\r\nFile Record Complete!"); /* Close the file */ f_close(&fsrc); } // Reset DATA1_BUF memset(DATA1_BUF, 0, sizeof(DATA1_BUF)); } else { /* Append another second of data */ bytesWritten = f_printf(&fsrc, DATA2_BUF); printf("\r\n%d of bytesWritten", bytesWritten); if(FileRecordCompleteFlag) { FileRecordCompleteFlag = false; printf("\r\nFile Record Complete!"); /* Close the file */ f_close(&fsrc); } // Reset DATA2_BUF memset(DATA2_BUF, 0, sizeof(DATA2_BUF)); } } #endif if(ParseUSART1) { ParseUSART1 = false; // run some test on SDIO //SDIO_TEST(); #if (defined USE_EQDAS01) || (defined USE_EQDAS02) /* Print WIZ820io configuration */ printSysCfg(); printf("\r\n"); printf("\r\nBKP_DR1 = %d", BKP_ReadBackupRegister(BKP_DR1)); printf("\r\nBKP_DR2 = %d", BKP_ReadBackupRegister(BKP_DR2)); printf("\r\nBKP_DR3 = %d", BKP_ReadBackupRegister(BKP_DR3)); printf("\r\nBKP_DR4 = %d", BKP_ReadBackupRegister(BKP_DR4)); printf("\r\nBKP_DR5 = %d", BKP_ReadBackupRegister(BKP_DR5)); printf("\r\nBKP_DR6 = %d", BKP_ReadBackupRegister(BKP_DR6)); printf("\r\nBKP_DR7 = %d", BKP_ReadBackupRegister(BKP_DR7)); printf("\r\nBKP_DR8 = %d", BKP_ReadBackupRegister(BKP_DR8)); printf("\r\nBKP_DR9 = %d", BKP_ReadBackupRegister(BKP_DR9)); printf("\r\nBKP_DR10 = %d", BKP_ReadBackupRegister(BKP_DR10)); printf("\r\nBKP_DR11 = %d", BKP_ReadBackupRegister(BKP_DR11)); printf("\r\nBKP_DR12 = %d", BKP_ReadBackupRegister(BKP_DR12)); printf("\r\nBKP_DR13 = %d", BKP_ReadBackupRegister(BKP_DR13)); printf("\r\nBKP_DR14 = %d", BKP_ReadBackupRegister(BKP_DR14)); printf("\r\nBKP_DR15 = %d", BKP_ReadBackupRegister(BKP_DR15)); printf("\r\nBKP_DR16 = %d", BKP_ReadBackupRegister(BKP_DR16)); #elif (defined) USE_EQDAS_SERVER char buffer[37]; sprintf(buffer, "%s_%s_%s_%s_%s\r\n", DAQBoardOne[arrIdx].Date, DAQBoardOne[arrIdx].Time, DAQBoardOne[arrIdx].AxisX, DAQBoardOne[arrIdx].AxisY, DAQBoardOne[arrIdx].AxisZ); printf("\r\nRX_BUF : %s, strlen(RX_BUF) : %d", (char*)RX_BUF, strlen((char*)RX_BUF)); printf("\r\nstrlen(buffer) = %d\n%s", strlen(buffer), buffer); /* char *original = "-3843,+4095,+2069"; char target[20]; strncpy(target, original, strlen(original)); char *one, *two, *three; char *AfterToken; AfterToken = strtok(target, ","); one = AfterToken; AfterToken = strtok(NULL, ","); two = AfterToken; AfterToken = strtok(NULL, ","); three = AfterToken; AfterToken = strtok(NULL, ","); if(AfterToken != NULL) printf("AfterToken is not empty"); printf("\r\none : %s, two : %s, three : %s", one, two, three);*/ #endif } #if (defined USE_EQDAS01) || (defined USE_EQDAS02) /* for(i=0; i<100; i++) { if(flag_uart) { // Make a copy from raw collected data to temporary array CopyToTmpArray(i); // Copy to Temporary GAL array CopyToTmpGalArray(i); // Calculate GAL and copy to single temporary GAL value CalculateGalAndCopyToGal(i); // Determine KMA scale DetermineKMA(i); // Check sign bit and apply to int container CheckSignAndToInt(i); // this function also cuts surplus 1G } } */ // following routine is only necessary when the board works as server #elif defined USE_EQDAS_SERVER /* EQ-DAQ-01 Parsing routine ------------------------------------------------- */ /* Set E1Flag indicate that we have valid connection from EQ-DAQ-01(port 5050) */ if(E1Flag) { E1Flag = false; // clear flag since this routine excutes ceaselessly over time ProcessTextStream(EQ_ONE, (char*)RX_BUF, E1Order); /* PC Client Parsing routine ------------------------------------------------- */ /* Set PCFlag indicate that we have valid connection from PC Client(port 7070) */ if(PCFlag) { // Send directly to PC SendToPC(E1Order); } if(E1Order < 99) E1Order++; else E1Order = 0; } /* EQ-DAQ-02 Parsing routine ------------------------------------------------- */ /* Set E2Flag indicate that we have valid connection from EQ-DAQ-02(port 6060) */ if(E2Flag) { E2Flag = false; ProcessTextStream(EQ_TWO, (char*)RX_BUF, E2Order); /* PC Client Parsing routine ------------------------------------------------- */ /* Set PCFlag indicate that we have valid connection from PC Client(port 7070) */ if(PCFlag) { // Send directly to PC SendToPC(E2Order); } if(E2Order < 99) E2Order++; else E2Order = 0; } #endif /* Setup TCP Client or Server -----------------------------------------------------*/ /* Please open config.h file to choose a proper board you wish to use */ #if (defined USE_EQDAS01) || (defined USE_EQDAS02) /* Start TCP Client process */ ProcessTcpClient(SOCK_ZERO); // TCP Client /* Parameter setting Server side with port 5050 in default */ ATFCTcpServer(SOCK_TWO, EQDAS_Conf_PORT); // SOCK_TWO because of flag conformity #elif defined USE_EQDAS_SERVER /* Process server socket with each port */ ProcessTcpServer(SOCK_ZERO, 5050); // designated as for EQM-DAQ-01 with port 5050 ProcessTcpServer(SOCK_ONE, 6060); // designated as for EQM-DAQ-02 with port 6060 ProcessTcpServer(SOCK_TWO, 7070); // designated as for PC-CLIENT with port 7070 ProcessTcpServer(SOCK_THREE, 8080); // designated as for PC_DUMP with port 8080 /* ProcessTcpServer(SOCK_FOUR, 9090); // designated as for TOBEUSED with port 9090 ProcessTcpServer(SOCK_FIVE, 10010); // designated as for TOBEUSED with port 10010 ProcessTcpServer(SOCK_SIX, 10020); // designated as for TOBEUSED with port 10020 ProcessTcpServer(SOCK_SEVEN, 10030); // designated as for TOBEUSED with port 10030 */ #endif } }
// INIT ADC void InitADC(void){ ADC_InitTypeDef ADC_InitStructure; ADC_CommonInitTypeDef ADC_CommonInitStructure; DMA_InitTypeDef DMA_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; // Enable GPIO Clocks, ADC1, ADC2, ADC3, DMA2 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2 | RCC_APB2Periph_ADC3, ENABLE); DMANvicInterruptConfig(); TIM2_Configuration(); // See DMA2 request mapping [STM32F407 reference Manual table 43 // DMA2 Stream0 channel0 configuration DMAStream ADC1 DMA_InitStructure.DMA_Channel = DMA_Channel_0; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC_CDR_ADDRESS; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValue; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; DMA_InitStructure.DMA_BufferSize = 6; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA2_Stream0, &DMA_InitStructure); //Enable DMA Stream Half / Transfer Complete interrupt DMA_ITConfig(DMA2_Stream0, DMA_IT_TC | DMA_IT_HT, ENABLE); DMA_Cmd(DMA2_Stream0, ENABLE); // GPIO Init ADC1 --> PA3; PA4; PA5; PA6 GPIO_InitStructure.GPIO_Pin = ADCSENSOR1_PIN|ADCSENSOR2_PIN | ADCSENSOR3_PIN|ADCSENSOR4_PIN;; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; // Set PA3 and PA4 as Analog Input GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOA, &GPIO_InitStructure); // GPIO Init ADC3 --> PC0; PC2; GPIO_InitStructure.GPIO_Pin = ADCSENSOR5_PIN|ADCSENSOR6_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOC, &GPIO_InitStructure); // Common ADC Init ADC_CommonInitStructure.ADC_Mode = ADC_TripleMode_RegSimult;//; ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2; ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1; //DMA mode 1 enabled (2 / 3 half-words one by one - 1 then 2 then 3) ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; ADC_CommonInit(&ADC_CommonInitStructure); // Config the Master ADC ADC_InitStructure.ADC_Resolution = ADC_Resolution_8b; ADC_InitStructure.ADC_ScanConvMode = DISABLE;//DISABLE ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising; ADC_InitStructure.ADC_ExternalTrigConv =ADC_ExternalTrigConv_T2_TRGO; // Trigger Event ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfConversion = 2;//2 // Init ADC1 ADC_Init(ADC1, &ADC_InitStructure); // Config the slave ADC ADC_InitStructure.ADC_Resolution = ADC_Resolution_8b; ADC_InitStructure.ADC_ScanConvMode = DISABLE;//DISABLE ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfConversion = 2;//2 // Init ADC2 ADC_Init(ADC2, &ADC_InitStructure); // Init ADC3 ADC_Init(ADC3, &ADC_InitStructure); // ADC regular channel configuration ADC_RegularChannelConfig(ADCSENSOR1_ADC, ADCSENSOR1_CHANNEL, 1, ADDCSENSORSampeTime); ADC_RegularChannelConfig(ADCSENSOR2_ADC, ADCSENSOR2_CHANNEL, 2, ADDCSENSORSampeTime); ADC_RegularChannelConfig(ADCSENSOR3_ADC, ADCSENSOR3_CHANNEL, 1, ADDCSENSORSampeTime); ADC_RegularChannelConfig(ADCSENSOR4_ADC, ADCSENSOR4_CHANNEL, 2, ADDCSENSORSampeTime); ADC_RegularChannelConfig(ADCSENSOR5_ADC, ADCSENSOR5_CHANNEL, 1, ADDCSENSORSampeTime); ADC_RegularChannelConfig(ADCSENSOR6_ADC, ADCSENSOR6_CHANNEL, 2, ADDCSENSORSampeTime); // Enable DMA request after last transfer (Single-ADC mode) ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE); /*// Enable ADC DMA ADC_DMACmd(ADC1, ENABLE);*/ // Enable ADC3 ADC_Cmd(ADC1, ENABLE); ADC_Cmd(ADC2, ENABLE); ADC_Cmd(ADC3, ENABLE); // Start the ADC Software Conversion ADC_SoftwareStartConv(ADC1); }
/** * @brief Main program * @param None * @retval None */ int main(void) { /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f10x_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f10x.c file */ /* System Clocks Configuration */ RCC_Configuration(); /* System Tick Configuration at 1us */ SysTick_Config(SystemCoreClock / 1000000); #if (defined USE_EQDAS01) || (defined USE_EQDAS02) /* TIM2 Configuration */ TIM2_Configuration(); /* TIM3 Configuration (10ms for Network Transmission)*/ TIM3_Configuration(); /* TIM5 Configuration (GLCD Time Share)*/ TIM5_Configuration(); /* TIM6 Configuration (RTC load) */ TIM6_Configuration(); #elif defined USE_EQDAS_SERVER /* TIM4 Configuration */ TIM4_Configuration(); #endif /* CLCD Configuration */ CLCD_Configuration(); /* GLCD Configuration */ GLCD_Configuration(); /* UART1 Configuration */ UART_Configuration(); /* GPS-UART3 Configuration */ //GPS_Configuration(); /* RTC configuration by setting the time by Serial USART1 */ RTC_SetTimeBySerial(); /* Forcefully let user set the IP through terminal */ //ForceIPSetBySerial(); /* WIZ820io SPI1 configuration */ WIZ820io_SPI1_Configuration(); /* W5200 Configuration */ Set_network(); /* Print WIZ820io configuration */ printSysCfg(); /* EXTI Configuration */ EXTI_Configuration(); /* FatFS configuration */ f_mount(0, &fs); // mSD //f_mount(1, &fs); // NAND /* Display Total size of SD card in MB scale */ SD_TotalSize(); /* Scan all files in mSD card */ scan_files(path); /* MAL configuration */ //Set_System(); /* UMS configuration */ //Set_USBClock(); //USB_Interrupts_Config(); //USB_Init(); /* loop upon completion of USB Enumeration */ //while (bDeviceState != CONFIGURED); /* ATFC Algorithm GPIO */ ATFC_GPIO_Configuration(); /* ATFC Parameter Initialization */ ATFCAlgorithmParameterSetup(); // For TCP client's connection request delay presentTime = my_time; /* Clear CLCD before branch into main */ CLCD_Clear(); /* Create directory and sub directory in accordance with current date */ filePath = CreateDirectoryAccordingly(GetYearAndMergeToInt(), GetMonthAndMergeToInt(), GetDayAndMergeToInt(), RTC_GetCounter() / 3600); /* Create file in append mode in accordance with current minute */ CreateFileAppendModeAccordingly(filePath, (RTC_GetCounter() % 3600) / 60); // When everything is set, print message printf("\r\n\n - System is ready - "); while (1) { #if (defined USE_EQDAS01) || (defined USE_EQDAS02) if(TimerCount > 1000) { // 0 ~ 999 (1000) = 1 sec TimerCount = 0; /* int x, y, z; x = mAxisBuf.tmp_data_x_lcd[index]; y = mAxisBuf.tmp_data_y_lcd[index]; z = mAxisBuf.tmp_data_z_lcd[index]; char Serial_Buf[37]; int hour, minute, second, tmsecond; hour = THH; minute = TMM; second = TSS; tmsecond = 0; sprintf(Serial_Buf, "%04d%02d%02d_%02d%02d%02d%02d_%+05d_%+05d_%+05d\r\n", year, month, day, hour, minute, second, tmsecond, x, y, z); printf(Serial_Buf); */ //my_time++; // uncomment when tcp connection is needed /* Process Parameter Text Stream */ /* if(PCFlag) { // EQDAS Client System and ATFC Algorithm Setting PCFlag = false; ProcessParameterStream(); } */ } /* GLCD Time Share */ if(TIM5GLCDCount > 95) { // Allocate proper time to share mcu resource with network TIM5GLCDCount = 0; /* Graphic LCD Copy and Process Routine -------------------------------------- */ if(SyncFlag) { // prevent unpleasant impuse // Index synchronization dedicate to GLCD arrGLCDIdx = index; // Make a copy from raw collected data to temporary array CopyToTmpArray(arrGLCDIdx); // Copy to Temporary GAL array //CopyToTmpGalArray(arrIdx); // Calculate GAL and copy to single temporary GAL value //CalculateGalAndCopyToGal(arrIdx); // Determine KMA scale KMAGrade = DetermineKMA(arrGLCDIdx); // Check sign bit and apply to int container CheckSignAndToInt(arrGLCDIdx); // this function also cuts surplus 1G } int mATFCBit_lcd; mATFCBit_lcd = mAxisBuf.ATFCBit_lcd[arrGLCDIdx]; /* Switch menu & waveform display through graphic lcd */ GLCD_AxisViewWithWaveform(mode, arrGLCDIdx); /* Display KMA Intensity on Graphic LCD */ GLCD_DisplayKMAIntensity(KMAGrade, mATFCBit_lcd); } /* Clock generated by TIM3 */ if(ClientTimerCounter > 10) { // 0 ~ 999 (1000) = 1 sec ClientTimerCounter = 0; year = GetYearAndMergeToInt(); month = GetMonthAndMergeToInt(); day = GetDayAndMergeToInt(); hour = THH; minute = TMM; second = TSS; tmsecond = 0; int mYear, mMonth, mDay, mHour, mMin, mSec, mTMSec; mYear = year; mMonth = month; mDay = day; mHour = hour; mMin = minute; mSec = second; mTMSec = tmsecond; if(SyncFlag) { // Index synchronization arrIdx = index; // Make a copy from raw collected data to temporary net array CopyToNetArray(arrIdx); // Check sign bit and apply to int container CheckSignAndToIntForNet(arrIdx); // this function also cuts surplus 1G } /* Prevent access to volatile variable warning */ /* This have to be here in order to correct data to be used in ATFC */ int mX, mY, mZ, mATFCBit; mX = mAxisNetBuf.axis_x_for_net[arrIdx]; mY = mAxisNetBuf.axis_y_for_net[arrIdx]; mZ = mAxisNetBuf.axis_z_for_net[arrIdx]; mATFCBit = mAxisNetBuf.ATFCBit_net[arrIdx]; /* EQDAQ01, 02 Client Routine ---------------------------------------------*/ /* E1Flag or E2Flag set when client board successfully connect to server --*/ /* Refer to wiz820.c line no. 406 for which flag to be set */ if(E1Flag) { char E1_Buf[45]; sprintf(E1_Buf, "%04d%02d%02d_%02d%02d%02d%02d_%+05d_%+05d_%+05d_%d\r\n", mYear, mMonth, mDay, mHour, mMin, mSec, mTMSec, mX, mY, mZ, mATFCBit); // Only when socket is established, allow send data if(getSn_SR(SOCK_ZERO) == SOCK_ESTABLISHED) { /* send selected data */ CountSendByte = send(SOCK_ZERO, (uint8_t*)E1_Buf, strlen(E1_Buf), (bool)false); } } if(E2Flag) { char E2_Buf[45]; sprintf(E2_Buf, "%04d%02d%02d_%02d%02d%02d%02d_%+05d_%+05d_%+05d_%d\r\n", mYear, mMonth, mDay, mHour, mMin, mSec, mTMSec, mX, mY, mZ, mATFCBit); // Only when socket is established, allow send data if(getSn_SR(SOCK_ZERO) == SOCK_ESTABLISHED) { /* send selected data */ send(SOCK_ZERO, (uint8_t*)E2_Buf, strlen(E2_Buf), (bool)false); } } } /* do RTC work on every second */ if(RTCTIM6Count > 1000) { RTCTIM6Count = 0; if(InitialThirteenSeconds == 12) { InitialThirteenSeconds = 0; GoATFCFlag = true; } else { if(!GoATFCFlag) { InitialThirteenSeconds++; } } /* RTC 1Hz interrupt */ if(RTCTimeDisplay) { // 1Hz calibrated by RTC RTCTimeDisplay = false; /* Adjust realtime clock deviation */ if(hour > 23) { int i, currentDay, mDay, mHour, mMin, mSec; mDay = hour / 24; for(i=0; i<mDay; i++) { IncreaseSingleDay(); if(i == mDay - 1) { currentDay = (GetMonthAndMergeToInt() * 100) + GetDayAndMergeToInt(); BKP_WriteBackupRegister(BKP_DR3, currentDay); // Save Month and Date } } mHour = THH % 24; mMin = TMM; mSec = TSS; /* Change the current time */ RTC_SetCounter(mHour*3600 + mMin*60 + mSec); } /* Display current time */ Time_Display(RTC_GetCounter()); int OrderCount; for(OrderCount = 0; OrderCount < 100; OrderCount++) { // Copy to data buffer to be written through FATFS CopyToFatFsDataBuffer(OrderCount); } } /* RTC Alarm interrupt */ if(RTCAlarmFlag) { RTCAlarmFlag = false; printf("\r\nRTC Alarm Actviated!"); } } #endif if(ParseGPS) { ParseGPS = false; printf("%s", GPS_Buffer); } if(ParseUSART1) { ParseUSART1 = false; // run some test on SDIO //SDIO_TEST(); #if (defined USE_EQDAS01) || (defined USE_EQDAS02) /* Print WIZ820io configuration */ printSysCfg(); printf("\r\n"); printf("\r\nBKP_DR1 = %d", BKP_ReadBackupRegister(BKP_DR1)); printf("\r\nBKP_DR2 = %d", BKP_ReadBackupRegister(BKP_DR2)); printf("\r\nBKP_DR3 = %d", BKP_ReadBackupRegister(BKP_DR3)); printf("\r\nBKP_DR4 = %d", BKP_ReadBackupRegister(BKP_DR4)); printf("\r\nBKP_DR5 = %d", BKP_ReadBackupRegister(BKP_DR5)); printf("\r\nBKP_DR6 = %d", BKP_ReadBackupRegister(BKP_DR6)); printf("\r\nBKP_DR7 = %d", BKP_ReadBackupRegister(BKP_DR7)); printf("\r\nBKP_DR8 = %d", BKP_ReadBackupRegister(BKP_DR8)); printf("\r\nBKP_DR9 = %d", BKP_ReadBackupRegister(BKP_DR9)); printf("\r\nBKP_DR10 = %d", BKP_ReadBackupRegister(BKP_DR10)); printf("\r\nBKP_DR11 = %d", BKP_ReadBackupRegister(BKP_DR11)); printf("\r\nBKP_DR12 = %d", BKP_ReadBackupRegister(BKP_DR12)); printf("\r\nBKP_DR13 = %d", BKP_ReadBackupRegister(BKP_DR13)); printf("\r\nBKP_DR14 = %d", BKP_ReadBackupRegister(BKP_DR14)); printf("\r\nBKP_DR15 = %d", BKP_ReadBackupRegister(BKP_DR15)); printf("\r\nBKP_DR16 = %d", BKP_ReadBackupRegister(BKP_DR16)); /* printf("\r\nstrlen(HEADER) : %d %s", strlen(HEADER), HEADER); printf("\r\nf_mkdir1 : "); char *dirPath = "0:/20130517"; res = f_mkdir(dirPath); FPrintFatResult(res); printf("\r\nf_mkdir2 : "); dirPath = "0:/20130517/22H-23H"; res = f_mkdir(dirPath); FPrintFatResult(res); char *filePath = "0:/20130517/2-23H/test.txt"; // Create log file on the drive 0 res = open_append(&fsrc, filePath); FPrintFatResult(res); if(res == FR_OK) { printf("test.txt successfully created\r\n"); // Write buffer to file int bytesWritten; bytesWritten = f_printf(&fsrc, HEADER); printf("\r\n%d of bytesWritten", bytesWritten); // Close file f_close(&fsrc); } else if ( res == FR_EXIST ) { printf("\r\ntest.txt already exist"); } */ #elif (defined) USE_EQDAS_SERVER char buffer[37]; sprintf(buffer, "%s_%s_%s_%s_%s\r\n", DAQBoardOne[arrIdx].Date, DAQBoardOne[arrIdx].Time, DAQBoardOne[arrIdx].AxisX, DAQBoardOne[arrIdx].AxisY, DAQBoardOne[arrIdx].AxisZ); printf("\r\nRX_BUF : %s, strlen(RX_BUF) : %d", (char*)RX_BUF, strlen((char*)RX_BUF)); printf("\r\nstrlen(buffer) = %d\n%s", strlen(buffer), buffer); /* char *original = "-3843,+4095,+2069"; char target[20]; strncpy(target, original, strlen(original)); char *one, *two, *three; char *AfterToken; AfterToken = strtok(target, ","); one = AfterToken; AfterToken = strtok(NULL, ","); two = AfterToken; AfterToken = strtok(NULL, ","); three = AfterToken; AfterToken = strtok(NULL, ","); if(AfterToken != NULL) printf("AfterToken is not empty"); printf("\r\none : %s, two : %s, three : %s", one, two, three);*/ #endif } // following routine is only necessary when the board works as server #if defined USE_EQDAS_SERVER /* Server also needs to have get CLCD going while running */ /* RTC 1Hz interrupt */ if(RTCTimeDisplay) { // 1Hz calibrated by RTC RTCTimeDisplay = false; /* Adjust realtime clock deviation */ if(hour > 23) { int i, currentDay, mDay, mHour, mMin, mSec; mDay = hour / 24; for(i=0; i<mDay; i++) { IncreaseSingleDay(); if(i == mDay - 1) { currentDay = (GetMonthAndMergeToInt() * 100) + GetDayAndMergeToInt(); BKP_WriteBackupRegister(BKP_DR3, currentDay); // Save Month and Date } } mHour = THH % 24; mMin = TMM; mSec = TSS; /* Change the current time */ RTC_SetCounter(mHour*3600 + mMin*60 + mSec); } /* Display current time */ Time_Display(RTC_GetCounter()); } /* EQ-DAQ-01 Parsing routine ------------------------------------------------- */ /* Set E1Flag indicate that we have valid connection from EQ-DAQ-01(port 5050) */ if(E1Flag) { E1Flag = false; // clear flag since this routine excutes ceaselessly over time ProcessTextStream(EQ_ONE, (char*)RX_BUF, E1Order); /* PC Client Parsing routine ------------------------------------------------- */ /* Set PCFlag indicate that we have valid connection from PC Client(port 7070) */ if(PCFlag && !E2Flag) { // only when PC is connected and EQ-DAQ-02 is not connected // Send directly to PC //SendToPC(EQ_ONE, E1Order); } if(E1Order < 99) E1Order++; else E1Order = 0; } /* EQ-DAQ-02 Parsing routine ------------------------------------------------- */ /* Set E2Flag indicate that we have valid connection from EQ-DAQ-02(port 6060) */ if(E2Flag) { E2Flag = false; ProcessTextStream(EQ_TWO, (char*)RX_BUF, E2Order); /* PC Client Parsing routine ------------------------------------------------- */ /* Set PCFlag indicate that we have valid connection from PC Client(port 7070) */ if(PCFlag && !E1Flag) { // only when PC is connected and EQ-DAQ-01 is not connected // Send directly to PC //SendToPC(EQ_TWO, E2Order); } if(E2Order < 99) E2Order++; else E2Order = 0; /* PC Client Parsing routine ------------------------------------------------- */ /* Set PCFlag indicate that we have valid connection from PC Client(port 7070) */ if(PCFlag) { // Send directly to PC MultipleBoardDataToSendToPC(EQ_BOTH, E1Order, E2Order); } } #endif /* Setup TCP Client or Server -----------------------------------------------------*/ /* Please open config.h file to choose a proper board you wish to use -------------*/ #if (defined USE_EQDAS01) || (defined USE_EQDAS02) /* Start TCP Client process */ ProcessTcpClient(SOCK_ZERO); // TCP Client /* Parameter setting Server side with port 5050 in default */ ATFCTcpServer(SOCK_TWO, EQDAS_Conf_PORT); // SOCK_TWO because of flag conformity #elif defined USE_EQDAS_SERVER /* Process server socket with each port */ ProcessTcpServer(SOCK_ZERO, 5050); // designated as for EQM-DAQ-01 with port 5050 ProcessTcpServer(SOCK_ONE, 6060); // designated as for EQM-DAQ-02 with port 6060 ProcessTcpServer(SOCK_TWO, 7070); // designated as for PC-CLIENT with port 7070 ProcessTcpServer(SOCK_THREE, 8080); // designated as for PC_DUMP with port 8080 /* ProcessTcpServer(SOCK_FOUR, 9090); // designated as for TOBEUSED with port 9090 ProcessTcpServer(SOCK_FIVE, 10010); // designated as for TOBEUSED with port 10010 ProcessTcpServer(SOCK_SIX, 10020); // designated as for TOBEUSED with port 10020 ProcessTcpServer(SOCK_SEVEN, 10030); // designated as for TOBEUSED with port 10030 */ #endif } }