Problem with ADC on custom board
Hello.
I have a problem with the ADC on the custom board with the STM32WB55 chip. I am using a divider and should get something around 2V, but I always get the maximum value - 4095.
I am using this code that I saw in the ST examples.
HAL_GPIO_WritePin(ADC_OUT_GPIO_Port, ADC_OUT_Pin, GPIO_PIN_SET);
HAL_Delay(50);
if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED) != HAL_OK)
{
Error_Handler();
}
if (HAL_ADC_Start_DMA(&hadc1, (uint32_t*)aADCxConvertedData, BATTERY_ARRAY_SIZE) != HAL_OK) {
HAL_GPIO_WritePin(ADC_OUT_GPIO_Port, ADC_OUT_Pin, GPIO_PIN_RESET);
Error_Handler();
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
if(hadc->Instance == ADC1) {
if (HAL_ADC_Stop_DMA(&hadc1) != HAL_OK) {
Error_Handler();
}
HAL_GPIO_WritePin(ADC_OUT_GPIO_Port, ADC_OUT_Pin, GPIO_PIN_RESET);
uint32_t sum_mv = 0;
for (uint32_t i = 0; i < BATTERY_ARRAY_SIZE; i++) {
aADCxConvertedData_Voltage_mVolt[i] = __ADC_CALC_DATA_VOLTAGE(VDDA_APPLI, aADCxConvertedData[i]);
sum_mv += aADCxConvertedData_Voltage_mVolt[i];
}
uint16_t avg_mv = sum_mv / BATTERY_ARRAY_SIZE;
ubDmaTransferStatus = 1;
}
}I put a breakpoint on ubDmaTransferStatus and see what it measures.
I use this same code on the nucleo board by shorting PC1 and PC0 with a wire and seeing normal results, around 3294-3296 mV.
This is not a hardware problem, I measured the output of the divider on the pin with an oscilloscope and saw around 2V. I also tested it on two devices.
I attach a project that works with nucleo, maybe this will help somehow.
Please help me.
Regards.
