/** * The on chip temperature. * * This is horrible as TEMPERATURE_external() must be called first */ int16_t TEMPERATURE_cpu() { HAL_ADC_PollForConversion(&hadc, 100); uint32_t val = HAL_ADC_GetValue(&hadc); return ComputeTemperature(val); }
uint16_t adc_read(analogin_t *obj) { ADC_ChannelConfTypeDef sConfig = {0}; // Configure ADC channel sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_56CYCLES; sConfig.Offset = 0; switch (obj->channel) { case 0: sConfig.Channel = ADC_CHANNEL_0; break; case 1: sConfig.Channel = ADC_CHANNEL_1; break; case 2: sConfig.Channel = ADC_CHANNEL_2; break; case 3: sConfig.Channel = ADC_CHANNEL_3; break; case 4: sConfig.Channel = ADC_CHANNEL_4; break; case 5: sConfig.Channel = ADC_CHANNEL_5; break; case 6: sConfig.Channel = ADC_CHANNEL_6; break; case 7: sConfig.Channel = ADC_CHANNEL_7; break; case 8: sConfig.Channel = ADC_CHANNEL_8; break; case 9: sConfig.Channel = ADC_CHANNEL_9; break; case 10: sConfig.Channel = ADC_CHANNEL_10; break; case 11: sConfig.Channel = ADC_CHANNEL_11; break; case 12: sConfig.Channel = ADC_CHANNEL_12; break; case 13: sConfig.Channel = ADC_CHANNEL_13; break; case 14: sConfig.Channel = ADC_CHANNEL_14; break; case 15: sConfig.Channel = ADC_CHANNEL_15; break; case 16: sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES; break; case 17: sConfig.Channel = ADC_CHANNEL_VREFINT; sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES; break; case 18: sConfig.Channel = ADC_CHANNEL_VBAT; sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES; break; default: return 0; } HAL_ADC_ConfigChannel(&obj->handle, &sConfig); HAL_ADC_Start(&obj->handle); // Start conversion // Wait end of conversion and get value if (HAL_ADC_PollForConversion(&obj->handle, 10) == HAL_OK) { return (uint16_t)HAL_ADC_GetValue(&obj->handle); } else { return 0; } }