@@ -155,7 +155,7 @@ static rt_err_t stm32_adc_enabled(struct rt_adc_device *device, rt_int8_t channe
155155 return - RT_EINVAL ;
156156 }
157157
158- #if defined(SOC_SERIES_STM32MP1 ) || defined (SOC_SERIES_STM32H7 ) || defined (SOC_SERIES_STM32WB )
158+ #if defined(SOC_SERIES_STM32MP1 ) || defined (SOC_SERIES_STM32H7 ) || defined (SOC_SERIES_STM32WB ) || defined( SOC_SERIES_STM32U5 )
159159 ADC_ChanConf .Rank = ADC_REGULAR_RANK_1 ;
160160#else
161161 ADC_ChanConf .Rank = 1 ;
@@ -173,6 +173,8 @@ static rt_err_t stm32_adc_enabled(struct rt_adc_device *device, rt_int8_t channe
173173 ADC_ChanConf .SamplingTime = ADC_SAMPLETIME_810CYCLES_5 ;
174174#elif defined(SOC_SERIES_STM32H7 )
175175 ADC_ChanConf .SamplingTime = ADC_SAMPLETIME_810CYCLES_5 ;
176+ #elif defined(SOC_SERIES_STM32U5 )
177+ ADC_ChanConf .SamplingTime = ADC_SAMPLETIME_814CYCLES ;
176178 #elif defined (SOC_SERIES_STM32WB )
177179 ADC_ChanConf .SamplingTime = ADC_SAMPLETIME_2CYCLES_5 ;
178180#endif
@@ -184,11 +186,18 @@ static rt_err_t stm32_adc_enabled(struct rt_adc_device *device, rt_int8_t channe
184186#if defined(SOC_SERIES_STM32L4 )
185187 ADC_ChanConf .OffsetNumber = ADC_OFFSET_NONE ;
186188 ADC_ChanConf .SingleDiff = LL_ADC_SINGLE_ENDED ;
187- #elif defined(SOC_SERIES_STM32MP1 ) || defined(SOC_SERIES_STM32H7 ) || defined (SOC_SERIES_STM32WB )
189+ #elif defined(SOC_SERIES_STM32MP1 ) || defined(SOC_SERIES_STM32H7 ) || defined (SOC_SERIES_STM32WB ) || defined( SOC_SERIES_STM32U5 )
188190 ADC_ChanConf .OffsetNumber = ADC_OFFSET_NONE ; /* ADC channel affected to offset number */
189191 ADC_ChanConf .Offset = 0 ;
190192 ADC_ChanConf .SingleDiff = ADC_SINGLE_ENDED ; /* ADC channel differential mode */
191193#endif
194+
195+ /* enable the analog power domain before configuring channel */
196+ #if defined(SOC_SERIES_STM32U5 )
197+ __HAL_RCC_PWR_CLK_ENABLE ();
198+ HAL_PWREx_EnableVddA ();
199+ #endif /* defined(SOC_SERIES_STM32U5) */
200+
192201 if (HAL_ADC_ConfigChannel (stm32_adc_handler , & ADC_ChanConf ) != HAL_OK )
193202 {
194203 LOG_E ("Failed to configure ADC channel %d" , channel );
@@ -201,7 +210,7 @@ static rt_err_t stm32_adc_enabled(struct rt_adc_device *device, rt_int8_t channe
201210 LOG_E ("ADC calibration error!\n" );
202211 return - RT_ERROR ;
203212 }
204- #elif defined(SOC_SERIES_STM32MP1 ) || defined(SOC_SERIES_STM32H7 )
213+ #elif defined(SOC_SERIES_STM32MP1 ) || defined(SOC_SERIES_STM32H7 ) || defined( SOC_SERIES_STM32U5 )
205214 /* Run the ADC linear calibration in single-ended mode */
206215 if (HAL_ADCEx_Calibration_Start (stm32_adc_handler , ADC_CALIB_OFFSET_LINEARITY , ADC_ChanConf .SingleDiff ) != HAL_OK )
207216 {
@@ -234,19 +243,21 @@ static rt_uint8_t stm32_adc_get_resolution(struct rt_adc_device *device)
234243#ifdef SOC_SERIES_STM32H7
235244 case ADC_RESOLUTION_16B :
236245 return 16 ;
246+ #endif /* SOC_SERIES_STM32H7 */
247+ #if defined(SOC_SERIES_STM32H7 ) || defined(SOC_SERIES_STM32U5 )
237248 case ADC_RESOLUTION_14B :
238249 return 14 ;
239- #endif /* SOC_SERIES_STM32H7 */
250+ #endif /* defined( SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32U5) */
240251 case ADC_RESOLUTION_12B :
241252 return 12 ;
242253 case ADC_RESOLUTION_10B :
243254 return 10 ;
244255 case ADC_RESOLUTION_8B :
245256 return 8 ;
246- #ifndef SOC_SERIES_STM32H7
257+ #if defined( SOC_SERIES_STM32H7 ) || defined( SOC_SERIES_STM32U5 )
247258 case ADC_RESOLUTION_6B :
248259 return 6 ;
249- #endif /* SOC_SERIES_STM32H7 */
260+ #endif /* defined( SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32U5) */
250261 default :
251262 return 0 ;
252263 }
0 commit comments