2018-04-10 03:18 PM
Hi everybody, Our application measure VBAT voltage using ADC1 regular ADC_CHANNEL_14. In fact, the ADC Bat. Measurement work fine on the STM32F105 but not on the STM32F411. Below our configuration for ADC 'STM32F411': Results on the USART terminal:Hi everybody, Our application measure VBAT voltage using ADC1 regular ADC_CHANNEL_14. In fact, the ADC Bat. Measurement work fine on the STM32F105 but not on the STM32F411. Below our configuration for ADC 'STM32F411': Results on the USART terminal:Hi everybody, Our application measure VBAT voltage using ADC1 regular ADC_CHANNEL_14. In fact, the ADC Bat. Measurement work fine on the STM32F105 but not on the STM32F411. Below our configuration for ADC 'STM32F411': Results on the USART terminal:Hi everybody, Our application measure VBAT voltage using ADC1 regular ADC_CHANNEL_14. In fact, the ADC Bat. Measurement work fine on the STM32F105 but not on the STM32F411. Below our configuration for ADC 'STM32F411': Results on the USART terminal:Hi everybody, Our application measure VBAT voltage using ADC1 regular ADC_CHANNEL_14. In fact, the ADC Bat. Measurement work fine on the STM32F105 but not on the STM32F411. Below our configuration for ADC 'STM32F411': Results on the USART terminal:
void MX_ADC1_Init(void)
{ ADC_ChannelConfTypeDef sConfig; hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.ScanConvMode = DISABLE; hadc1.Init.ContinuousConvMode = ENABLE; hadc1.Init.DiscontinuousConvMode = ENABLE; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; if (HAL_ADC_Init(&hadc1) != HAL_OK) { /* ADC initialization error */ dlog(DDEBUG, 'Error on adc init\n'); return; } sConfig.Channel = ADC_CHANNEL_14; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_84CYCLES/*ADC_SAMPLETIME_28CYCLESif (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{ dlog(DDEBUG, 'Error on adc channel config\n'); } sConfig.Channel = ADC_CHANNEL_VREFINT; sConfig.Rank = 2; sConfig.SamplingTime = ADC_SAMPLETIME_84CYCLES; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { dlog(DDEBUG, 'Error on adc channel config\n'); } if (HAL_ADC_Start_DMA(&hadc1, (uint32_t *)aADCxConvertedValues, ADCCONVERTEDVALUES_BUFFER_SIZE ) != HAL_OK) { dlog(DDEBUG, 'Error on ADC DMA start\n'); } MX_ADC1_GetValue(); }Hi everybody, Our application measure VBAT voltage using ADC1 regular ADC_CHANNEL_14. In fact, the ADC Bat. Measurement work fine on the STM32F105 but not on the STM32F411. Below our configuration for ADC 'STM32F411': Results on the USART terminal:[ADC] Before: 0, Converted 0: 0
[ADC] Before: 0, Converted 1: 0
[ADC] u32ConvertedVal: 0
2018-04-10 03:47 PM
The code fragment won't compile and doesn't provide any output. Number of settings don't look right/workable.
If you have multiple channels wouldn't you have to get the ADC to scan them? Where are the data structures, or the code to printf() to the USART?
The thing with static code analysis is to show enough detail to be worth looking at.
2018-04-11 11:11 PM
Thanks for your help.
Problem resolved by updating the settings of ADC.