void Sensor_Configuration(void) { ADC_CommonInitTypeDef ADC_CommonInitStructure; GPIO_InitTypeDef GPIO_InitStructure; SensorGPIO_Configuration(); DMA2_Configuration(); GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.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_InitStructure.GPIO_Mode = GPIO_Mode_AN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOA, &GPIO_InitStructure); ADC_CommonInitStructure.ADC_Mode = ADC_DualMode_RegSimult; ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2; ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_1; ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_20Cycles; ADC_CommonInit(&ADC_CommonInitStructure); ADC1_Config(); ADC2_Config(); ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE); ADC_Cmd(ADC1, ENABLE); ADC_Cmd(ADC2, ENABLE); ADC_DMACmd(ADC1, ENABLE); ADC_SoftwareStartConv(ADC1); }
int main(void) { //Initial Set-up of: SPI, USB, TIM2, and ADC SysInit(); SysTickInit(); LMP_SPI_Init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); InitTIM2(); startUSBOTG(); ADC1_Config(); TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE); TIM_ITConfig(TIM4, TIM_IT_CC1, ENABLE); //Main Loop: Transmit ADC result to PC while (1) { //Read in from DMA buffer to output array while(!ADCBuffer[399]); //Wait until last element of buffer is non-zero(testing) for(int i = 0; i<400; i++) adc_16[i] = ADCBuffer[i]; //Convert 16b array elements in 4000 element array to 8 bit words and store in //8000 element array for (int i=0; i<800; i++) { if (i%2 == 0) adc_8[i] = (adc_16[i/2] >> 8); else adc_8[i] = (adc_16[i/2]); } //Output 2000 element array of ADC results over USB VCP Data line APP_Rx_ptr_out = 0; APP_Rx_length = 0; APP_Rx_ptr_in = 0; //for (int i=0; i < 8; i++) VCP_DataTx(&adc_8[i], 1); VCP_DataTx(&adc_8[55], 1); }
/** * @brief Start temperature monitoring thread * @param none * @retval none */ int start_Thread_Temperature(void) { ADC1_Config(); /* configure temperature ADC */ tid_Thread_Temperature = osThreadCreate(osThread(Thread_Temperature), NULL); if (!tid_Thread_Temperature) return -1; return 0; }
int main(void) { SystemInit(); Support_Config(); DAC1_Config_All(); ADC1_Config(160000); while(1) { } }
/** * @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_stm32f0xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f0xx.c file */ /* LCD Display init */ Display_Init(); /* Key button */ STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_GPIO); /* Configures LED1 GPIO */ STM_EVAL_LEDInit(LED1); /* Configure ADC1 Channel 11 */ ADC1_Config(); /* Infinite loop */ while (1) { /* Press Key button to get the converted data */ while(STM_EVAL_PBGetState(BUTTON_KEY) != RESET); /* Get ADC1 converted data */ ADC1ConvertedValue =ADC_GetConversionValue(ADC1); /* Compute the voltage */ ADC1ConvertedVoltage = (ADC1ConvertedValue *3300)/0xFFF; /* Display converted data on the LCD */ Display(); } }
void adc_f0_init(void) { ADC_GPIO_Config(); ADC1_Config(); }
int main(void) { /* MCU Configuration----------------------------------------------------------*/ HAL_Init(); /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ SystemClock_Config(); /* Configure the system clock */ ADC1_Config(); /* configure ADC1 */ Display_GPIO_Config(); /* Configure 7-Segment Displays */ Alarm_GPIO_Config(); /* Configure alarm pins */ initLCD(); /* configure LCD */ /* print temperature on the first line of the LCD */ returnHome(); /* just makes sure that start writing at the right place */ LCD_WriteString(" Temperature"); /* The 2 initial space are for centering */ adcState = malloc(sizeof(kalmanState)); /* Init Kalman Filter */ kalmanInit(adcState, INIT_q, INIT_r, INIT_x, INIT_p, INIT_k); /* main program to run in this infinite loop */ while (1) { if (adcTimer >= ADC_PERIOD) { /* 100Hz */ adcTimer = 0; HAL_ADC_Start(&ADC1_Handle); /* start ADC conversion */ /* wait for the conversion to be done and get data */ if (HAL_ADC_PollForConversion(&ADC1_Handle, 1000000) == HAL_OK) { adc_val = HAL_ADC_GetValue(&ADC1_Handle); /* get the value */ kalmanUpdate(adcState, adc_val); /* filter the data and update the filter parameters */ /* DON'T DELETE printf for matlab script */ //printf("%f,%f,%f,%f,%f,%f\n",adc_val, adcState->q,adcState->r, adcState->x, adcState->p, adcState->k); temp = convertTemp(adcState->x); /* convert the filterd value of the ADC into temperature */ /* Alarm triggering */ if (temp > THRESHHOLD_TEMP) { if ( filterAlarmCounter > 5 ){ /* 5 consecutive to avoid false positive */ trigger_alarm(); } else { filterAlarmCounter++; } } else { shutoff_alarm(); filterAlarmCounter = 0; } /* Update Measurement to Display at 2Hz */ if (updateMeasureForDisplayTimer >= UPDATE_MEASURE_PERIOD) { updateMeasureForDisplayTimer = 0; /* reset the displayTimer tick */ displayTemp = temp; displayTemp = floor(10 * displayTemp) / 10; /* truncate to 1 decimal without rounding */ /* LCD DISPLAY */ SetAdress(64); /* go to line 2 of LCD */ sprintf(tempToLCD, " %.1f", displayTemp); /* convert the float to a string and formats it */ LCD_WriteString(tempToLCD); /* print value to the LCD display */ /* LCD DISPLAY END */ } } } /* here display runs at DISPLAY_7_SEGMENT_PERIOD speed, but displayTemp gets updated at 2Hz */ if(display7segTimer >= DISPLAY_7_SEGMENT_PERIOD) { display7segTimer = 0; display(displayTemp); /* display on 7-segment display */ } } }