File indexing completed on 2025-05-11 08:23:06
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033 #include "stm32h7xx_hal.h"
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045 #ifdef HAL_ADC_MODULE_ENABLED
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055 #define ADC_JSQR_FIELDS ((ADC_JSQR_JL | ADC_JSQR_JEXTSEL | ADC_JSQR_JEXTEN |\
0056 ADC_JSQR_JSQ1 | ADC_JSQR_JSQ2 |\
0057 ADC_JSQR_JSQ3 | ADC_JSQR_JSQ4 ))
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069 #define ADC_CALIBRATION_TIMEOUT (633600000U)
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130 HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc, uint32_t CalibrationMode, uint32_t SingleDiff)
0131 {
0132 HAL_StatusTypeDef tmp_hal_status;
0133 __IO uint32_t wait_loop_index = 0UL;
0134
0135
0136 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
0137 assert_param(IS_ADC_SINGLE_DIFFERENTIAL(SingleDiff));
0138
0139
0140 __HAL_LOCK(hadc);
0141
0142
0143
0144
0145 tmp_hal_status = ADC_Disable(hadc);
0146
0147
0148 if (tmp_hal_status == HAL_OK)
0149 {
0150
0151 ADC_STATE_CLR_SET(hadc->State,
0152 HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY,
0153 HAL_ADC_STATE_BUSY_INTERNAL);
0154
0155
0156 LL_ADC_StartCalibration(hadc->Instance, CalibrationMode, SingleDiff);
0157
0158
0159 while (LL_ADC_IsCalibrationOnGoing(hadc->Instance) != 0UL)
0160 {
0161 wait_loop_index++;
0162 if (wait_loop_index >= ADC_CALIBRATION_TIMEOUT)
0163 {
0164
0165 ADC_STATE_CLR_SET(hadc->State,
0166 HAL_ADC_STATE_BUSY_INTERNAL,
0167 HAL_ADC_STATE_ERROR_INTERNAL);
0168
0169
0170 __HAL_UNLOCK(hadc);
0171
0172 return HAL_ERROR;
0173 }
0174 }
0175
0176
0177 ADC_STATE_CLR_SET(hadc->State,
0178 HAL_ADC_STATE_BUSY_INTERNAL,
0179 HAL_ADC_STATE_READY);
0180 }
0181 else
0182 {
0183 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
0184
0185
0186
0187 }
0188
0189
0190 __HAL_UNLOCK(hadc);
0191
0192
0193 return tmp_hal_status;
0194 }
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204 uint32_t HAL_ADCEx_Calibration_GetValue(ADC_HandleTypeDef *hadc, uint32_t SingleDiff)
0205 {
0206
0207 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
0208 assert_param(IS_ADC_SINGLE_DIFFERENTIAL(SingleDiff));
0209
0210
0211 return LL_ADC_GetCalibrationOffsetFactor(hadc->Instance, SingleDiff);
0212 }
0213
0214
0215
0216
0217
0218
0219
0220 HAL_StatusTypeDef HAL_ADCEx_LinearCalibration_GetValue(ADC_HandleTypeDef *hadc, uint32_t *LinearCalib_Buffer)
0221 {
0222 uint32_t cnt;
0223 HAL_StatusTypeDef tmp_hal_status = HAL_OK;
0224 uint32_t temp_REG_IsConversionOngoing = 0UL;
0225
0226
0227 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
0228
0229
0230 if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
0231 {
0232 tmp_hal_status = ADC_Enable(hadc);
0233 }
0234
0235 if (tmp_hal_status == HAL_OK)
0236 {
0237 if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) != 0UL)
0238 {
0239 LL_ADC_REG_StopConversion(hadc->Instance);
0240 temp_REG_IsConversionOngoing = 1UL;
0241 }
0242 for (cnt = ADC_LINEAR_CALIB_REG_COUNT; cnt > 0UL; cnt--)
0243 {
0244 LinearCalib_Buffer[cnt - 1U] = LL_ADC_GetCalibrationLinearFactor(hadc->Instance, ADC_CR_LINCALRDYW6 >> (ADC_LINEAR_CALIB_REG_COUNT - cnt));
0245 }
0246 if (temp_REG_IsConversionOngoing != 0UL)
0247 {
0248 LL_ADC_REG_StartConversion(hadc->Instance);
0249 }
0250 }
0251
0252 return tmp_hal_status;
0253 }
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267 HAL_StatusTypeDef HAL_ADCEx_Calibration_SetValue(ADC_HandleTypeDef *hadc, uint32_t SingleDiff, uint32_t CalibrationFactor)
0268 {
0269 HAL_StatusTypeDef tmp_hal_status = HAL_OK;
0270 uint32_t tmp_adc_is_conversion_on_going_regular;
0271 uint32_t tmp_adc_is_conversion_on_going_injected;
0272
0273
0274 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
0275 assert_param(IS_ADC_SINGLE_DIFFERENTIAL(SingleDiff));
0276
0277 #if defined(ADC_VER_V5_V90)
0278 if (hadc->Instance == ADC3)
0279 {
0280 assert_param(IS_ADC_CALFACT_ADC3(CalibrationFactor));
0281 }
0282 else
0283 {
0284 assert_param(IS_ADC_CALFACT(CalibrationFactor));
0285 }
0286 #else
0287 assert_param(IS_ADC_CALFACT(CalibrationFactor));
0288 #endif
0289
0290
0291 __HAL_LOCK(hadc);
0292
0293
0294
0295 tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
0296 tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
0297
0298 if ((LL_ADC_IsEnabled(hadc->Instance) != 0UL)
0299 && (tmp_adc_is_conversion_on_going_regular == 0UL)
0300 && (tmp_adc_is_conversion_on_going_injected == 0UL)
0301 )
0302 {
0303
0304 LL_ADC_SetCalibrationOffsetFactor(hadc->Instance, SingleDiff, CalibrationFactor);
0305 }
0306 else
0307 {
0308
0309 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
0310
0311 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
0312
0313
0314 tmp_hal_status = HAL_ERROR;
0315 }
0316
0317
0318 __HAL_UNLOCK(hadc);
0319
0320
0321 return tmp_hal_status;
0322 }
0323
0324
0325
0326
0327
0328
0329
0330 HAL_StatusTypeDef HAL_ADCEx_LinearCalibration_SetValue(ADC_HandleTypeDef *hadc, uint32_t *LinearCalib_Buffer)
0331 {
0332 uint32_t cnt;
0333 __IO uint32_t wait_loop_index = 0;
0334 uint32_t temp_REG_IsConversionOngoing = 0UL;
0335
0336
0337 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
0338
0339
0340
0341 if (HAL_IS_BIT_SET(hadc->Instance->CR, ADC_CR_DEEPPWD))
0342 {
0343
0344 CLEAR_BIT(hadc->Instance->CR, ADC_CR_DEEPPWD);
0345
0346
0347
0348
0349 }
0350
0351
0352 if (HAL_IS_BIT_CLR(hadc->Instance->CR, ADC_CR_ADVREGEN))
0353 {
0354
0355 SET_BIT(hadc->Instance->CR, ADC_CR_ADVREGEN);
0356
0357
0358
0359
0360 wait_loop_index = ((ADC_STAB_DELAY_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
0361 while (wait_loop_index != 0UL)
0362 {
0363 wait_loop_index--;
0364 }
0365 }
0366
0367
0368
0369
0370
0371 if (HAL_IS_BIT_CLR(hadc->Instance->CR, ADC_CR_ADVREGEN))
0372 {
0373
0374 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
0375
0376
0377 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
0378
0379 return HAL_ERROR;
0380 }
0381
0382 if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
0383 {
0384 if (ADC_Enable(hadc) != HAL_OK)
0385 {
0386 return HAL_ERROR;
0387 }
0388 else
0389 {
0390 for (cnt = ADC_LINEAR_CALIB_REG_COUNT; cnt > 0UL ; cnt--)
0391 {
0392 LL_ADC_SetCalibrationLinearFactor(hadc->Instance, ADC_CR_LINCALRDYW6 >> (ADC_LINEAR_CALIB_REG_COUNT - cnt), LinearCalib_Buffer[cnt - 1U]);
0393 }
0394 (void)ADC_Disable(hadc);
0395 }
0396 }
0397 else
0398 {
0399 if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) != 0UL)
0400 {
0401 LL_ADC_REG_StopConversion(hadc->Instance);
0402 temp_REG_IsConversionOngoing = 1UL;
0403 }
0404 for (cnt = ADC_LINEAR_CALIB_REG_COUNT; cnt > 0UL ; cnt--)
0405 {
0406 LL_ADC_SetCalibrationLinearFactor(hadc->Instance, ADC_CR_LINCALRDYW6 >> (ADC_LINEAR_CALIB_REG_COUNT - cnt), LinearCalib_Buffer[cnt - 1U]);
0407 }
0408 if (temp_REG_IsConversionOngoing != 0UL)
0409 {
0410 LL_ADC_REG_StartConversion(hadc->Instance);
0411 }
0412 }
0413 return HAL_OK;
0414 }
0415
0416
0417
0418
0419
0420
0421 HAL_StatusTypeDef HAL_ADCEx_LinearCalibration_FactorLoad(ADC_HandleTypeDef *hadc)
0422 {
0423 HAL_StatusTypeDef tmp_hal_status = HAL_OK;
0424 uint32_t cnt, FactorOffset;
0425 uint32_t LinearCalib_Buffer[ADC_LINEAR_CALIB_REG_COUNT];
0426
0427
0428
0429
0430
0431 if (hadc->Instance == ADC1)
0432 {
0433 FactorOffset = 0UL;
0434 }
0435 else if (hadc->Instance == ADC2)
0436 {
0437 FactorOffset = 8UL;
0438 }
0439 else
0440 {
0441 FactorOffset = 16UL;
0442 }
0443
0444 for (cnt = 0UL; cnt < ADC_LINEAR_CALIB_REG_COUNT; cnt++)
0445 {
0446 LinearCalib_Buffer[cnt] = *(uint32_t *)(ADC_LINEAR_CALIB_REG_1_ADDR + FactorOffset + cnt);
0447 }
0448 if (HAL_ADCEx_LinearCalibration_SetValue(hadc, (uint32_t *)LinearCalib_Buffer) != HAL_OK)
0449 {
0450 tmp_hal_status = HAL_ERROR;
0451 }
0452
0453 return tmp_hal_status;
0454 }
0455
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467 HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef *hadc)
0468 {
0469 HAL_StatusTypeDef tmp_hal_status;
0470 uint32_t tmp_config_injected_queue;
0471 uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
0472
0473
0474 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
0475
0476 if (LL_ADC_INJ_IsConversionOngoing(hadc->Instance) != 0UL)
0477 {
0478 return HAL_BUSY;
0479 }
0480 else
0481 {
0482
0483
0484
0485
0486
0487
0488
0489 tmp_config_injected_queue = READ_BIT(hadc->Instance->CFGR, ADC_CFGR_JQDIS);
0490
0491 if ((READ_BIT(hadc->Instance->JSQR, ADC_JSQR_JEXTEN) == 0UL)
0492 && (tmp_config_injected_queue == 0UL)
0493 )
0494 {
0495 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
0496 return HAL_ERROR;
0497 }
0498
0499
0500 __HAL_LOCK(hadc);
0501
0502
0503 tmp_hal_status = ADC_Enable(hadc);
0504
0505
0506 if (tmp_hal_status == HAL_OK)
0507 {
0508
0509 if ((hadc->State & HAL_ADC_STATE_REG_BUSY) != 0UL)
0510 {
0511
0512 CLEAR_BIT(hadc->ErrorCode, HAL_ADC_ERROR_JQOVF);
0513 }
0514 else
0515 {
0516
0517 ADC_CLEAR_ERRORCODE(hadc);
0518 }
0519
0520
0521
0522
0523 ADC_STATE_CLR_SET(hadc->State,
0524 HAL_ADC_STATE_READY | HAL_ADC_STATE_INJ_EOC,
0525 HAL_ADC_STATE_INJ_BUSY);
0526
0527
0528
0529
0530 if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
0531 || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
0532 )
0533 {
0534 CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);
0535 }
0536
0537
0538
0539 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_JEOC | ADC_FLAG_JEOS));
0540
0541
0542
0543
0544 __HAL_UNLOCK(hadc);
0545
0546
0547
0548
0549
0550
0551
0552
0553
0554
0555
0556
0557
0558 if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
0559 || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
0560 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_REG_SIMULT)
0561 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_REG_INTERL)
0562 )
0563 {
0564
0565 if (LL_ADC_INJ_GetTrigAuto(hadc->Instance) == LL_ADC_INJ_TRIG_INDEPENDENT)
0566 {
0567 LL_ADC_INJ_StartConversion(hadc->Instance);
0568 }
0569 }
0570 else
0571 {
0572
0573 SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);
0574 }
0575
0576 }
0577 else
0578 {
0579
0580 __HAL_UNLOCK(hadc);
0581 }
0582
0583
0584 return tmp_hal_status;
0585 }
0586 }
0587
0588
0589
0590
0591
0592
0593
0594
0595
0596
0597
0598
0599
0600
0601
0602
0603
0604 HAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef *hadc)
0605 {
0606 HAL_StatusTypeDef tmp_hal_status;
0607
0608
0609 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
0610
0611
0612 __HAL_LOCK(hadc);
0613
0614
0615 tmp_hal_status = ADC_ConversionStop(hadc, ADC_INJECTED_GROUP);
0616
0617
0618
0619 if (tmp_hal_status == HAL_OK)
0620 {
0621 if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
0622 {
0623
0624 tmp_hal_status = ADC_Disable(hadc);
0625
0626
0627 if (tmp_hal_status == HAL_OK)
0628 {
0629
0630 ADC_STATE_CLR_SET(hadc->State,
0631 HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY,
0632 HAL_ADC_STATE_READY);
0633 }
0634 }
0635
0636
0637 else
0638 {
0639
0640 CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY);
0641 }
0642 }
0643
0644
0645 __HAL_UNLOCK(hadc);
0646
0647
0648 return tmp_hal_status;
0649 }
0650
0651
0652
0653
0654
0655
0656
0657
0658
0659 HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout)
0660 {
0661 uint32_t tickstart;
0662 uint32_t tmp_Flag_End;
0663 uint32_t tmp_adc_inj_is_trigger_source_sw_start;
0664 uint32_t tmp_adc_reg_is_trigger_source_sw_start;
0665 uint32_t tmp_cfgr;
0666 const ADC_TypeDef *tmpADC_Master;
0667 uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
0668
0669
0670 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
0671
0672
0673 if (hadc->Init.EOCSelection == ADC_EOC_SEQ_CONV)
0674 {
0675 tmp_Flag_End = ADC_FLAG_JEOS;
0676 }
0677 else
0678 {
0679 tmp_Flag_End = ADC_FLAG_JEOC;
0680 }
0681
0682
0683 tickstart = HAL_GetTick();
0684
0685
0686 while ((hadc->Instance->ISR & tmp_Flag_End) == 0UL)
0687 {
0688
0689 if (Timeout != HAL_MAX_DELAY)
0690 {
0691 if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0UL))
0692 {
0693 if((hadc->Instance->ISR & tmp_Flag_End) == 0UL)
0694 {
0695
0696 SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);
0697
0698
0699 __HAL_UNLOCK(hadc);
0700
0701 return HAL_TIMEOUT;
0702 }
0703 }
0704 }
0705 }
0706
0707
0708 tmp_adc_inj_is_trigger_source_sw_start = LL_ADC_INJ_IsTriggerSourceSWStart(hadc->Instance);
0709 tmp_adc_reg_is_trigger_source_sw_start = LL_ADC_REG_IsTriggerSourceSWStart(hadc->Instance);
0710
0711
0712
0713 if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
0714 || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
0715 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_REG_SIMULT)
0716 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_REG_INTERL)
0717 )
0718 {
0719 tmp_cfgr = READ_REG(hadc->Instance->CFGR);
0720 }
0721 else
0722 {
0723 tmpADC_Master = __LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance);
0724 tmp_cfgr = READ_REG(tmpADC_Master->CFGR);
0725 }
0726
0727
0728 SET_BIT(hadc->State, HAL_ADC_STATE_INJ_EOC);
0729
0730
0731
0732
0733 if ((tmp_adc_inj_is_trigger_source_sw_start != 0UL) ||
0734 ((READ_BIT(tmp_cfgr, ADC_CFGR_JAUTO) == 0UL) &&
0735 ((tmp_adc_reg_is_trigger_source_sw_start != 0UL) &&
0736 (READ_BIT(tmp_cfgr, ADC_CFGR_CONT) == 0UL))))
0737 {
0738
0739 if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_JEOS))
0740 {
0741
0742
0743
0744
0745
0746
0747 if (READ_BIT(tmp_cfgr, ADC_CFGR_JQM) == 0UL)
0748 {
0749
0750 CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY);
0751
0752 if ((hadc->State & HAL_ADC_STATE_REG_BUSY) == 0UL)
0753 {
0754 SET_BIT(hadc->State, HAL_ADC_STATE_READY);
0755 }
0756 }
0757 }
0758 }
0759
0760
0761 if (tmp_Flag_End == ADC_FLAG_JEOS)
0762 {
0763
0764
0765
0766
0767 if (READ_BIT(tmp_cfgr, ADC_CFGR_AUTDLY) == 0UL)
0768 {
0769 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_JEOC | ADC_FLAG_JEOS));
0770 }
0771 }
0772 else
0773 {
0774 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOC);
0775 }
0776
0777
0778 return HAL_OK;
0779 }
0780
0781
0782
0783
0784
0785
0786
0787
0788
0789
0790
0791
0792
0793 HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef *hadc)
0794 {
0795 HAL_StatusTypeDef tmp_hal_status;
0796 uint32_t tmp_config_injected_queue;
0797 uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
0798
0799
0800 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
0801
0802 if (LL_ADC_INJ_IsConversionOngoing(hadc->Instance) != 0UL)
0803 {
0804 return HAL_BUSY;
0805 }
0806 else
0807 {
0808
0809
0810
0811
0812
0813
0814
0815 tmp_config_injected_queue = READ_BIT(hadc->Instance->CFGR, ADC_CFGR_JQDIS);
0816
0817 if ((READ_BIT(hadc->Instance->JSQR, ADC_JSQR_JEXTEN) == 0UL)
0818 && (tmp_config_injected_queue == 0UL)
0819 )
0820 {
0821 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
0822 return HAL_ERROR;
0823 }
0824
0825
0826 __HAL_LOCK(hadc);
0827
0828
0829 tmp_hal_status = ADC_Enable(hadc);
0830
0831
0832 if (tmp_hal_status == HAL_OK)
0833 {
0834
0835 if ((hadc->State & HAL_ADC_STATE_REG_BUSY) != 0UL)
0836 {
0837
0838 CLEAR_BIT(hadc->ErrorCode, HAL_ADC_ERROR_JQOVF);
0839 }
0840 else
0841 {
0842
0843 ADC_CLEAR_ERRORCODE(hadc);
0844 }
0845
0846
0847
0848
0849 ADC_STATE_CLR_SET(hadc->State,
0850 HAL_ADC_STATE_READY | HAL_ADC_STATE_INJ_EOC,
0851 HAL_ADC_STATE_INJ_BUSY);
0852
0853
0854
0855
0856 if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
0857 || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
0858 )
0859 {
0860 CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);
0861 }
0862
0863
0864
0865 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_JEOC | ADC_FLAG_JEOS));
0866
0867
0868
0869
0870 __HAL_UNLOCK(hadc);
0871
0872
0873
0874 if ((hadc->Instance->CFGR & ADC_CFGR_JQM) != 0UL)
0875 {
0876 __HAL_ADC_ENABLE_IT(hadc, ADC_FLAG_JQOVF);
0877 }
0878
0879
0880 switch (hadc->Init.EOCSelection)
0881 {
0882 case ADC_EOC_SEQ_CONV:
0883 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC);
0884 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOS);
0885 break;
0886
0887 default:
0888 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOS);
0889 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOC);
0890 break;
0891 }
0892
0893
0894
0895
0896
0897
0898
0899
0900
0901
0902
0903
0904
0905 if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
0906 || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
0907 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_REG_SIMULT)
0908 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_REG_INTERL)
0909 )
0910 {
0911
0912 if (LL_ADC_INJ_GetTrigAuto(hadc->Instance) == LL_ADC_INJ_TRIG_INDEPENDENT)
0913 {
0914 LL_ADC_INJ_StartConversion(hadc->Instance);
0915 }
0916 }
0917 else
0918 {
0919
0920 SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);
0921 }
0922
0923 }
0924 else
0925 {
0926
0927 __HAL_UNLOCK(hadc);
0928 }
0929
0930
0931 return tmp_hal_status;
0932 }
0933 }
0934
0935
0936
0937
0938
0939
0940
0941
0942
0943
0944
0945
0946
0947
0948
0949
0950
0951
0952
0953
0954 HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef *hadc)
0955 {
0956 HAL_StatusTypeDef tmp_hal_status;
0957
0958
0959 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
0960
0961
0962 __HAL_LOCK(hadc);
0963
0964
0965 tmp_hal_status = ADC_ConversionStop(hadc, ADC_INJECTED_GROUP);
0966
0967
0968
0969
0970 if (tmp_hal_status == HAL_OK)
0971 {
0972
0973 __HAL_ADC_DISABLE_IT(hadc, (ADC_IT_JEOC | ADC_IT_JEOS | ADC_FLAG_JQOVF));
0974
0975 if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
0976 {
0977
0978 tmp_hal_status = ADC_Disable(hadc);
0979
0980
0981 if (tmp_hal_status == HAL_OK)
0982 {
0983
0984 ADC_STATE_CLR_SET(hadc->State,
0985 HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY,
0986 HAL_ADC_STATE_READY);
0987 }
0988 }
0989
0990
0991 else
0992 {
0993
0994 CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY);
0995 }
0996 }
0997
0998
0999 __HAL_UNLOCK(hadc);
1000
1001
1002 return tmp_hal_status;
1003 }
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023 HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length)
1024 {
1025 HAL_StatusTypeDef tmp_hal_status;
1026 ADC_HandleTypeDef tmphadcSlave;
1027 ADC_Common_TypeDef *tmpADC_Common;
1028
1029
1030 assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));
1031 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));
1032 assert_param(IS_ADC_EXTTRIG_EDGE(hadc->Init.ExternalTrigConvEdge));
1033
1034 if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) != 0UL)
1035 {
1036 return HAL_BUSY;
1037 }
1038 else
1039 {
1040
1041 __HAL_LOCK(hadc);
1042
1043
1044
1045 if (__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) != hadc->Instance)
1046 {
1047
1048 tmp_hal_status = ADC_Enable(hadc);
1049 }
1050 else
1051 {
1052 tmphadcSlave.State = HAL_ADC_STATE_RESET;
1053 tmphadcSlave.ErrorCode = HAL_ADC_ERROR_NONE;
1054
1055 ADC_MULTI_SLAVE(hadc, &tmphadcSlave);
1056
1057 if (tmphadcSlave.Instance == NULL)
1058 {
1059
1060 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
1061
1062
1063 __HAL_UNLOCK(hadc);
1064
1065 return HAL_ERROR;
1066 }
1067
1068
1069
1070 tmp_hal_status = ADC_Enable(hadc);
1071 if (tmp_hal_status == HAL_OK)
1072 {
1073 tmp_hal_status = ADC_Enable(&tmphadcSlave);
1074 }
1075 }
1076
1077
1078 if (tmp_hal_status == HAL_OK)
1079 {
1080
1081 ADC_STATE_CLR_SET(hadc->State,
1082 (HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP),
1083 HAL_ADC_STATE_REG_BUSY);
1084
1085
1086 ADC_CLEAR_ERRORCODE(hadc);
1087
1088
1089 hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt;
1090
1091
1092 hadc->DMA_Handle->XferHalfCpltCallback = ADC_DMAHalfConvCplt;
1093
1094
1095 hadc->DMA_Handle->XferErrorCallback = ADC_DMAError ;
1096
1097
1098
1099
1100
1101
1102 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR));
1103
1104
1105
1106
1107 __HAL_UNLOCK(hadc);
1108
1109
1110 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR);
1111
1112
1113
1114 if (__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) != hadc->Instance)
1115 {
1116
1117
1118 tmp_hal_status = HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length);
1119 }
1120 else
1121 {
1122
1123 tmpADC_Common = __LL_ADC_COMMON_INSTANCE(hadc->Instance);
1124
1125
1126 tmp_hal_status = HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&tmpADC_Common->CDR, (uint32_t)pData, Length);
1127
1128
1129
1130
1131
1132
1133 LL_ADC_REG_StartConversion(hadc->Instance);
1134 }
1135 }
1136 else
1137 {
1138
1139 __HAL_UNLOCK(hadc);
1140 }
1141
1142
1143 return tmp_hal_status;
1144 }
1145 }
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160 HAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef *hadc)
1161 {
1162 HAL_StatusTypeDef tmp_hal_status;
1163 uint32_t tickstart;
1164 ADC_HandleTypeDef tmphadcSlave;
1165 uint32_t tmphadcSlave_conversion_on_going;
1166 HAL_StatusTypeDef tmphadcSlave_disable_status;
1167
1168
1169 assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));
1170
1171
1172 __HAL_LOCK(hadc);
1173
1174
1175
1176 tmp_hal_status = ADC_ConversionStop(hadc, ADC_REGULAR_INJECTED_GROUP);
1177
1178
1179 if (tmp_hal_status == HAL_OK)
1180 {
1181 tmphadcSlave.State = HAL_ADC_STATE_RESET;
1182 tmphadcSlave.ErrorCode = HAL_ADC_ERROR_NONE;
1183
1184
1185 ADC_MULTI_SLAVE(hadc, &tmphadcSlave);
1186
1187 if (tmphadcSlave.Instance == NULL)
1188 {
1189
1190 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
1191
1192
1193 __HAL_UNLOCK(hadc);
1194
1195 return HAL_ERROR;
1196 }
1197
1198
1199
1200
1201
1202 tickstart = HAL_GetTick();
1203
1204 tmphadcSlave_conversion_on_going = LL_ADC_REG_IsConversionOngoing((&tmphadcSlave)->Instance);
1205 while ((LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 1UL)
1206 || (tmphadcSlave_conversion_on_going == 1UL)
1207 )
1208 {
1209 if ((HAL_GetTick() - tickstart) > ADC_STOP_CONVERSION_TIMEOUT)
1210 {
1211
1212 tmphadcSlave_conversion_on_going = LL_ADC_REG_IsConversionOngoing((&tmphadcSlave)->Instance);
1213
1214 if((LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 1UL)
1215 || (tmphadcSlave_conversion_on_going == 1UL)
1216 )
1217 {
1218
1219 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
1220
1221
1222 __HAL_UNLOCK(hadc);
1223
1224 return HAL_ERROR;
1225 }
1226 }
1227
1228 tmphadcSlave_conversion_on_going = LL_ADC_REG_IsConversionOngoing((&tmphadcSlave)->Instance);
1229 }
1230
1231
1232
1233
1234
1235 tmp_hal_status = HAL_DMA_Abort(hadc->DMA_Handle);
1236
1237
1238 if (tmp_hal_status == HAL_ERROR)
1239 {
1240
1241 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA);
1242 }
1243
1244
1245 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_OVR);
1246
1247
1248
1249
1250 if (tmp_hal_status == HAL_OK)
1251 {
1252 tmphadcSlave_disable_status = ADC_Disable(&tmphadcSlave);
1253 if ((ADC_Disable(hadc) == HAL_OK) &&
1254 (tmphadcSlave_disable_status == HAL_OK))
1255 {
1256 tmp_hal_status = HAL_OK;
1257 }
1258 }
1259 else
1260 {
1261
1262 (void) ADC_Disable(hadc);
1263 (void) ADC_Disable(&tmphadcSlave);
1264 }
1265
1266
1267 ADC_STATE_CLR_SET(hadc->State,
1268 HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY,
1269 HAL_ADC_STATE_READY);
1270 }
1271
1272
1273 __HAL_UNLOCK(hadc);
1274
1275
1276 return tmp_hal_status;
1277 }
1278
1279
1280
1281
1282
1283
1284 uint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef *hadc)
1285 {
1286 const ADC_Common_TypeDef *tmpADC_Common;
1287
1288
1289 assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));
1290
1291
1292
1293 UNUSED(hadc);
1294
1295
1296 tmpADC_Common = __LL_ADC_COMMON_INSTANCE(hadc->Instance);
1297
1298
1299 return tmpADC_Common->CDR;
1300 }
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330 uint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef *hadc, uint32_t InjectedRank)
1331 {
1332 uint32_t tmp_jdr;
1333
1334
1335 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
1336 assert_param(IS_ADC_INJECTED_RANK(InjectedRank));
1337
1338
1339 switch (InjectedRank)
1340 {
1341 case ADC_INJECTED_RANK_4:
1342 tmp_jdr = hadc->Instance->JDR4;
1343 break;
1344 case ADC_INJECTED_RANK_3:
1345 tmp_jdr = hadc->Instance->JDR3;
1346 break;
1347 case ADC_INJECTED_RANK_2:
1348 tmp_jdr = hadc->Instance->JDR2;
1349 break;
1350 case ADC_INJECTED_RANK_1:
1351 default:
1352 tmp_jdr = hadc->Instance->JDR1;
1353 break;
1354 }
1355
1356
1357 return tmp_jdr;
1358 }
1359
1360
1361
1362
1363
1364
1365 __weak void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc)
1366 {
1367
1368 UNUSED(hadc);
1369
1370
1371
1372
1373 }
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384 __weak void HAL_ADCEx_InjectedQueueOverflowCallback(ADC_HandleTypeDef *hadc)
1385 {
1386
1387 UNUSED(hadc);
1388
1389
1390
1391
1392 }
1393
1394
1395
1396
1397
1398
1399 __weak void HAL_ADCEx_LevelOutOfWindow2Callback(ADC_HandleTypeDef *hadc)
1400 {
1401
1402 UNUSED(hadc);
1403
1404
1405
1406
1407 }
1408
1409
1410
1411
1412
1413
1414 __weak void HAL_ADCEx_LevelOutOfWindow3Callback(ADC_HandleTypeDef *hadc)
1415 {
1416
1417 UNUSED(hadc);
1418
1419
1420
1421
1422 }
1423
1424
1425
1426
1427
1428
1429
1430 __weak void HAL_ADCEx_EndOfSamplingCallback(ADC_HandleTypeDef *hadc)
1431 {
1432
1433 UNUSED(hadc);
1434
1435
1436
1437
1438 }
1439
1440
1441
1442
1443
1444
1445
1446
1447 HAL_StatusTypeDef HAL_ADCEx_RegularStop(ADC_HandleTypeDef *hadc)
1448 {
1449 HAL_StatusTypeDef tmp_hal_status;
1450
1451
1452 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
1453
1454
1455 __HAL_LOCK(hadc);
1456
1457
1458 tmp_hal_status = ADC_ConversionStop(hadc, ADC_REGULAR_GROUP);
1459
1460
1461
1462 if (tmp_hal_status == HAL_OK)
1463 {
1464
1465 CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
1466
1467 if (LL_ADC_INJ_IsConversionOngoing(hadc->Instance) == 0UL)
1468 {
1469
1470 tmp_hal_status = ADC_Disable(hadc);
1471
1472
1473 if (tmp_hal_status == HAL_OK)
1474 {
1475
1476 ADC_STATE_CLR_SET(hadc->State,
1477 HAL_ADC_STATE_INJ_BUSY,
1478 HAL_ADC_STATE_READY);
1479 }
1480 }
1481
1482
1483 else
1484 {
1485 SET_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY);
1486 }
1487 }
1488
1489
1490 __HAL_UNLOCK(hadc);
1491
1492
1493 return tmp_hal_status;
1494 }
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505 HAL_StatusTypeDef HAL_ADCEx_RegularStop_IT(ADC_HandleTypeDef *hadc)
1506 {
1507 HAL_StatusTypeDef tmp_hal_status;
1508
1509
1510 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
1511
1512
1513 __HAL_LOCK(hadc);
1514
1515
1516 tmp_hal_status = ADC_ConversionStop(hadc, ADC_REGULAR_GROUP);
1517
1518
1519
1520 if (tmp_hal_status == HAL_OK)
1521 {
1522
1523 CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
1524
1525
1526 __HAL_ADC_DISABLE_IT(hadc, (ADC_IT_EOC | ADC_IT_EOS | ADC_IT_OVR));
1527
1528
1529 if (LL_ADC_INJ_IsConversionOngoing(hadc->Instance) == 0UL)
1530 {
1531 tmp_hal_status = ADC_Disable(hadc);
1532
1533 if (tmp_hal_status == HAL_OK)
1534 {
1535
1536 ADC_STATE_CLR_SET(hadc->State,
1537 HAL_ADC_STATE_INJ_BUSY,
1538 HAL_ADC_STATE_READY);
1539 }
1540 }
1541 else
1542 {
1543 SET_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY);
1544 }
1545 }
1546
1547
1548 __HAL_UNLOCK(hadc);
1549
1550
1551 return tmp_hal_status;
1552 }
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565 HAL_StatusTypeDef HAL_ADCEx_RegularStop_DMA(ADC_HandleTypeDef *hadc)
1566 {
1567 HAL_StatusTypeDef tmp_hal_status;
1568
1569
1570 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
1571
1572
1573 __HAL_LOCK(hadc);
1574
1575
1576 tmp_hal_status = ADC_ConversionStop(hadc, ADC_REGULAR_GROUP);
1577
1578
1579
1580 if (tmp_hal_status == HAL_OK)
1581 {
1582
1583 CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
1584
1585
1586 MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_DMNGT_0 | ADC_CFGR_DMNGT_1, 0UL);
1587
1588
1589
1590 tmp_hal_status = HAL_DMA_Abort(hadc->DMA_Handle);
1591
1592
1593 if (tmp_hal_status != HAL_OK)
1594 {
1595
1596 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA);
1597 }
1598
1599
1600 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_OVR);
1601
1602
1603
1604
1605 if (LL_ADC_INJ_IsConversionOngoing(hadc->Instance) == 0UL)
1606 {
1607 if (tmp_hal_status == HAL_OK)
1608 {
1609 tmp_hal_status = ADC_Disable(hadc);
1610 }
1611 else
1612 {
1613 (void)ADC_Disable(hadc);
1614 }
1615
1616
1617 if (tmp_hal_status == HAL_OK)
1618 {
1619
1620 ADC_STATE_CLR_SET(hadc->State,
1621 HAL_ADC_STATE_INJ_BUSY,
1622 HAL_ADC_STATE_READY);
1623 }
1624 }
1625 else
1626 {
1627 SET_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY);
1628 }
1629 }
1630
1631
1632 __HAL_UNLOCK(hadc);
1633
1634
1635 return tmp_hal_status;
1636 }
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651 HAL_StatusTypeDef HAL_ADCEx_RegularMultiModeStop_DMA(ADC_HandleTypeDef *hadc)
1652 {
1653 HAL_StatusTypeDef tmp_hal_status;
1654 uint32_t tickstart;
1655 ADC_HandleTypeDef tmphadcSlave;
1656 uint32_t tmphadcSlave_conversion_on_going;
1657
1658
1659 assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));
1660
1661
1662 __HAL_LOCK(hadc);
1663
1664
1665
1666 tmp_hal_status = ADC_ConversionStop(hadc, ADC_REGULAR_GROUP);
1667
1668
1669 if (tmp_hal_status == HAL_OK)
1670 {
1671
1672 CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
1673
1674 tmphadcSlave.State = HAL_ADC_STATE_RESET;
1675 tmphadcSlave.ErrorCode = HAL_ADC_ERROR_NONE;
1676
1677
1678 ADC_MULTI_SLAVE(hadc, &tmphadcSlave);
1679
1680 if (tmphadcSlave.Instance == NULL)
1681 {
1682
1683 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
1684
1685
1686 __HAL_UNLOCK(hadc);
1687
1688 return HAL_ERROR;
1689 }
1690
1691
1692
1693
1694
1695 tickstart = HAL_GetTick();
1696
1697 tmphadcSlave_conversion_on_going = LL_ADC_REG_IsConversionOngoing((&tmphadcSlave)->Instance);
1698 while ((LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 1UL)
1699 || (tmphadcSlave_conversion_on_going == 1UL)
1700 )
1701 {
1702 if ((HAL_GetTick() - tickstart) > ADC_STOP_CONVERSION_TIMEOUT)
1703 {
1704
1705 tmphadcSlave_conversion_on_going = LL_ADC_REG_IsConversionOngoing((&tmphadcSlave)->Instance);
1706
1707 if((LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 1UL)
1708 || (tmphadcSlave_conversion_on_going == 1UL)
1709 )
1710 {
1711
1712 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
1713
1714
1715 __HAL_UNLOCK(hadc);
1716
1717 return HAL_ERROR;
1718 }
1719 }
1720
1721 tmphadcSlave_conversion_on_going = LL_ADC_REG_IsConversionOngoing((&tmphadcSlave)->Instance);
1722 }
1723
1724
1725
1726
1727
1728 tmp_hal_status = HAL_DMA_Abort(hadc->DMA_Handle);
1729
1730
1731 if (tmp_hal_status != HAL_OK)
1732 {
1733
1734 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA);
1735 }
1736
1737
1738 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_OVR);
1739
1740
1741
1742
1743
1744 if (tmp_hal_status == HAL_OK)
1745 {
1746 if (LL_ADC_INJ_IsConversionOngoing(hadc->Instance) == 0UL)
1747 {
1748 tmp_hal_status = ADC_Disable(hadc);
1749 if (tmp_hal_status == HAL_OK)
1750 {
1751 if (LL_ADC_INJ_IsConversionOngoing((&tmphadcSlave)->Instance) == 0UL)
1752 {
1753 tmp_hal_status = ADC_Disable(&tmphadcSlave);
1754 }
1755 }
1756 }
1757
1758 if (tmp_hal_status == HAL_OK)
1759 {
1760
1761
1762 ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);
1763 }
1764 else
1765 {
1766
1767
1768 }
1769 }
1770 }
1771
1772
1773 __HAL_UNLOCK(hadc);
1774
1775
1776 return tmp_hal_status;
1777 }
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836 HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef *hadc, ADC_InjectionConfTypeDef *sConfigInjected)
1837 {
1838 HAL_StatusTypeDef tmp_hal_status = HAL_OK;
1839 uint32_t tmpOffsetShifted;
1840 uint32_t tmp_config_internal_channel;
1841 uint32_t tmp_adc_is_conversion_on_going_regular;
1842 uint32_t tmp_adc_is_conversion_on_going_injected;
1843 __IO uint32_t wait_loop_index = 0;
1844
1845 uint32_t tmp_JSQR_ContextQueueBeingBuilt = 0U;
1846
1847
1848 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
1849 assert_param(IS_ADC_SAMPLE_TIME(sConfigInjected->InjectedSamplingTime));
1850 assert_param(IS_ADC_SINGLE_DIFFERENTIAL(sConfigInjected->InjectedSingleDiff));
1851 assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->AutoInjectedConv));
1852 assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->QueueInjectedContext));
1853 assert_param(IS_ADC_EXTTRIGINJEC_EDGE(sConfigInjected->ExternalTrigInjecConvEdge));
1854 assert_param(IS_ADC_EXTTRIGINJEC(sConfigInjected->ExternalTrigInjecConv));
1855 assert_param(IS_ADC_OFFSET_NUMBER(sConfigInjected->InjectedOffsetNumber));
1856 assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->InjecOversamplingMode));
1857 #if defined(ADC_VER_V5_V90)
1858 assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->InjectedOffsetSaturation));
1859 if (hadc->Instance == ADC3)
1860 {
1861 assert_param(IS_ADC3_OFFSET_SIGN(sConfigInjected->InjectedOffsetSign));
1862 assert_param(IS_ADC3_RANGE(ADC_GET_RESOLUTION(hadc), sConfigInjected->InjectedOffset));
1863 }
1864 else
1865 #endif
1866 {
1867 assert_param(IS_ADC_RANGE(ADC_GET_RESOLUTION(hadc), sConfigInjected->InjectedOffset));
1868 }
1869
1870 if (hadc->Init.ScanConvMode != ADC_SCAN_DISABLE)
1871 {
1872 assert_param(IS_ADC_INJECTED_RANK(sConfigInjected->InjectedRank));
1873 assert_param(IS_ADC_INJECTED_NB_CONV(sConfigInjected->InjectedNbrOfConversion));
1874 assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->InjectedDiscontinuousConvMode));
1875 }
1876
1877
1878 if (hadc->Init.OversamplingMode == ENABLE)
1879 {
1880 assert_param(IS_ADC_RANGE(ADC_GET_RESOLUTION(hadc), sConfigInjected->InjectedOffset / (hadc->Init.Oversampling.Ratio + 1U)));
1881 }
1882 else
1883 {
1884 assert_param(IS_ADC_RANGE(ADC_GET_RESOLUTION(hadc), sConfigInjected->InjectedOffset));
1885 }
1886 #if defined(ADC_VER_V5_V90)
1887
1888
1889 if (hadc->Instance == ADC3)
1890 {
1891 assert_param(!((sConfigInjected->InjectedOffsetNumber != ADC_OFFSET_NONE) && (sConfigInjected->InjecOversamplingMode == ENABLE)));
1892 }
1893 #endif
1894
1895 assert_param(!((sConfigInjected->InjectedDiscontinuousConvMode == ENABLE) && (sConfigInjected->AutoInjectedConv == ENABLE)));
1896
1897
1898 assert_param(!((hadc->Init.DiscontinuousConvMode == ENABLE) && (sConfigInjected->AutoInjectedConv == ENABLE)));
1899
1900
1901 if (sConfigInjected->InjectedSingleDiff != ADC_DIFFERENTIAL_ENDED)
1902 {
1903 assert_param(IS_ADC_CHANNEL(sConfigInjected->InjectedChannel));
1904 }
1905 else
1906 {
1907 if (hadc->Instance == ADC1)
1908 {
1909 assert_param(IS_ADC1_DIFF_CHANNEL(sConfigInjected->InjectedChannel));
1910 }
1911 if (hadc->Instance == ADC2)
1912 {
1913 assert_param(IS_ADC2_DIFF_CHANNEL(sConfigInjected->InjectedChannel));
1914 }
1915 #if defined (ADC3)
1916 if (hadc->Instance == ADC3)
1917 {
1918 assert_param(IS_ADC3_DIFF_CHANNEL(sConfigInjected->InjectedChannel));
1919 }
1920 #endif
1921 }
1922
1923
1924 __HAL_LOCK(hadc);
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947 if ((hadc->Init.ScanConvMode == ADC_SCAN_DISABLE) ||
1948 (sConfigInjected->InjectedNbrOfConversion == 1U))
1949 {
1950
1951
1952
1953
1954
1955
1956
1957 if (sConfigInjected->InjectedRank == ADC_INJECTED_RANK_1)
1958 {
1959
1960
1961
1962
1963
1964 if (sConfigInjected->ExternalTrigInjecConv != ADC_INJECTED_SOFTWARE_START)
1965 {
1966 tmp_JSQR_ContextQueueBeingBuilt = (ADC_JSQR_RK(sConfigInjected->InjectedChannel, ADC_INJECTED_RANK_1)
1967 | (sConfigInjected->ExternalTrigInjecConv & ADC_JSQR_JEXTSEL)
1968 | sConfigInjected->ExternalTrigInjecConvEdge
1969 );
1970 }
1971 else
1972 {
1973 tmp_JSQR_ContextQueueBeingBuilt = (ADC_JSQR_RK(sConfigInjected->InjectedChannel, ADC_INJECTED_RANK_1));
1974 }
1975
1976 MODIFY_REG(hadc->Instance->JSQR, ADC_JSQR_FIELDS, tmp_JSQR_ContextQueueBeingBuilt);
1977
1978 hadc->InjectionConfig.ContextQueue = tmp_JSQR_ContextQueueBeingBuilt;
1979
1980 }
1981 }
1982 else
1983 {
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994 if (hadc->InjectionConfig.ChannelCount == 0U)
1995 {
1996
1997
1998 hadc->InjectionConfig.ChannelCount = sConfigInjected->InjectedNbrOfConversion;
1999
2000
2001
2002 hadc->InjectionConfig.ContextQueue = 0x00000000U;
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014 if (sConfigInjected->ExternalTrigInjecConv != ADC_INJECTED_SOFTWARE_START)
2015 {
2016 tmp_JSQR_ContextQueueBeingBuilt = ((sConfigInjected->InjectedNbrOfConversion - 1U)
2017 | (sConfigInjected->ExternalTrigInjecConv & ADC_JSQR_JEXTSEL)
2018 | sConfigInjected->ExternalTrigInjecConvEdge
2019 );
2020 }
2021 else
2022 {
2023 tmp_JSQR_ContextQueueBeingBuilt = ((sConfigInjected->InjectedNbrOfConversion - 1U));
2024 }
2025
2026 }
2027
2028
2029
2030
2031 tmp_JSQR_ContextQueueBeingBuilt &= ~ADC_JSQR_RK(ADC_SQR3_SQ10, sConfigInjected->InjectedRank);
2032
2033
2034 tmp_JSQR_ContextQueueBeingBuilt |= ADC_JSQR_RK(sConfigInjected->InjectedChannel, sConfigInjected->InjectedRank);
2035
2036
2037 hadc->InjectionConfig.ChannelCount--;
2038
2039
2040
2041
2042 hadc->InjectionConfig.ContextQueue |= tmp_JSQR_ContextQueueBeingBuilt;
2043
2044
2045
2046 if (hadc->InjectionConfig.ChannelCount == 0U)
2047 {
2048 MODIFY_REG(hadc->Instance->JSQR, ADC_JSQR_FIELDS, hadc->InjectionConfig.ContextQueue);
2049 }
2050 }
2051
2052
2053
2054
2055
2056
2057
2058
2059 if (LL_ADC_INJ_IsConversionOngoing(hadc->Instance) == 0UL)
2060 {
2061 if (!(__LL_ADC_IS_CHANNEL_INTERNAL(sConfigInjected->InjectedChannel)))
2062 {
2063 #if defined(ADC_VER_V5_V90)
2064 if (hadc->Instance != ADC3)
2065 {
2066
2067 hadc->Instance->PCSEL_RES0 |= (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel) & 0x1FUL));
2068 }
2069 #else
2070
2071 hadc->Instance->PCSEL |= (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel) & 0x1FUL));
2072 #endif
2073 }
2074
2075
2076 if (sConfigInjected->AutoInjectedConv == DISABLE)
2077 {
2078 MODIFY_REG(hadc->Instance->CFGR,
2079 ADC_CFGR_JQM | ADC_CFGR_JDISCEN,
2080 ADC_CFGR_INJECT_CONTEXT_QUEUE((uint32_t)sConfigInjected->QueueInjectedContext) |
2081 ADC_CFGR_INJECT_DISCCONTINUOUS((uint32_t)sConfigInjected->InjectedDiscontinuousConvMode));
2082 }
2083
2084
2085 else
2086 {
2087 MODIFY_REG(hadc->Instance->CFGR,
2088 ADC_CFGR_JQM | ADC_CFGR_JDISCEN,
2089 ADC_CFGR_INJECT_CONTEXT_QUEUE((uint32_t)sConfigInjected->QueueInjectedContext));
2090 }
2091
2092 }
2093
2094
2095
2096
2097
2098
2099
2100
2101 tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
2102 tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
2103
2104 if ((tmp_adc_is_conversion_on_going_regular == 0UL)
2105 && (tmp_adc_is_conversion_on_going_injected == 0UL)
2106 )
2107 {
2108
2109
2110 if ((sConfigInjected->ExternalTrigInjecConv == ADC_INJECTED_SOFTWARE_START)
2111 || (sConfigInjected->ExternalTrigInjecConvEdge == ADC_EXTERNALTRIGINJECCONV_EDGE_NONE))
2112 {
2113 if (sConfigInjected->AutoInjectedConv == ENABLE)
2114 {
2115 SET_BIT(hadc->Instance->CFGR, ADC_CFGR_JAUTO);
2116 }
2117 else
2118 {
2119 CLEAR_BIT(hadc->Instance->CFGR, ADC_CFGR_JAUTO);
2120 }
2121 }
2122
2123
2124 else
2125 {
2126 if (sConfigInjected->AutoInjectedConv == ENABLE)
2127 {
2128
2129 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
2130
2131 tmp_hal_status = HAL_ERROR;
2132 }
2133 else
2134 {
2135 CLEAR_BIT(hadc->Instance->CFGR, ADC_CFGR_JAUTO);
2136 }
2137 }
2138
2139 if (sConfigInjected->InjecOversamplingMode == ENABLE)
2140 {
2141 #if defined(ADC_VER_V5_V90)
2142 if (hadc->Instance == ADC3)
2143 {
2144 assert_param(IS_ADC_OVERSAMPLING_RATIO_ADC3(sConfigInjected->InjecOversampling.Ratio));
2145 }
2146 else
2147 {
2148 assert_param(IS_ADC_OVERSAMPLING_RATIO(sConfigInjected->InjecOversampling.Ratio));
2149 }
2150 #else
2151 assert_param(IS_ADC_OVERSAMPLING_RATIO(sConfigInjected->InjecOversampling.Ratio));
2152 #endif
2153 assert_param(IS_ADC_RIGHT_BIT_SHIFT(sConfigInjected->InjecOversampling.RightBitShift));
2154
2155
2156 assert_param(!(READ_BIT(hadc->Instance->CFGR2, ADC_CFGR2_ROVSE | ADC_CFGR2_TROVS) == (ADC_CFGR2_ROVSE | ADC_CFGR2_TROVS)));
2157
2158
2159
2160
2161
2162
2163 #if defined(ADC_VER_V5_V90)
2164 if (hadc->Instance != ADC3)
2165 {
2166 MODIFY_REG(hadc->Instance->CFGR2,
2167 ADC_CFGR2_JOVSE |
2168 ADC_CFGR2_OVSR |
2169 ADC_CFGR2_OVSS,
2170 ADC_CFGR2_JOVSE |
2171 ((sConfigInjected->InjecOversampling.Ratio - 1UL) << ADC_CFGR2_OVSR_Pos) |
2172 sConfigInjected->InjecOversampling.RightBitShift
2173 );
2174 }
2175 else
2176 {
2177 MODIFY_REG(hadc->Instance->CFGR2,
2178 ADC_CFGR2_JOVSE |
2179 ADC3_CFGR2_OVSR |
2180 ADC_CFGR2_OVSS,
2181 ADC_CFGR2_JOVSE |
2182 (sConfigInjected->InjecOversampling.Ratio) |
2183 sConfigInjected->InjecOversampling.RightBitShift
2184 );
2185 }
2186 #else
2187 MODIFY_REG(hadc->Instance->CFGR2,
2188 ADC_CFGR2_JOVSE |
2189 ADC_CFGR2_OVSR |
2190 ADC_CFGR2_OVSS,
2191 ADC_CFGR2_JOVSE |
2192 ((sConfigInjected->InjecOversampling.Ratio - 1UL) << ADC_CFGR2_OVSR_Pos) |
2193 sConfigInjected->InjecOversampling.RightBitShift
2194 );
2195 #endif
2196 }
2197 else
2198 {
2199
2200 CLEAR_BIT(hadc->Instance->CFGR2, ADC_CFGR2_JOVSE);
2201 }
2202
2203
2204 LL_ADC_SetChannelSamplingTime(hadc->Instance, sConfigInjected->InjectedChannel, sConfigInjected->InjectedSamplingTime);
2205
2206
2207
2208
2209
2210 #if defined(ADC_VER_V5_V90)
2211 if (hadc->Instance == ADC3)
2212 {
2213 tmpOffsetShifted = ADC3_OFFSET_SHIFT_RESOLUTION(hadc, sConfigInjected->InjectedOffset);
2214 }
2215 else
2216 #endif
2217 {
2218 tmpOffsetShifted = ADC_OFFSET_SHIFT_RESOLUTION(hadc, sConfigInjected->InjectedOffset);
2219 }
2220
2221 if (sConfigInjected->InjectedOffsetNumber != ADC_OFFSET_NONE)
2222 {
2223
2224 LL_ADC_SetOffset(hadc->Instance, sConfigInjected->InjectedOffsetNumber, sConfigInjected->InjectedChannel, tmpOffsetShifted);
2225
2226 #if defined(ADC_VER_V5_V90)
2227 if (hadc->Instance == ADC3)
2228 {
2229
2230 LL_ADC_SetOffsetSign(hadc->Instance, sConfigInjected->InjectedOffsetNumber, sConfigInjected->InjectedOffsetSign);
2231 LL_ADC_SetOffsetSaturation(hadc->Instance, sConfigInjected->InjectedOffsetNumber, (sConfigInjected->InjectedOffsetSaturation == ENABLE) ? LL_ADC_OFFSET_SATURATION_ENABLE : LL_ADC_OFFSET_SATURATION_DISABLE);
2232 }
2233 else
2234 #endif
2235 {
2236
2237 LL_ADC_SetOffsetSignedSaturation(hadc->Instance, sConfigInjected->InjectedOffsetNumber, (sConfigInjected->InjectedOffsetSignedSaturation == ENABLE) ? LL_ADC_OFFSET_SIGNED_SATURATION_ENABLE : LL_ADC_OFFSET_SIGNED_SATURATION_DISABLE);
2238 }
2239
2240 }
2241 else
2242 {
2243 #if defined(ADC_VER_V5_V90)
2244 if (hadc->Instance == ADC3)
2245 {
2246
2247
2248 if (__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_1)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel))
2249 {
2250 LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_1, LL_ADC_OFFSET_DISABLE);
2251 }
2252 if (__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_2)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel))
2253 {
2254 LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_2, LL_ADC_OFFSET_DISABLE);
2255 }
2256 if (__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_3)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel))
2257 {
2258 LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_3, LL_ADC_OFFSET_DISABLE);
2259 }
2260 if (__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_4)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel))
2261 {
2262 LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_4, LL_ADC_OFFSET_DISABLE);
2263 }
2264 }
2265 else
2266 #endif
2267 {
2268
2269
2270 if (__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_1)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel))
2271 {
2272 LL_ADC_SetOffset(hadc->Instance, LL_ADC_OFFSET_1, sConfigInjected->InjectedChannel, LL_ADC_OFFSET_SIGNED_SATURATION_DISABLE);
2273 }
2274 if (__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_2)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel))
2275 {
2276 LL_ADC_SetOffset(hadc->Instance, LL_ADC_OFFSET_2, sConfigInjected->InjectedChannel, LL_ADC_OFFSET_SIGNED_SATURATION_DISABLE);
2277 }
2278 if (__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_3)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel))
2279 {
2280 LL_ADC_SetOffset(hadc->Instance, LL_ADC_OFFSET_4, sConfigInjected->InjectedChannel, LL_ADC_OFFSET_SIGNED_SATURATION_DISABLE);
2281 }
2282 if (__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_4)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfigInjected->InjectedChannel))
2283 {
2284 LL_ADC_SetOffset(hadc->Instance, LL_ADC_OFFSET_4, sConfigInjected->InjectedChannel, LL_ADC_OFFSET_SIGNED_SATURATION_DISABLE);
2285 }
2286 }
2287 }
2288
2289 }
2290
2291
2292
2293
2294
2295 if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
2296 {
2297
2298 LL_ADC_SetChannelSingleDiff(hadc->Instance, sConfigInjected->InjectedChannel, sConfigInjected->InjectedSingleDiff);
2299
2300
2301
2302 if (sConfigInjected->InjectedSingleDiff == ADC_DIFFERENTIAL_ENDED)
2303 {
2304
2305 LL_ADC_SetChannelSamplingTime(hadc->Instance, (uint32_t)(__LL_ADC_DECIMAL_NB_TO_CHANNEL((__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfigInjected->InjectedChannel) + 1UL) & 0x1FUL)), sConfigInjected->InjectedSamplingTime);
2306 }
2307
2308
2309
2310
2311
2312
2313
2314 if (__LL_ADC_IS_CHANNEL_INTERNAL(sConfigInjected->InjectedChannel))
2315 {
2316
2317
2318
2319 if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
2320 {
2321 tmp_config_internal_channel = LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
2322
2323
2324
2325 if ((sConfigInjected->InjectedChannel == ADC_CHANNEL_TEMPSENSOR) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_TEMPSENSOR) == 0UL))
2326 {
2327 if (ADC_TEMPERATURE_SENSOR_INSTANCE(hadc))
2328 {
2329 LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_TEMPSENSOR | tmp_config_internal_channel);
2330
2331
2332
2333
2334
2335
2336 wait_loop_index = ((LL_ADC_DELAY_TEMPSENSOR_STAB_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
2337 while (wait_loop_index != 0UL)
2338 {
2339 wait_loop_index--;
2340 }
2341 }
2342 }
2343 else if ((sConfigInjected->InjectedChannel == ADC_CHANNEL_VBAT) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_VBAT) == 0UL))
2344 {
2345 if (ADC_BATTERY_VOLTAGE_INSTANCE(hadc))
2346 {
2347 LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VBAT | tmp_config_internal_channel);
2348 }
2349 }
2350 else if ((sConfigInjected->InjectedChannel == ADC_CHANNEL_VREFINT) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_VREFINT) == 0UL))
2351 {
2352 if (ADC_VREFINT_INSTANCE(hadc))
2353 {
2354 LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VREFINT | tmp_config_internal_channel);
2355 }
2356 }
2357 else
2358 {
2359
2360 }
2361 }
2362
2363
2364
2365 else
2366 {
2367
2368 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
2369
2370 tmp_hal_status = HAL_ERROR;
2371 }
2372 }
2373
2374 }
2375
2376
2377 __HAL_UNLOCK(hadc);
2378
2379
2380 return tmp_hal_status;
2381 }
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399 HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode)
2400 {
2401 HAL_StatusTypeDef tmp_hal_status = HAL_OK;
2402 ADC_Common_TypeDef *tmpADC_Common;
2403 ADC_HandleTypeDef tmphadcSlave;
2404 uint32_t tmphadcSlave_conversion_on_going;
2405
2406
2407 assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));
2408 assert_param(IS_ADC_MULTIMODE(multimode->Mode));
2409 if (multimode->Mode != ADC_MODE_INDEPENDENT)
2410 {
2411 assert_param(IS_ADC_DUAL_DATA_MODE(multimode->DualModeData));
2412 assert_param(IS_ADC_SAMPLING_DELAY(multimode->TwoSamplingDelay));
2413 }
2414
2415
2416 __HAL_LOCK(hadc);
2417
2418 tmphadcSlave.State = HAL_ADC_STATE_RESET;
2419 tmphadcSlave.ErrorCode = HAL_ADC_ERROR_NONE;
2420
2421 ADC_MULTI_SLAVE(hadc, &tmphadcSlave);
2422
2423 if (tmphadcSlave.Instance == NULL)
2424 {
2425
2426 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
2427
2428
2429 __HAL_UNLOCK(hadc);
2430
2431 return HAL_ERROR;
2432 }
2433
2434
2435
2436
2437
2438 tmphadcSlave_conversion_on_going = LL_ADC_REG_IsConversionOngoing((&tmphadcSlave)->Instance);
2439 if ((LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
2440 && (tmphadcSlave_conversion_on_going == 0UL))
2441 {
2442
2443 tmpADC_Common = __LL_ADC_COMMON_INSTANCE(hadc->Instance);
2444
2445
2446
2447
2448 if (multimode->Mode != ADC_MODE_INDEPENDENT)
2449 {
2450 MODIFY_REG(tmpADC_Common->CCR, ADC_CCR_DAMDF, multimode->DualModeData);
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463 if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
2464 {
2465 MODIFY_REG(tmpADC_Common->CCR,
2466 ADC_CCR_DUAL |
2467 ADC_CCR_DELAY,
2468 multimode->Mode |
2469 multimode->TwoSamplingDelay
2470 );
2471 }
2472 }
2473 else
2474 {
2475 CLEAR_BIT(tmpADC_Common->CCR, ADC_CCR_DAMDF);
2476
2477
2478
2479
2480 if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
2481 {
2482 CLEAR_BIT(tmpADC_Common->CCR, ADC_CCR_DUAL | ADC_CCR_DELAY);
2483 }
2484 }
2485 }
2486
2487
2488 else
2489 {
2490
2491 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
2492
2493 tmp_hal_status = HAL_ERROR;
2494 }
2495
2496
2497 __HAL_UNLOCK(hadc);
2498
2499
2500 return tmp_hal_status;
2501 }
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512 HAL_StatusTypeDef HAL_ADCEx_EnableInjectedQueue(ADC_HandleTypeDef *hadc)
2513 {
2514 HAL_StatusTypeDef tmp_hal_status;
2515 uint32_t tmp_adc_is_conversion_on_going_regular;
2516 uint32_t tmp_adc_is_conversion_on_going_injected;
2517
2518
2519 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
2520
2521 tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
2522 tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
2523
2524
2525 if ((tmp_adc_is_conversion_on_going_regular == 0UL)
2526 && (tmp_adc_is_conversion_on_going_injected == 0UL)
2527 )
2528 {
2529 CLEAR_BIT(hadc->Instance->CFGR, ADC_CFGR_JQDIS);
2530
2531
2532 CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_JQOVF);
2533
2534 tmp_hal_status = HAL_OK;
2535 }
2536 else
2537 {
2538 tmp_hal_status = HAL_ERROR;
2539 }
2540
2541 return tmp_hal_status;
2542 }
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553 HAL_StatusTypeDef HAL_ADCEx_DisableInjectedQueue(ADC_HandleTypeDef *hadc)
2554 {
2555 HAL_StatusTypeDef tmp_hal_status;
2556 uint32_t tmp_adc_is_conversion_on_going_regular;
2557 uint32_t tmp_adc_is_conversion_on_going_injected;
2558
2559
2560 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
2561
2562 tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
2563 tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
2564
2565
2566 if ((tmp_adc_is_conversion_on_going_regular == 0UL)
2567 && (tmp_adc_is_conversion_on_going_injected == 0UL)
2568 )
2569 {
2570 LL_ADC_INJ_SetQueueMode(hadc->Instance, LL_ADC_INJ_QUEUE_DISABLE);
2571 tmp_hal_status = HAL_OK;
2572 }
2573 else
2574 {
2575 tmp_hal_status = HAL_ERROR;
2576 }
2577
2578 return tmp_hal_status;
2579 }
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590 HAL_StatusTypeDef HAL_ADCEx_DisableVoltageRegulator(ADC_HandleTypeDef *hadc)
2591 {
2592 HAL_StatusTypeDef tmp_hal_status;
2593
2594
2595 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
2596
2597
2598 if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
2599 {
2600 LL_ADC_DisableInternalRegulator(hadc->Instance);
2601 tmp_hal_status = HAL_OK;
2602 }
2603 else
2604 {
2605 tmp_hal_status = HAL_ERROR;
2606 }
2607
2608 return tmp_hal_status;
2609 }
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627 HAL_StatusTypeDef HAL_ADCEx_EnterADCDeepPowerDownMode(ADC_HandleTypeDef *hadc)
2628 {
2629 HAL_StatusTypeDef tmp_hal_status;
2630
2631
2632 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
2633
2634
2635 if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
2636 {
2637 LL_ADC_EnableDeepPowerDown(hadc->Instance);
2638 tmp_hal_status = HAL_OK;
2639 }
2640 else
2641 {
2642 tmp_hal_status = HAL_ERROR;
2643 }
2644
2645 return tmp_hal_status;
2646 }
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656 #endif
2657
2658
2659
2660
2661
2662
2663
2664