Skip to content

Commit 96207d4

Browse files
zst123mysterywolf
authored andcommitted
[bsp][stm32u575] add ADC support
1 parent 5a07d13 commit 96207d4

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

bsp/stm32/libraries/HAL_Drivers/drv_adc.c

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)