cancel
Showing results for 
Search instead for 
Did you mean: 

STM32WLE5C8U6 ADC wont start

Nando
Associate

I've been stuck trying setting up an ADC pin on an STM32WLE5C8U6 MCU for several days. Although I'm new to the ST environment, I have experience setting up ADC pins on other F series chips without any issues. Am I possibly overlooking something? According to the documentation, it appears that setting up the ADC should be even simpler on the STM32WLE5. Any guidance would be greatly appreciated.

#include "stm32wle5xx.h" void ADC_Init(void) { // Enable GPIOB clock RCC->AHB2ENR |= (1U<<1); // Enable ADC clock RCC->APB2ENR |= (1U<<9); // Breakpoint here to check if ADC clock is enabled // Configure PB4 as an analog input GPIOB->MODER &= ~(3U << (2 * 4)); // Clear mode for PB4 GPIOB->MODER |= (3U << (2 * 4)); // Set PB4 to analog mode // Ensure ADC is disabled before starting configuration if (ADC->CR & (1U<<0)) { ADC->CR |= (1U<<1); while (ADC->CR & (1U<<1)); } // Breakpoint here to check if ADC is disabled // Enable the ADC voltage regulator ADC->CR |= (1U<<28); for (volatile uint32_t i = 0; i < 10000; i++); // Delay for voltage regulator // Breakpoint here to check if voltage regulator is enabled // Calibrate the ADC //ADC->CR |= (1U<<31); // Start calibration //while (ADC->CR & (1U<<31)); // Wait for calibration to complete //execution gets stuck here. If I skip calibration, execution gets stuck in the next while() // Breakpoint here to check if calibration is complete // Configure the ADC ADC->CFGR1 |= (1U<<3); // 10-bit resolution ADC->CHSELR = (1U<<4); // Select channel for PB4 // Enable the ADC ADC->CR |= (1U<<0); // Enable ADC while (!(ADC->ISR & (1U<<0))); // Wait until ADC is ready // Breakpoint here to check if ADC is ready } uint16_t ADC_Read(void) { ADC->CR |= ADC_CR_ADEN; ADC->CR |= ADC_CR_ADSTART; // Start conversion while (!(ADC->ISR & ADC_ISR_EOC)); // Wait for conversion to complete return ADC->DR; // Read the ADC value } uint16_t adcValue = 0; int main(void) { ADC_Init(); adcValue = ADC_Read(); // Use adc_value as needed while (1); }
View more

 

1 REPLY 1
STTwo-32
ST Employee

Hello @Nando 

I suggest you follow the configurations of this examples to implement an ADC configuration on your STM32WL MCU.

Best Regards.

STTwo-32 

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.