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
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
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
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298 #include "stm32h7xx_hal.h"
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309
0310 #ifdef HAL_ADC_MODULE_ENABLED
0311
0312
0313
0314
0315
0316
0317
0318
0319 #define ADC_CFGR_FIELDS_1 ((uint32_t)(ADC_CFGR_RES |\
0320 ADC_CFGR_CONT | ADC_CFGR_OVRMOD |\
0321 ADC_CFGR_DISCEN | ADC_CFGR_DISCNUM |\
0322 ADC_CFGR_EXTEN | ADC_CFGR_EXTSEL))
0323
0324
0325 #if defined(ADC_VER_V5_V90)
0326 #define ADC3_CFGR_FIELDS_1 ((ADC3_CFGR_RES | ADC3_CFGR_ALIGN |\
0327 ADC_CFGR_CONT | ADC_CFGR_OVRMOD |\
0328 ADC_CFGR_DISCEN | ADC_CFGR_DISCNUM |\
0329 ADC_CFGR_EXTEN | ADC_CFGR_EXTSEL))
0330
0331 #endif
0332
0333 #define ADC_CFGR2_FIELDS ((uint32_t)(ADC_CFGR2_ROVSE | ADC_CFGR2_OVSR |\
0334 ADC_CFGR2_OVSS | ADC_CFGR2_TROVS |\
0335 ADC_CFGR2_ROVSM))
0336
0337
0338
0339
0340
0341
0342 #define ADC_ENABLE_TIMEOUT (2UL)
0343 #define ADC_DISABLE_TIMEOUT (2UL)
0344
0345
0346
0347
0348
0349
0350
0351
0352 #define ADC_CONVERSION_TIME_MAX_CPU_CYCLES (210688UL)
0353
0354
0355
0356
0357
0358
0359
0360
0361
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409
0410
0411 HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc)
0412 {
0413 HAL_StatusTypeDef tmp_hal_status = HAL_OK;
0414 uint32_t tmpCFGR;
0415 uint32_t tmp_adc_reg_is_conversion_on_going;
0416 __IO uint32_t wait_loop_index = 0UL;
0417 uint32_t tmp_adc_is_conversion_on_going_regular;
0418 uint32_t tmp_adc_is_conversion_on_going_injected;
0419
0420
0421 if (hadc == NULL)
0422 {
0423 return HAL_ERROR;
0424 }
0425
0426
0427 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
0428 assert_param(IS_ADC_CLOCKPRESCALER(hadc->Init.ClockPrescaler));
0429 assert_param(IS_ADC_RESOLUTION(hadc->Init.Resolution));
0430 assert_param(IS_ADC_SCAN_MODE(hadc->Init.ScanConvMode));
0431 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));
0432 assert_param(IS_ADC_EXTTRIG_EDGE(hadc->Init.ExternalTrigConvEdge));
0433 assert_param(IS_ADC_EXTTRIG(hadc->Init.ExternalTrigConv));
0434 assert_param(IS_ADC_CONVERSIONDATAMGT(hadc->Init.ConversionDataManagement));
0435 assert_param(IS_ADC_EOC_SELECTION(hadc->Init.EOCSelection));
0436 assert_param(IS_ADC_OVERRUN(hadc->Init.Overrun));
0437 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.LowPowerAutoWait));
0438 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.OversamplingMode));
0439
0440 if (hadc->Init.ScanConvMode != ADC_SCAN_DISABLE)
0441 {
0442 assert_param(IS_ADC_REGULAR_NB_CONV(hadc->Init.NbrOfConversion));
0443 assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DiscontinuousConvMode));
0444
0445 if (hadc->Init.DiscontinuousConvMode == ENABLE)
0446 {
0447 assert_param(IS_ADC_REGULAR_DISCONT_NUMBER(hadc->Init.NbrOfDiscConversion));
0448 }
0449 }
0450
0451
0452 assert_param(!((hadc->Init.DiscontinuousConvMode == ENABLE) && (hadc->Init.ContinuousConvMode == ENABLE)));
0453
0454
0455
0456 if (hadc->State == HAL_ADC_STATE_RESET)
0457 {
0458 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
0459
0460 hadc->ConvCpltCallback = HAL_ADC_ConvCpltCallback;
0461 hadc->ConvHalfCpltCallback = HAL_ADC_ConvHalfCpltCallback;
0462 hadc->LevelOutOfWindowCallback = HAL_ADC_LevelOutOfWindowCallback;
0463 hadc->ErrorCallback = HAL_ADC_ErrorCallback;
0464 hadc->InjectedConvCpltCallback = HAL_ADCEx_InjectedConvCpltCallback;
0465 hadc->InjectedQueueOverflowCallback = HAL_ADCEx_InjectedQueueOverflowCallback;
0466 hadc->LevelOutOfWindow2Callback = HAL_ADCEx_LevelOutOfWindow2Callback;
0467 hadc->LevelOutOfWindow3Callback = HAL_ADCEx_LevelOutOfWindow3Callback;
0468 hadc->EndOfSamplingCallback = HAL_ADCEx_EndOfSamplingCallback;
0469
0470 if (hadc->MspInitCallback == NULL)
0471 {
0472 hadc->MspInitCallback = HAL_ADC_MspInit;
0473 }
0474
0475
0476 hadc->MspInitCallback(hadc);
0477 #else
0478
0479 HAL_ADC_MspInit(hadc);
0480 #endif
0481
0482
0483 ADC_CLEAR_ERRORCODE(hadc);
0484
0485
0486 hadc->Lock = HAL_UNLOCKED;
0487 }
0488
0489
0490 if (LL_ADC_IsDeepPowerDownEnabled(hadc->Instance) != 0UL)
0491 {
0492
0493 LL_ADC_DisableDeepPowerDown(hadc->Instance);
0494
0495
0496
0497
0498 }
0499
0500 if (LL_ADC_IsInternalRegulatorEnabled(hadc->Instance) == 0UL)
0501 {
0502
0503 LL_ADC_EnableInternalRegulator(hadc->Instance);
0504
0505
0506
0507
0508 wait_loop_index = ((LL_ADC_DELAY_INTERNAL_REGUL_STAB_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
0509 while (wait_loop_index != 0UL)
0510 {
0511 wait_loop_index--;
0512 }
0513 }
0514
0515
0516
0517
0518 if (LL_ADC_IsInternalRegulatorEnabled(hadc->Instance) == 0UL)
0519 {
0520
0521 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
0522
0523
0524 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
0525
0526 tmp_hal_status = HAL_ERROR;
0527 }
0528
0529
0530
0531
0532
0533 tmp_adc_reg_is_conversion_on_going = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
0534
0535 if (((hadc->State & HAL_ADC_STATE_ERROR_INTERNAL) == 0UL)
0536 && (tmp_adc_reg_is_conversion_on_going == 0UL)
0537 )
0538 {
0539
0540 ADC_STATE_CLR_SET(hadc->State,
0541 HAL_ADC_STATE_REG_BUSY,
0542 HAL_ADC_STATE_BUSY_INTERNAL);
0543
0544
0545
0546
0547
0548
0549 if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
0550 {
0551 if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
0552 {
0553
0554
0555
0556
0557
0558
0559
0560
0561
0562
0563
0564
0565
0566
0567
0568
0569
0570 LL_ADC_SetCommonClock(__LL_ADC_COMMON_INSTANCE(hadc->Instance), hadc->Init.ClockPrescaler);
0571 }
0572 }
0573
0574
0575
0576
0577
0578
0579
0580
0581
0582 #if defined(ADC_VER_V5_3)
0583
0584 tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
0585 hadc->Init.Overrun |
0586 hadc->Init.Resolution |
0587 ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
0588
0589 #elif defined(ADC_VER_V5_V90)
0590 if (hadc->Instance == ADC3)
0591 {
0592 tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
0593 hadc->Init.Overrun |
0594 hadc->Init.DataAlign |
0595 ((__LL_ADC12_RESOLUTION_TO_ADC3(hadc->Init.Resolution) & (ADC_CFGR_RES_1 | ADC_CFGR_RES_0)) << 1UL) |
0596 ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
0597 }
0598 else
0599 {
0600 tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
0601 hadc->Init.Overrun |
0602 hadc->Init.Resolution |
0603 ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
0604 }
0605
0606 #else
0607
0608 if ((HAL_GetREVID() > REV_ID_Y) && (ADC_RESOLUTION_8B == hadc->Init.Resolution))
0609 {
0610
0611 tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
0612 hadc->Init.Overrun |
0613 hadc->Init.Resolution | (ADC_CFGR_RES_1 | ADC_CFGR_RES_0) |
0614 ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
0615 }
0616 else
0617 {
0618
0619 tmpCFGR = (ADC_CFGR_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) |
0620 hadc->Init.Overrun |
0621 hadc->Init.Resolution |
0622 ADC_CFGR_REG_DISCONTINUOUS((uint32_t)hadc->Init.DiscontinuousConvMode));
0623 }
0624
0625 #endif
0626
0627 if (hadc->Init.DiscontinuousConvMode == ENABLE)
0628 {
0629 tmpCFGR |= ADC_CFGR_DISCONTINUOUS_NUM(hadc->Init.NbrOfDiscConversion);
0630 }
0631
0632
0633
0634
0635
0636
0637 if (hadc->Init.ExternalTrigConv != ADC_SOFTWARE_START)
0638 {
0639 tmpCFGR |= ((hadc->Init.ExternalTrigConv & ADC_CFGR_EXTSEL)
0640 | hadc->Init.ExternalTrigConvEdge
0641 );
0642 }
0643
0644
0645 #if defined(ADC_VER_V5_V90)
0646 if (hadc->Instance == ADC3)
0647 {
0648
0649 MODIFY_REG(hadc->Instance->CFGR, ADC3_CFGR_FIELDS_1, tmpCFGR);
0650
0651 MODIFY_REG(hadc->Instance->CFGR2, ADC3_CFGR2_BULB | ADC3_CFGR2_SMPTRIG, hadc->Init.SamplingMode);
0652 }
0653 else
0654 {
0655
0656 MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_1, tmpCFGR);
0657 }
0658 #else
0659
0660 MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_1, tmpCFGR);
0661 #endif
0662
0663
0664
0665
0666
0667
0668
0669 tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
0670 tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
0671 if ((tmp_adc_is_conversion_on_going_regular == 0UL)
0672 && (tmp_adc_is_conversion_on_going_injected == 0UL)
0673 )
0674 {
0675 #if defined(ADC_VER_V5_V90)
0676 if (hadc->Instance == ADC3)
0677 {
0678 tmpCFGR = (
0679 ADC_CFGR_AUTOWAIT((uint32_t)hadc->Init.LowPowerAutoWait) |
0680 ADC3_CFGR_DMACONTREQ((uint32_t)hadc->Init.DMAContinuousRequests));
0681 }
0682 else
0683 {
0684 tmpCFGR = (
0685 ADC_CFGR_AUTOWAIT((uint32_t)hadc->Init.LowPowerAutoWait) |
0686 ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
0687 }
0688 #else
0689 tmpCFGR = (
0690 ADC_CFGR_AUTOWAIT((uint32_t)hadc->Init.LowPowerAutoWait) |
0691 ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
0692 #endif
0693
0694 MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_FIELDS_2, tmpCFGR);
0695
0696 if (hadc->Init.OversamplingMode == ENABLE)
0697 {
0698 #if defined(ADC_VER_V5_V90)
0699 if (hadc->Instance == ADC3)
0700 {
0701 assert_param(IS_ADC_OVERSAMPLING_RATIO_ADC3(hadc->Init.Oversampling.Ratio));
0702 }
0703 else
0704 {
0705 assert_param(IS_ADC_OVERSAMPLING_RATIO(hadc->Init.Oversampling.Ratio));
0706 }
0707 #else
0708 assert_param(IS_ADC_OVERSAMPLING_RATIO(hadc->Init.Oversampling.Ratio));
0709 #endif
0710 assert_param(IS_ADC_RIGHT_BIT_SHIFT(hadc->Init.Oversampling.RightBitShift));
0711 assert_param(IS_ADC_TRIGGERED_OVERSAMPLING_MODE(hadc->Init.Oversampling.TriggeredMode));
0712 assert_param(IS_ADC_REGOVERSAMPLING_MODE(hadc->Init.Oversampling.OversamplingStopReset));
0713
0714 if ((hadc->Init.ExternalTrigConv == ADC_SOFTWARE_START)
0715 || (hadc->Init.ExternalTrigConvEdge == ADC_EXTERNALTRIGCONVEDGE_NONE))
0716 {
0717
0718 assert_param((hadc->Init.Oversampling.TriggeredMode == ADC_TRIGGEREDMODE_SINGLE_TRIGGER));
0719 }
0720
0721 #if defined(ADC_VER_V5_V90)
0722 if (hadc->Instance == ADC3)
0723 {
0724
0725
0726
0727
0728
0729 MODIFY_REG(hadc->Instance->CFGR2,
0730 ADC_CFGR2_OVSR |
0731 ADC_CFGR2_OVSS |
0732 ADC_CFGR2_TROVS |
0733 ADC_CFGR2_ROVSM,
0734 ADC_CFGR2_ROVSE |
0735 hadc->Init.Oversampling.Ratio |
0736 hadc->Init.Oversampling.RightBitShift |
0737 hadc->Init.Oversampling.TriggeredMode |
0738 hadc->Init.Oversampling.OversamplingStopReset
0739 );
0740 }
0741 else
0742 {
0743
0744
0745
0746
0747
0748
0749
0750 MODIFY_REG(hadc->Instance->CFGR2, ADC_CFGR2_FIELDS,
0751 ADC_CFGR2_ROVSE |
0752 ((hadc->Init.Oversampling.Ratio - 1UL) << ADC_CFGR2_OVSR_Pos) |
0753 hadc->Init.Oversampling.RightBitShift |
0754 hadc->Init.Oversampling.TriggeredMode |
0755 hadc->Init.Oversampling.OversamplingStopReset);
0756 }
0757 #else
0758
0759
0760
0761
0762
0763
0764 MODIFY_REG(hadc->Instance->CFGR2, ADC_CFGR2_FIELDS,
0765 ADC_CFGR2_ROVSE |
0766 ((hadc->Init.Oversampling.Ratio - 1UL) << ADC_CFGR2_OVSR_Pos) |
0767 hadc->Init.Oversampling.RightBitShift |
0768 hadc->Init.Oversampling.TriggeredMode |
0769 hadc->Init.Oversampling.OversamplingStopReset);
0770 #endif
0771
0772 }
0773 else
0774 {
0775
0776 CLEAR_BIT(hadc->Instance->CFGR2, ADC_CFGR2_ROVSE);
0777 }
0778
0779
0780 MODIFY_REG(hadc->Instance->CFGR2, ADC_CFGR2_LSHIFT, hadc->Init.LeftBitShift);
0781 #if defined(ADC_VER_V5_V90)
0782 if (hadc->Instance != ADC3)
0783 {
0784
0785 ADC_ConfigureBoostMode(hadc);
0786 }
0787 #else
0788
0789 ADC_ConfigureBoostMode(hadc);
0790 #endif
0791 }
0792
0793
0794
0795
0796
0797
0798
0799
0800
0801
0802 if (hadc->Init.ScanConvMode == ADC_SCAN_ENABLE)
0803 {
0804
0805 MODIFY_REG(hadc->Instance->SQR1, ADC_SQR1_L, (hadc->Init.NbrOfConversion - (uint8_t)1));
0806 }
0807 else
0808 {
0809 CLEAR_BIT(hadc->Instance->SQR1, ADC_SQR1_L);
0810 }
0811
0812
0813
0814 ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_READY);
0815 }
0816 else
0817 {
0818
0819 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
0820
0821 tmp_hal_status = HAL_ERROR;
0822 }
0823
0824
0825 return tmp_hal_status;
0826 }
0827
0828
0829
0830
0831
0832
0833
0834
0835
0836
0837
0838
0839
0840
0841
0842
0843
0844
0845
0846 HAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef *hadc)
0847 {
0848 HAL_StatusTypeDef tmp_hal_status;
0849
0850
0851 if (hadc == NULL)
0852 {
0853 return HAL_ERROR;
0854 }
0855
0856
0857 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
0858
0859
0860 SET_BIT(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL);
0861
0862
0863 tmp_hal_status = ADC_ConversionStop(hadc, ADC_REGULAR_INJECTED_GROUP);
0864
0865
0866
0867
0868
0869
0870
0871 SET_BIT(hadc->Instance->CFGR, ADC_CFGR_JQM);
0872
0873
0874 if (tmp_hal_status == HAL_OK)
0875 {
0876
0877 tmp_hal_status = ADC_Disable(hadc);
0878
0879
0880 if (tmp_hal_status == HAL_OK)
0881 {
0882
0883 hadc->State = HAL_ADC_STATE_READY;
0884 }
0885 }
0886
0887
0888
0889
0890
0891
0892
0893
0894
0895 __HAL_ADC_DISABLE_IT(hadc, (ADC_IT_AWD3 | ADC_IT_AWD2 | ADC_IT_AWD1 |
0896 ADC_IT_JQOVF | ADC_IT_OVR |
0897 ADC_IT_JEOS | ADC_IT_JEOC |
0898 ADC_IT_EOS | ADC_IT_EOC |
0899 ADC_IT_EOSMP | ADC_IT_RDY));
0900
0901
0902 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_AWD3 | ADC_FLAG_AWD2 | ADC_FLAG_AWD1 |
0903 ADC_FLAG_JQOVF | ADC_FLAG_OVR |
0904 ADC_FLAG_JEOS | ADC_FLAG_JEOC |
0905 ADC_FLAG_EOS | ADC_FLAG_EOC |
0906 ADC_FLAG_EOSMP | ADC_FLAG_RDY));
0907
0908
0909
0910
0911
0912
0913 CLEAR_BIT(hadc->Instance->CR, ADC_CR_ADVREGEN | ADC_CR_ADCALDIF);
0914 SET_BIT(hadc->Instance->CR, ADC_CR_DEEPPWD);
0915
0916
0917 CLEAR_BIT(hadc->Instance->CFGR, ADC_CFGR_AWD1CH | ADC_CFGR_JAUTO | ADC_CFGR_JAWD1EN |
0918 ADC_CFGR_AWD1EN | ADC_CFGR_AWD1SGL | ADC_CFGR_JQM |
0919 ADC_CFGR_JDISCEN | ADC_CFGR_DISCNUM | ADC_CFGR_DISCEN |
0920 ADC_CFGR_AUTDLY | ADC_CFGR_CONT | ADC_CFGR_OVRMOD |
0921 ADC_CFGR_EXTEN | ADC_CFGR_EXTSEL |
0922 ADC_CFGR_RES | ADC_CFGR_DMNGT);
0923 SET_BIT(hadc->Instance->CFGR, ADC_CFGR_JQDIS);
0924
0925
0926 CLEAR_BIT(hadc->Instance->CFGR2, ADC_CFGR2_ROVSM | ADC_CFGR2_TROVS | ADC_CFGR2_OVSS |
0927 ADC_CFGR2_OVSR | ADC_CFGR2_JOVSE | ADC_CFGR2_ROVSE);
0928
0929
0930 CLEAR_BIT(hadc->Instance->SMPR1, ADC_SMPR1_FIELDS);
0931
0932
0933 CLEAR_BIT(hadc->Instance->SMPR2, ADC_SMPR2_SMP18 | ADC_SMPR2_SMP17 | ADC_SMPR2_SMP16 |
0934 ADC_SMPR2_SMP15 | ADC_SMPR2_SMP14 | ADC_SMPR2_SMP13 |
0935 ADC_SMPR2_SMP12 | ADC_SMPR2_SMP11 | ADC_SMPR2_SMP10);
0936
0937 #if defined(ADC_VER_V5_V90)
0938 if (hadc->Instance == ADC3)
0939 {
0940
0941 CLEAR_BIT(hadc->Instance->LTR1_TR1, ADC3_TR1_HT1 | ADC3_TR1_LT1);
0942 CLEAR_BIT(hadc->Instance->HTR1_TR2, ADC3_TR2_HT2 | ADC3_TR2_LT2);
0943
0944
0945 CLEAR_BIT(hadc->Instance->RES1_TR3, ADC3_TR3_HT3 | ADC3_TR3_LT3);
0946 }
0947 else
0948 {
0949 CLEAR_BIT(hadc->Instance->LTR1_TR1, ADC_LTR_LT);
0950 CLEAR_BIT(hadc->Instance->HTR1_TR2, ADC_HTR_HT);
0951
0952
0953 CLEAR_BIT(hadc->Instance->LTR2_DIFSEL, ADC_LTR_LT);
0954 CLEAR_BIT(hadc->Instance->HTR2_CALFACT, ADC_HTR_HT);
0955
0956
0957 CLEAR_BIT(hadc->Instance->LTR3_RES10, ADC_LTR_LT);
0958 CLEAR_BIT(hadc->Instance->HTR3_RES11, ADC_HTR_HT);
0959 }
0960 #else
0961
0962 CLEAR_BIT(hadc->Instance->LTR1, ADC_LTR_LT);
0963 CLEAR_BIT(hadc->Instance->HTR1, ADC_HTR_HT);
0964
0965
0966 CLEAR_BIT(hadc->Instance->LTR2, ADC_LTR_LT);
0967 CLEAR_BIT(hadc->Instance->HTR2, ADC_HTR_HT);
0968
0969
0970 CLEAR_BIT(hadc->Instance->LTR3, ADC_LTR_LT);
0971 CLEAR_BIT(hadc->Instance->HTR3, ADC_HTR_HT);
0972 #endif
0973
0974
0975
0976 CLEAR_BIT(hadc->Instance->SQR1, ADC_SQR1_SQ4 | ADC_SQR1_SQ3 | ADC_SQR1_SQ2 |
0977 ADC_SQR1_SQ1 | ADC_SQR1_L);
0978
0979
0980 CLEAR_BIT(hadc->Instance->SQR2, ADC_SQR2_SQ9 | ADC_SQR2_SQ8 | ADC_SQR2_SQ7 |
0981 ADC_SQR2_SQ6 | ADC_SQR2_SQ5);
0982
0983
0984 CLEAR_BIT(hadc->Instance->SQR3, ADC_SQR3_SQ14 | ADC_SQR3_SQ13 | ADC_SQR3_SQ12 |
0985 ADC_SQR3_SQ11 | ADC_SQR3_SQ10);
0986
0987
0988 CLEAR_BIT(hadc->Instance->SQR4, ADC_SQR4_SQ16 | ADC_SQR4_SQ15);
0989
0990
0991
0992
0993
0994
0995
0996 CLEAR_BIT(hadc->Instance->OFR1, ADC_OFR1_SSATE | ADC_OFR1_OFFSET1_CH | ADC_OFR1_OFFSET1);
0997
0998 CLEAR_BIT(hadc->Instance->OFR2, ADC_OFR2_SSATE | ADC_OFR2_OFFSET2_CH | ADC_OFR2_OFFSET2);
0999
1000 CLEAR_BIT(hadc->Instance->OFR3, ADC_OFR3_SSATE | ADC_OFR3_OFFSET3_CH | ADC_OFR3_OFFSET3);
1001
1002 CLEAR_BIT(hadc->Instance->OFR4, ADC_OFR4_SSATE | ADC_OFR4_OFFSET4_CH | ADC_OFR4_OFFSET4);
1003
1004
1005
1006
1007
1008 CLEAR_BIT(hadc->Instance->AWD2CR, ADC_AWD2CR_AWD2CH);
1009
1010
1011 CLEAR_BIT(hadc->Instance->AWD3CR, ADC_AWD3CR_AWD3CH);
1012
1013 #if defined(ADC_VER_V5_V90)
1014 if (hadc->Instance == ADC3)
1015 {
1016
1017 CLEAR_BIT(hadc->Instance->LTR2_DIFSEL, ADC_DIFSEL_DIFSEL);
1018
1019
1020 CLEAR_BIT(hadc->Instance->HTR2_CALFACT, ADC_CALFACT_CALFACT_D | ADC_CALFACT_CALFACT_S);
1021 }
1022 else
1023 {
1024
1025 CLEAR_BIT(hadc->Instance->DIFSEL_RES12, ADC_DIFSEL_DIFSEL);
1026
1027
1028 CLEAR_BIT(hadc->Instance->CALFACT_RES13, ADC_CALFACT_CALFACT_D | ADC_CALFACT_CALFACT_S);
1029 }
1030 #else
1031
1032 CLEAR_BIT(hadc->Instance->DIFSEL, ADC_DIFSEL_DIFSEL);
1033
1034
1035 CLEAR_BIT(hadc->Instance->CALFACT, ADC_CALFACT_CALFACT_D | ADC_CALFACT_CALFACT_S);
1036 #endif
1037
1038
1039
1040
1041
1042 if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
1043 {
1044
1045
1046
1047
1048
1049
1050
1051 ADC_CLEAR_COMMON_CONTROL_REGISTER(hadc);
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
1063 if (hadc->MspDeInitCallback == NULL)
1064 {
1065 hadc->MspDeInitCallback = HAL_ADC_MspDeInit;
1066 }
1067
1068
1069 hadc->MspDeInitCallback(hadc);
1070 #else
1071
1072 HAL_ADC_MspDeInit(hadc);
1073 #endif
1074
1075 }
1076
1077
1078 ADC_CLEAR_ERRORCODE(hadc);
1079
1080
1081 hadc->InjectionConfig.ContextQueue = 0;
1082 hadc->InjectionConfig.ChannelCount = 0;
1083
1084
1085 hadc->State = HAL_ADC_STATE_RESET;
1086
1087
1088 __HAL_UNLOCK(hadc);
1089
1090
1091 return tmp_hal_status;
1092 }
1093
1094
1095
1096
1097
1098
1099 __weak void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)
1100 {
1101
1102 UNUSED(hadc);
1103
1104
1105
1106
1107 }
1108
1109
1110
1111
1112
1113
1114
1115
1116 __weak void HAL_ADC_MspDeInit(ADC_HandleTypeDef *hadc)
1117 {
1118
1119 UNUSED(hadc);
1120
1121
1122
1123
1124 }
1125
1126 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148 HAL_StatusTypeDef HAL_ADC_RegisterCallback(ADC_HandleTypeDef *hadc, HAL_ADC_CallbackIDTypeDef CallbackID, pADC_CallbackTypeDef pCallback)
1149 {
1150 HAL_StatusTypeDef status = HAL_OK;
1151
1152 if (pCallback == NULL)
1153 {
1154
1155 hadc->ErrorCode |= HAL_ADC_ERROR_INVALID_CALLBACK;
1156
1157 return HAL_ERROR;
1158 }
1159
1160 if ((hadc->State & HAL_ADC_STATE_READY) != 0UL)
1161 {
1162 switch (CallbackID)
1163 {
1164 case HAL_ADC_CONVERSION_COMPLETE_CB_ID :
1165 hadc->ConvCpltCallback = pCallback;
1166 break;
1167
1168 case HAL_ADC_CONVERSION_HALF_CB_ID :
1169 hadc->ConvHalfCpltCallback = pCallback;
1170 break;
1171
1172 case HAL_ADC_LEVEL_OUT_OF_WINDOW_1_CB_ID :
1173 hadc->LevelOutOfWindowCallback = pCallback;
1174 break;
1175
1176 case HAL_ADC_ERROR_CB_ID :
1177 hadc->ErrorCallback = pCallback;
1178 break;
1179
1180 case HAL_ADC_INJ_CONVERSION_COMPLETE_CB_ID :
1181 hadc->InjectedConvCpltCallback = pCallback;
1182 break;
1183
1184 case HAL_ADC_INJ_QUEUE_OVEFLOW_CB_ID :
1185 hadc->InjectedQueueOverflowCallback = pCallback;
1186 break;
1187
1188 case HAL_ADC_LEVEL_OUT_OF_WINDOW_2_CB_ID :
1189 hadc->LevelOutOfWindow2Callback = pCallback;
1190 break;
1191
1192 case HAL_ADC_LEVEL_OUT_OF_WINDOW_3_CB_ID :
1193 hadc->LevelOutOfWindow3Callback = pCallback;
1194 break;
1195
1196 case HAL_ADC_END_OF_SAMPLING_CB_ID :
1197 hadc->EndOfSamplingCallback = pCallback;
1198 break;
1199
1200 case HAL_ADC_MSPINIT_CB_ID :
1201 hadc->MspInitCallback = pCallback;
1202 break;
1203
1204 case HAL_ADC_MSPDEINIT_CB_ID :
1205 hadc->MspDeInitCallback = pCallback;
1206 break;
1207
1208 default :
1209
1210 hadc->ErrorCode |= HAL_ADC_ERROR_INVALID_CALLBACK;
1211
1212
1213 status = HAL_ERROR;
1214 break;
1215 }
1216 }
1217 else if (HAL_ADC_STATE_RESET == hadc->State)
1218 {
1219 switch (CallbackID)
1220 {
1221 case HAL_ADC_MSPINIT_CB_ID :
1222 hadc->MspInitCallback = pCallback;
1223 break;
1224
1225 case HAL_ADC_MSPDEINIT_CB_ID :
1226 hadc->MspDeInitCallback = pCallback;
1227 break;
1228
1229 default :
1230
1231 hadc->ErrorCode |= HAL_ADC_ERROR_INVALID_CALLBACK;
1232
1233
1234 status = HAL_ERROR;
1235 break;
1236 }
1237 }
1238 else
1239 {
1240
1241 hadc->ErrorCode |= HAL_ADC_ERROR_INVALID_CALLBACK;
1242
1243
1244 status = HAL_ERROR;
1245 }
1246
1247 return status;
1248 }
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270 HAL_StatusTypeDef HAL_ADC_UnRegisterCallback(ADC_HandleTypeDef *hadc, HAL_ADC_CallbackIDTypeDef CallbackID)
1271 {
1272 HAL_StatusTypeDef status = HAL_OK;
1273
1274 if ((hadc->State & HAL_ADC_STATE_READY) != 0UL)
1275 {
1276 switch (CallbackID)
1277 {
1278 case HAL_ADC_CONVERSION_COMPLETE_CB_ID :
1279 hadc->ConvCpltCallback = HAL_ADC_ConvCpltCallback;
1280 break;
1281
1282 case HAL_ADC_CONVERSION_HALF_CB_ID :
1283 hadc->ConvHalfCpltCallback = HAL_ADC_ConvHalfCpltCallback;
1284 break;
1285
1286 case HAL_ADC_LEVEL_OUT_OF_WINDOW_1_CB_ID :
1287 hadc->LevelOutOfWindowCallback = HAL_ADC_LevelOutOfWindowCallback;
1288 break;
1289
1290 case HAL_ADC_ERROR_CB_ID :
1291 hadc->ErrorCallback = HAL_ADC_ErrorCallback;
1292 break;
1293
1294 case HAL_ADC_INJ_CONVERSION_COMPLETE_CB_ID :
1295 hadc->InjectedConvCpltCallback = HAL_ADCEx_InjectedConvCpltCallback;
1296 break;
1297
1298 case HAL_ADC_INJ_QUEUE_OVEFLOW_CB_ID :
1299 hadc->InjectedQueueOverflowCallback = HAL_ADCEx_InjectedQueueOverflowCallback;
1300 break;
1301
1302 case HAL_ADC_LEVEL_OUT_OF_WINDOW_2_CB_ID :
1303 hadc->LevelOutOfWindow2Callback = HAL_ADCEx_LevelOutOfWindow2Callback;
1304 break;
1305
1306 case HAL_ADC_LEVEL_OUT_OF_WINDOW_3_CB_ID :
1307 hadc->LevelOutOfWindow3Callback = HAL_ADCEx_LevelOutOfWindow3Callback;
1308 break;
1309
1310 case HAL_ADC_END_OF_SAMPLING_CB_ID :
1311 hadc->EndOfSamplingCallback = HAL_ADCEx_EndOfSamplingCallback;
1312 break;
1313
1314 case HAL_ADC_MSPINIT_CB_ID :
1315 hadc->MspInitCallback = HAL_ADC_MspInit;
1316 break;
1317
1318 case HAL_ADC_MSPDEINIT_CB_ID :
1319 hadc->MspDeInitCallback = HAL_ADC_MspDeInit;
1320 break;
1321
1322 default :
1323
1324 hadc->ErrorCode |= HAL_ADC_ERROR_INVALID_CALLBACK;
1325
1326
1327 status = HAL_ERROR;
1328 break;
1329 }
1330 }
1331 else if (HAL_ADC_STATE_RESET == hadc->State)
1332 {
1333 switch (CallbackID)
1334 {
1335 case HAL_ADC_MSPINIT_CB_ID :
1336 hadc->MspInitCallback = HAL_ADC_MspInit;
1337 break;
1338
1339 case HAL_ADC_MSPDEINIT_CB_ID :
1340 hadc->MspDeInitCallback = HAL_ADC_MspDeInit;
1341 break;
1342
1343 default :
1344
1345 hadc->ErrorCode |= HAL_ADC_ERROR_INVALID_CALLBACK;
1346
1347
1348 status = HAL_ERROR;
1349 break;
1350 }
1351 }
1352 else
1353 {
1354
1355 hadc->ErrorCode |= HAL_ADC_ERROR_INVALID_CALLBACK;
1356
1357
1358 status = HAL_ERROR;
1359 }
1360
1361 return status;
1362 }
1363
1364 #endif
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402 HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef *hadc)
1403 {
1404 HAL_StatusTypeDef tmp_hal_status;
1405 const ADC_TypeDef *tmpADC_Master;
1406 uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
1407
1408
1409 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
1410
1411
1412 if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
1413 {
1414
1415 __HAL_LOCK(hadc);
1416
1417
1418 tmp_hal_status = ADC_Enable(hadc);
1419
1420
1421 if (tmp_hal_status == HAL_OK)
1422 {
1423
1424
1425
1426 ADC_STATE_CLR_SET(hadc->State,
1427 HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP,
1428 HAL_ADC_STATE_REG_BUSY);
1429
1430
1431
1432
1433 if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
1434 || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
1435 )
1436 {
1437 CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);
1438 }
1439
1440
1441
1442 if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY))
1443 {
1444
1445 CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));
1446 }
1447 else
1448 {
1449
1450 ADC_CLEAR_ERRORCODE(hadc);
1451 }
1452
1453
1454
1455 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR));
1456
1457
1458
1459
1460 __HAL_UNLOCK(hadc);
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470 if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
1471 || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
1472 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_SIMULT)
1473 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_ALTERN)
1474 )
1475 {
1476
1477 if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_JAUTO) != 0UL)
1478 {
1479 ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);
1480 }
1481
1482
1483 LL_ADC_REG_StartConversion(hadc->Instance);
1484 }
1485 else
1486 {
1487
1488 SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);
1489
1490
1491 tmpADC_Master = __LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance);
1492 if (READ_BIT(tmpADC_Master->CFGR, ADC_CFGR_JAUTO) != 0UL)
1493 {
1494 ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);
1495 }
1496
1497 }
1498 }
1499 else
1500 {
1501
1502 __HAL_UNLOCK(hadc);
1503 }
1504 }
1505 else
1506 {
1507 tmp_hal_status = HAL_BUSY;
1508 }
1509
1510
1511 return tmp_hal_status;
1512 }
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523 HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef *hadc)
1524 {
1525 HAL_StatusTypeDef tmp_hal_status;
1526
1527
1528 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
1529
1530
1531 __HAL_LOCK(hadc);
1532
1533
1534 tmp_hal_status = ADC_ConversionStop(hadc, ADC_REGULAR_INJECTED_GROUP);
1535
1536
1537 if (tmp_hal_status == HAL_OK)
1538 {
1539
1540 tmp_hal_status = ADC_Disable(hadc);
1541
1542
1543 if (tmp_hal_status == HAL_OK)
1544 {
1545
1546 ADC_STATE_CLR_SET(hadc->State,
1547 HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY,
1548 HAL_ADC_STATE_READY);
1549 }
1550 }
1551
1552
1553 __HAL_UNLOCK(hadc);
1554
1555
1556 return tmp_hal_status;
1557 }
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577 HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout)
1578 {
1579 uint32_t tickstart;
1580 uint32_t tmp_Flag_End;
1581 uint32_t tmp_cfgr;
1582 const ADC_TypeDef *tmpADC_Master;
1583 uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
1584
1585
1586 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
1587
1588
1589 if (hadc->Init.EOCSelection == ADC_EOC_SEQ_CONV)
1590 {
1591 tmp_Flag_End = ADC_FLAG_EOS;
1592 }
1593
1594 else
1595 {
1596
1597
1598
1599
1600
1601
1602 if ((tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
1603 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_SIMULT)
1604 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_ALTERN)
1605 )
1606 {
1607
1608 if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_DMNGT_0) != 0UL)
1609 {
1610 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
1611 return HAL_ERROR;
1612 }
1613 else
1614 {
1615 tmp_Flag_End = (ADC_FLAG_EOC);
1616 }
1617 }
1618 else
1619 {
1620
1621 if (LL_ADC_GetMultiDMATransfer(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) != LL_ADC_MULTI_REG_DMA_EACH_ADC)
1622 {
1623 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
1624 return HAL_ERROR;
1625 }
1626 else
1627 {
1628 tmp_Flag_End = (ADC_FLAG_EOC);
1629 }
1630 }
1631 }
1632
1633
1634 tickstart = HAL_GetTick();
1635
1636
1637 while ((hadc->Instance->ISR & tmp_Flag_End) == 0UL)
1638 {
1639
1640 if (Timeout != HAL_MAX_DELAY)
1641 {
1642 if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0UL))
1643 {
1644
1645 if((hadc->Instance->ISR & tmp_Flag_End) == 0UL)
1646 {
1647
1648 SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);
1649
1650
1651 __HAL_UNLOCK(hadc);
1652
1653 return HAL_TIMEOUT;
1654 }
1655 }
1656 }
1657 }
1658
1659
1660 SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);
1661
1662
1663
1664 if ((LL_ADC_REG_IsTriggerSourceSWStart(hadc->Instance) != 0UL)
1665 && (hadc->Init.ContinuousConvMode == DISABLE)
1666 )
1667 {
1668
1669 if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOS))
1670 {
1671
1672 CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
1673
1674 if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) == 0UL)
1675 {
1676 SET_BIT(hadc->State, HAL_ADC_STATE_READY);
1677 }
1678 }
1679 }
1680
1681
1682
1683
1684 if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
1685 || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
1686 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_SIMULT)
1687 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_ALTERN)
1688 )
1689 {
1690
1691 tmp_cfgr = READ_REG(hadc->Instance->CFGR);
1692 }
1693 else
1694 {
1695
1696 tmpADC_Master = __LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance);
1697 tmp_cfgr = READ_REG(tmpADC_Master->CFGR);
1698 }
1699
1700
1701 if (tmp_Flag_End == ADC_FLAG_EOS)
1702 {
1703 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOS);
1704 }
1705 else
1706 {
1707
1708
1709
1710 if (READ_BIT(tmp_cfgr, ADC_CFGR_AUTDLY) == 0UL)
1711 {
1712 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS));
1713 }
1714 }
1715
1716
1717 return HAL_OK;
1718 }
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740 HAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef *hadc, uint32_t EventType, uint32_t Timeout)
1741 {
1742 uint32_t tickstart;
1743
1744
1745 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
1746 assert_param(IS_ADC_EVENT_TYPE(EventType));
1747
1748
1749 tickstart = HAL_GetTick();
1750
1751
1752 while (__HAL_ADC_GET_FLAG(hadc, EventType) == 0UL)
1753 {
1754
1755 if (Timeout != HAL_MAX_DELAY)
1756 {
1757 if (((HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0UL))
1758 {
1759
1760 if(__HAL_ADC_GET_FLAG(hadc, EventType) == 0UL)
1761 {
1762
1763 SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);
1764
1765
1766 __HAL_UNLOCK(hadc);
1767
1768 return HAL_TIMEOUT;
1769 }
1770 }
1771 }
1772 }
1773
1774 switch (EventType)
1775 {
1776
1777 case ADC_EOSMP_EVENT:
1778
1779 SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOSMP);
1780
1781
1782 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOSMP);
1783
1784 break;
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796 case ADC_AWD_EVENT:
1797
1798 SET_BIT(hadc->State, HAL_ADC_STATE_AWD1);
1799
1800
1801 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_AWD1);
1802
1803 break;
1804
1805
1806 case ADC_AWD2_EVENT:
1807
1808 SET_BIT(hadc->State, HAL_ADC_STATE_AWD2);
1809
1810
1811 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_AWD2);
1812
1813 break;
1814
1815
1816 case ADC_AWD3_EVENT:
1817
1818 SET_BIT(hadc->State, HAL_ADC_STATE_AWD3);
1819
1820
1821 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_AWD3);
1822
1823 break;
1824
1825
1826 case ADC_JQOVF_EVENT:
1827
1828 SET_BIT(hadc->State, HAL_ADC_STATE_INJ_JQOVF);
1829
1830
1831 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_JQOVF);
1832
1833
1834 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JQOVF);
1835
1836 break;
1837
1838
1839 default:
1840
1841
1842
1843
1844 if (hadc->Init.Overrun == ADC_OVR_DATA_PRESERVED)
1845 {
1846
1847 SET_BIT(hadc->State, HAL_ADC_STATE_REG_OVR);
1848
1849
1850 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_OVR);
1851 }
1852 else
1853 {
1854
1855
1856
1857 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_OVR);
1858 }
1859 break;
1860 }
1861
1862
1863 return HAL_OK;
1864 }
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889 HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef *hadc)
1890 {
1891 HAL_StatusTypeDef tmp_hal_status;
1892 const ADC_TypeDef *tmpADC_Master;
1893 uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
1894
1895
1896 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
1897
1898
1899 if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
1900 {
1901
1902 __HAL_LOCK(hadc);
1903
1904
1905 tmp_hal_status = ADC_Enable(hadc);
1906
1907
1908 if (tmp_hal_status == HAL_OK)
1909 {
1910
1911
1912
1913 ADC_STATE_CLR_SET(hadc->State,
1914 HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP,
1915 HAL_ADC_STATE_REG_BUSY);
1916
1917
1918
1919
1920 if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
1921 || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
1922 )
1923 {
1924 CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);
1925 }
1926
1927
1928
1929 if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) != 0UL)
1930 {
1931
1932 CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));
1933 }
1934 else
1935 {
1936
1937 ADC_CLEAR_ERRORCODE(hadc);
1938 }
1939
1940
1941
1942 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR));
1943
1944
1945
1946
1947 __HAL_UNLOCK(hadc);
1948
1949
1950 __HAL_ADC_DISABLE_IT(hadc, (ADC_IT_EOC | ADC_IT_EOS | ADC_IT_OVR));
1951
1952
1953 switch (hadc->Init.EOCSelection)
1954 {
1955 case ADC_EOC_SEQ_CONV:
1956 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_EOS);
1957 break;
1958
1959 default:
1960 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_EOC);
1961 break;
1962 }
1963
1964
1965
1966
1967
1968 if (hadc->Init.Overrun == ADC_OVR_DATA_PRESERVED)
1969 {
1970 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR);
1971 }
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981 if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
1982 || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
1983 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_SIMULT)
1984 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_ALTERN)
1985 )
1986 {
1987
1988 if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_JAUTO) != 0UL)
1989 {
1990 ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);
1991
1992
1993
1994
1995
1996 switch (hadc->Init.EOCSelection)
1997 {
1998 case ADC_EOC_SEQ_CONV:
1999 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC);
2000 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOS);
2001 break;
2002
2003 default:
2004 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOS);
2005 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOC);
2006 break;
2007 }
2008 }
2009
2010
2011 LL_ADC_REG_StartConversion(hadc->Instance);
2012 }
2013 else
2014 {
2015
2016 SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);
2017
2018
2019 tmpADC_Master = __LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance);
2020 if (READ_BIT(tmpADC_Master->CFGR, ADC_CFGR_JAUTO) != 0UL)
2021 {
2022
2023
2024 ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);
2025
2026 switch (hadc->Init.EOCSelection)
2027 {
2028 case ADC_EOC_SEQ_CONV:
2029 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC);
2030 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOS);
2031 break;
2032
2033 default:
2034 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOS);
2035 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOC);
2036 break;
2037 }
2038 }
2039 }
2040 }
2041 else
2042 {
2043
2044 __HAL_UNLOCK(hadc);
2045 }
2046
2047 }
2048 else
2049 {
2050 tmp_hal_status = HAL_BUSY;
2051 }
2052
2053
2054 return tmp_hal_status;
2055 }
2056
2057
2058
2059
2060
2061
2062
2063
2064 HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef *hadc)
2065 {
2066 HAL_StatusTypeDef tmp_hal_status;
2067
2068
2069 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
2070
2071
2072 __HAL_LOCK(hadc);
2073
2074
2075 tmp_hal_status = ADC_ConversionStop(hadc, ADC_REGULAR_INJECTED_GROUP);
2076
2077
2078 if (tmp_hal_status == HAL_OK)
2079 {
2080
2081
2082 __HAL_ADC_DISABLE_IT(hadc, (ADC_IT_EOC | ADC_IT_EOS | ADC_IT_OVR));
2083
2084
2085 tmp_hal_status = ADC_Disable(hadc);
2086
2087
2088 if (tmp_hal_status == HAL_OK)
2089 {
2090
2091 ADC_STATE_CLR_SET(hadc->State,
2092 HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY,
2093 HAL_ADC_STATE_READY);
2094 }
2095 }
2096
2097
2098 __HAL_UNLOCK(hadc);
2099
2100
2101 return tmp_hal_status;
2102 }
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117 HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length)
2118 {
2119 HAL_StatusTypeDef tmp_hal_status;
2120 uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
2121
2122
2123 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
2124
2125
2126 if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
2127 {
2128
2129 __HAL_LOCK(hadc);
2130
2131
2132
2133 if ((tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
2134 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_SIMULT)
2135 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_ALTERN)
2136 )
2137 {
2138
2139 tmp_hal_status = ADC_Enable(hadc);
2140
2141
2142 if (tmp_hal_status == HAL_OK)
2143 {
2144
2145
2146
2147 ADC_STATE_CLR_SET(hadc->State,
2148 HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP,
2149 HAL_ADC_STATE_REG_BUSY);
2150
2151
2152
2153
2154 if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
2155 || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
2156 )
2157 {
2158 CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);
2159 }
2160
2161
2162 if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) != 0UL)
2163 {
2164
2165 CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));
2166 }
2167 else
2168 {
2169
2170 ADC_CLEAR_ERRORCODE(hadc);
2171 }
2172
2173
2174 hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt;
2175
2176
2177 hadc->DMA_Handle->XferHalfCpltCallback = ADC_DMAHalfConvCplt;
2178
2179
2180 hadc->DMA_Handle->XferErrorCallback = ADC_DMAError;
2181
2182
2183
2184
2185
2186
2187
2188
2189 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS | ADC_FLAG_OVR));
2190
2191
2192
2193
2194 __HAL_UNLOCK(hadc);
2195
2196
2197
2198
2199 __HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR);
2200
2201
2202 #if defined(ADC_VER_V5_V90)
2203 if (hadc->Instance == ADC3)
2204 {
2205 LL_ADC_REG_SetDMATransferMode(hadc->Instance, ADC3_CFGR_DMACONTREQ((uint32_t)hadc->Init.DMAContinuousRequests));
2206 LL_ADC_EnableDMAReq(hadc->Instance);
2207 }
2208 else
2209 {
2210 LL_ADC_REG_SetDataTransferMode(hadc->Instance, ADC_CFGR_DMACONTREQ((uint32_t)hadc->Init.ConversionDataManagement));
2211 }
2212
2213 #else
2214 LL_ADC_REG_SetDataTransferMode(hadc->Instance, (uint32_t)hadc->Init.ConversionDataManagement);
2215 #endif
2216
2217
2218
2219 tmp_hal_status = HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length);
2220
2221
2222
2223
2224
2225
2226 LL_ADC_REG_StartConversion(hadc->Instance);
2227 }
2228 else
2229 {
2230
2231 __HAL_UNLOCK(hadc);
2232 }
2233
2234 }
2235 else
2236 {
2237 tmp_hal_status = HAL_ERROR;
2238
2239 __HAL_UNLOCK(hadc);
2240 }
2241 }
2242 else
2243 {
2244 tmp_hal_status = HAL_BUSY;
2245 }
2246
2247
2248 return tmp_hal_status;
2249 }
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264 HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef *hadc)
2265 {
2266 HAL_StatusTypeDef tmp_hal_status;
2267
2268
2269 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
2270
2271
2272 __HAL_LOCK(hadc);
2273
2274
2275 tmp_hal_status = ADC_ConversionStop(hadc, ADC_REGULAR_INJECTED_GROUP);
2276
2277
2278 if (tmp_hal_status == HAL_OK)
2279 {
2280
2281 MODIFY_REG(hadc->Instance->CFGR, ADC_CFGR_DMNGT_0 | ADC_CFGR_DMNGT_1, 0UL);
2282
2283
2284
2285 if (hadc->DMA_Handle->State == HAL_DMA_STATE_BUSY)
2286 {
2287 tmp_hal_status = HAL_DMA_Abort(hadc->DMA_Handle);
2288
2289
2290 if (tmp_hal_status != HAL_OK)
2291 {
2292
2293 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA);
2294 }
2295 }
2296
2297
2298 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_OVR);
2299
2300
2301
2302
2303 if (tmp_hal_status == HAL_OK)
2304 {
2305 tmp_hal_status = ADC_Disable(hadc);
2306 }
2307 else
2308 {
2309 (void)ADC_Disable(hadc);
2310 }
2311
2312
2313 if (tmp_hal_status == HAL_OK)
2314 {
2315
2316 ADC_STATE_CLR_SET(hadc->State,
2317 HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY,
2318 HAL_ADC_STATE_READY);
2319 }
2320
2321 }
2322
2323
2324 __HAL_UNLOCK(hadc);
2325
2326
2327 return tmp_hal_status;
2328 }
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349 uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef *hadc)
2350 {
2351
2352 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
2353
2354
2355
2356
2357
2358 return hadc->Instance->DR;
2359 }
2360
2361
2362
2363
2364
2365
2366 void HAL_ADC_IRQHandler(ADC_HandleTypeDef *hadc)
2367 {
2368 uint32_t overrun_error = 0UL;
2369 uint32_t tmp_isr = hadc->Instance->ISR;
2370 uint32_t tmp_ier = hadc->Instance->IER;
2371 uint32_t tmp_adc_inj_is_trigger_source_sw_start;
2372 uint32_t tmp_adc_reg_is_trigger_source_sw_start;
2373 uint32_t tmp_cfgr;
2374 const ADC_TypeDef *tmpADC_Master;
2375 uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
2376
2377
2378 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
2379 assert_param(IS_ADC_EOC_SELECTION(hadc->Init.EOCSelection));
2380
2381
2382 if (((tmp_isr & ADC_FLAG_EOSMP) == ADC_FLAG_EOSMP) && ((tmp_ier & ADC_IT_EOSMP) == ADC_IT_EOSMP))
2383 {
2384
2385 if ((hadc->State & HAL_ADC_STATE_ERROR_INTERNAL) == 0UL)
2386 {
2387
2388 SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOSMP);
2389 }
2390
2391
2392 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
2393 hadc->EndOfSamplingCallback(hadc);
2394 #else
2395 HAL_ADCEx_EndOfSamplingCallback(hadc);
2396 #endif
2397
2398
2399 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOSMP);
2400 }
2401
2402
2403 if ((((tmp_isr & ADC_FLAG_EOC) == ADC_FLAG_EOC) && ((tmp_ier & ADC_IT_EOC) == ADC_IT_EOC)) ||
2404 (((tmp_isr & ADC_FLAG_EOS) == ADC_FLAG_EOS) && ((tmp_ier & ADC_IT_EOS) == ADC_IT_EOS)))
2405 {
2406
2407 if ((hadc->State & HAL_ADC_STATE_ERROR_INTERNAL) == 0UL)
2408 {
2409
2410 SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);
2411 }
2412
2413
2414
2415
2416 if (LL_ADC_REG_IsTriggerSourceSWStart(hadc->Instance) != 0UL)
2417 {
2418
2419
2420
2421 if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
2422 || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
2423 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_SIMULT)
2424 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_INJ_ALTERN)
2425 )
2426 {
2427
2428 tmp_cfgr = READ_REG(hadc->Instance->CFGR);
2429 }
2430 else
2431 {
2432
2433 tmpADC_Master = __LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance);
2434 tmp_cfgr = READ_REG(tmpADC_Master->CFGR);
2435 }
2436
2437
2438 if (READ_BIT(tmp_cfgr, ADC_CFGR_CONT) != ADC_CFGR_CONT)
2439 {
2440
2441 if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOS))
2442 {
2443
2444
2445 if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
2446 {
2447
2448
2449
2450
2451 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC | ADC_IT_EOS);
2452
2453
2454 CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
2455
2456 if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) == 0UL)
2457 {
2458 SET_BIT(hadc->State, HAL_ADC_STATE_READY);
2459 }
2460 }
2461 else
2462 {
2463
2464 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
2465
2466
2467 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
2468 }
2469 }
2470 }
2471 }
2472
2473
2474
2475
2476
2477
2478 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
2479 hadc->ConvCpltCallback(hadc);
2480 #else
2481 HAL_ADC_ConvCpltCallback(hadc);
2482 #endif
2483
2484
2485
2486
2487
2488
2489 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOC | ADC_FLAG_EOS));
2490 }
2491
2492
2493 if ((((tmp_isr & ADC_FLAG_JEOC) == ADC_FLAG_JEOC) && ((tmp_ier & ADC_IT_JEOC) == ADC_IT_JEOC)) ||
2494 (((tmp_isr & ADC_FLAG_JEOS) == ADC_FLAG_JEOS) && ((tmp_ier & ADC_IT_JEOS) == ADC_IT_JEOS)))
2495 {
2496
2497 if ((hadc->State & HAL_ADC_STATE_ERROR_INTERNAL) == 0UL)
2498 {
2499
2500 SET_BIT(hadc->State, HAL_ADC_STATE_INJ_EOC);
2501 }
2502
2503
2504 tmp_adc_inj_is_trigger_source_sw_start = LL_ADC_INJ_IsTriggerSourceSWStart(hadc->Instance);
2505 tmp_adc_reg_is_trigger_source_sw_start = LL_ADC_REG_IsTriggerSourceSWStart(hadc->Instance);
2506
2507
2508
2509 if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
2510 || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
2511 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_REG_SIMULT)
2512 || (tmp_multimode_config == LL_ADC_MULTI_DUAL_REG_INTERL)
2513 )
2514 {
2515 tmp_cfgr = READ_REG(hadc->Instance->CFGR);
2516 }
2517 else
2518 {
2519 tmpADC_Master = __LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance);
2520 tmp_cfgr = READ_REG(tmpADC_Master->CFGR);
2521 }
2522
2523
2524
2525
2526
2527
2528 if (tmp_adc_inj_is_trigger_source_sw_start != 0UL)
2529 {
2530 if ((READ_BIT(tmp_cfgr, ADC_CFGR_JAUTO) == 0UL) ||
2531 ((tmp_adc_reg_is_trigger_source_sw_start != 0UL) &&
2532 (READ_BIT(tmp_cfgr, ADC_CFGR_CONT) == 0UL)))
2533 {
2534
2535 if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_JEOS))
2536 {
2537
2538
2539
2540
2541
2542
2543 if (READ_BIT(tmp_cfgr, ADC_CFGR_JQM) == 0UL)
2544 {
2545
2546
2547 if (LL_ADC_INJ_IsConversionOngoing(hadc->Instance) == 0UL)
2548 {
2549
2550 __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC | ADC_IT_JEOS);
2551
2552
2553 CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY);
2554
2555 if ((hadc->State & HAL_ADC_STATE_REG_BUSY) == 0UL)
2556 {
2557 SET_BIT(hadc->State, HAL_ADC_STATE_READY);
2558 }
2559 }
2560 else
2561 {
2562
2563 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
2564
2565
2566 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
2567 }
2568 }
2569 }
2570 }
2571 }
2572
2573
2574
2575
2576
2577
2578
2579 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
2580 hadc->InjectedConvCpltCallback(hadc);
2581 #else
2582 HAL_ADCEx_InjectedConvCpltCallback(hadc);
2583 #endif
2584
2585
2586 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOC | ADC_FLAG_JEOS);
2587 }
2588
2589
2590 if (((tmp_isr & ADC_FLAG_AWD1) == ADC_FLAG_AWD1) && ((tmp_ier & ADC_IT_AWD1) == ADC_IT_AWD1))
2591 {
2592
2593 SET_BIT(hadc->State, HAL_ADC_STATE_AWD1);
2594
2595
2596 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
2597 hadc->LevelOutOfWindowCallback(hadc);
2598 #else
2599 HAL_ADC_LevelOutOfWindowCallback(hadc);
2600 #endif
2601
2602
2603 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_AWD1);
2604 }
2605
2606
2607 if (((tmp_isr & ADC_FLAG_AWD2) == ADC_FLAG_AWD2) && ((tmp_ier & ADC_IT_AWD2) == ADC_IT_AWD2))
2608 {
2609
2610 SET_BIT(hadc->State, HAL_ADC_STATE_AWD2);
2611
2612
2613 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
2614 hadc->LevelOutOfWindow2Callback(hadc);
2615 #else
2616 HAL_ADCEx_LevelOutOfWindow2Callback(hadc);
2617 #endif
2618
2619
2620 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_AWD2);
2621 }
2622
2623
2624 if (((tmp_isr & ADC_FLAG_AWD3) == ADC_FLAG_AWD3) && ((tmp_ier & ADC_IT_AWD3) == ADC_IT_AWD3))
2625 {
2626
2627 SET_BIT(hadc->State, HAL_ADC_STATE_AWD3);
2628
2629
2630 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
2631 hadc->LevelOutOfWindow3Callback(hadc);
2632 #else
2633 HAL_ADCEx_LevelOutOfWindow3Callback(hadc);
2634 #endif
2635
2636
2637 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_AWD3);
2638 }
2639
2640
2641 if (((tmp_isr & ADC_FLAG_OVR) == ADC_FLAG_OVR) && ((tmp_ier & ADC_IT_OVR) == ADC_IT_OVR))
2642 {
2643
2644
2645
2646
2647
2648
2649 if (hadc->Init.Overrun == ADC_OVR_DATA_PRESERVED)
2650 {
2651 overrun_error = 1UL;
2652 }
2653 else
2654 {
2655
2656 if (tmp_multimode_config != LL_ADC_MULTI_INDEPENDENT)
2657 {
2658
2659
2660 if (LL_ADC_GetMultiDMATransfer(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) != LL_ADC_MULTI_REG_DMA_EACH_ADC)
2661 {
2662 overrun_error = 1UL;
2663 }
2664 }
2665 else
2666 {
2667
2668 if ((hadc->Instance->CFGR & ADC_CFGR_DMNGT) != 0UL)
2669 {
2670 overrun_error = 1UL;
2671 }
2672 }
2673 }
2674
2675 if (overrun_error == 1UL)
2676 {
2677
2678 SET_BIT(hadc->State, HAL_ADC_STATE_REG_OVR);
2679
2680
2681 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_OVR);
2682
2683
2684
2685
2686
2687
2688 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
2689 hadc->ErrorCallback(hadc);
2690 #else
2691 HAL_ADC_ErrorCallback(hadc);
2692 #endif
2693 }
2694
2695
2696 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_OVR);
2697 }
2698
2699
2700 if (((tmp_isr & ADC_FLAG_JQOVF) == ADC_FLAG_JQOVF) && ((tmp_ier & ADC_IT_JQOVF) == ADC_IT_JQOVF))
2701 {
2702
2703 SET_BIT(hadc->State, HAL_ADC_STATE_INJ_JQOVF);
2704
2705
2706 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_JQOVF);
2707
2708
2709 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JQOVF);
2710
2711
2712 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
2713 hadc->InjectedQueueOverflowCallback(hadc);
2714 #else
2715 HAL_ADCEx_InjectedQueueOverflowCallback(hadc);
2716 #endif
2717 }
2718
2719 }
2720
2721
2722
2723
2724
2725
2726 __weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
2727 {
2728
2729 UNUSED(hadc);
2730
2731
2732
2733
2734 }
2735
2736
2737
2738
2739
2740
2741 __weak void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc)
2742 {
2743
2744 UNUSED(hadc);
2745
2746
2747
2748
2749 }
2750
2751
2752
2753
2754
2755
2756 __weak void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef *hadc)
2757 {
2758
2759 UNUSED(hadc);
2760
2761
2762
2763
2764 }
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778 __weak void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc)
2779 {
2780
2781 UNUSED(hadc);
2782
2783
2784
2785
2786 }
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825 HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef *hadc, ADC_ChannelConfTypeDef *sConfig)
2826 {
2827 HAL_StatusTypeDef tmp_hal_status = HAL_OK;
2828 uint32_t tmpOffsetShifted;
2829 uint32_t tmp_config_internal_channel;
2830 __IO uint32_t wait_loop_index = 0;
2831 uint32_t tmp_adc_is_conversion_on_going_regular;
2832 uint32_t tmp_adc_is_conversion_on_going_injected;
2833
2834
2835 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
2836 assert_param(IS_ADC_REGULAR_RANK(sConfig->Rank));
2837 assert_param(IS_ADC_SAMPLE_TIME(sConfig->SamplingTime));
2838 assert_param(IS_ADC_SINGLE_DIFFERENTIAL(sConfig->SingleDiff));
2839 assert_param(IS_ADC_OFFSET_NUMBER(sConfig->OffsetNumber));
2840
2841 if (hadc->Init.OversamplingMode == ENABLE)
2842 {
2843 assert_param(IS_ADC_RANGE(ADC_GET_RESOLUTION(hadc), sConfig->Offset / (hadc->Init.Oversampling.Ratio + 1U)));
2844 }
2845 else
2846 {
2847 #if defined(ADC_VER_V5_V90)
2848 if (hadc->Instance == ADC3)
2849 {
2850 assert_param(IS_ADC3_RANGE(ADC_GET_RESOLUTION(hadc), sConfig->Offset));
2851 }
2852 else
2853 #endif
2854 {
2855 assert_param(IS_ADC_RANGE(ADC_GET_RESOLUTION(hadc), sConfig->Offset));
2856 }
2857 }
2858
2859
2860
2861 assert_param(!((sConfig->OffsetNumber != ADC_OFFSET_NONE) && (hadc->Init.OversamplingMode == ENABLE)));
2862
2863
2864 if (sConfig->SingleDiff != ADC_DIFFERENTIAL_ENDED)
2865 {
2866 assert_param(IS_ADC_CHANNEL(sConfig->Channel));
2867 }
2868 else
2869 {
2870 if (hadc->Instance == ADC1)
2871 {
2872 assert_param(IS_ADC1_DIFF_CHANNEL(sConfig->Channel));
2873 }
2874 if (hadc->Instance == ADC2)
2875 {
2876 assert_param(IS_ADC2_DIFF_CHANNEL(sConfig->Channel));
2877 }
2878 #if defined(ADC3)
2879
2880 if (hadc->Instance == ADC3)
2881 {
2882 assert_param(IS_ADC3_DIFF_CHANNEL(sConfig->Channel));
2883 }
2884 #endif
2885 }
2886
2887
2888 __HAL_LOCK(hadc);
2889
2890
2891
2892
2893
2894
2895 if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) == 0UL)
2896 {
2897 if (!(__LL_ADC_IS_CHANNEL_INTERNAL(sConfig->Channel)))
2898 {
2899 #if defined(ADC_VER_V5_V90)
2900 if (hadc->Instance != ADC3)
2901 {
2902
2903 hadc->Instance->PCSEL_RES0 |= (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) & 0x1FUL));
2904 }
2905 #else
2906
2907 hadc->Instance->PCSEL |= (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) & 0x1FUL));
2908 #endif
2909 }
2910
2911
2912 LL_ADC_REG_SetSequencerRanks(hadc->Instance, sConfig->Rank, sConfig->Channel);
2913
2914
2915
2916
2917
2918
2919 tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
2920 tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
2921 if ((tmp_adc_is_conversion_on_going_regular == 0UL)
2922 && (tmp_adc_is_conversion_on_going_injected == 0UL)
2923 )
2924 {
2925
2926 LL_ADC_SetChannelSamplingTime(hadc->Instance, sConfig->Channel, sConfig->SamplingTime);
2927
2928
2929
2930
2931
2932 #if defined(ADC_VER_V5_V90)
2933 if (hadc->Instance == ADC3)
2934 {
2935 tmpOffsetShifted = ADC3_OFFSET_SHIFT_RESOLUTION(hadc, (uint32_t)sConfig->Offset);
2936 }
2937 else
2938 #endif
2939 {
2940 tmpOffsetShifted = ADC_OFFSET_SHIFT_RESOLUTION(hadc, (uint32_t)sConfig->Offset);
2941 }
2942
2943 if (sConfig->OffsetNumber != ADC_OFFSET_NONE)
2944 {
2945
2946 LL_ADC_SetOffset(hadc->Instance, sConfig->OffsetNumber, sConfig->Channel, tmpOffsetShifted);
2947
2948 #if defined(ADC_VER_V5_V90)
2949 if (hadc->Instance == ADC3)
2950 {
2951 assert_param(IS_ADC3_OFFSET_SIGN(sConfig->OffsetSign));
2952 assert_param(IS_FUNCTIONAL_STATE(sConfig->OffsetSaturation));
2953
2954 LL_ADC_SetOffsetSign(hadc->Instance, sConfig->OffsetNumber, sConfig->OffsetSign);
2955 LL_ADC_SetOffsetSaturation(hadc->Instance, sConfig->OffsetNumber, (sConfig->OffsetSaturation == ENABLE) ? LL_ADC_OFFSET_SATURATION_ENABLE : LL_ADC_OFFSET_SATURATION_DISABLE);
2956 }
2957 else
2958 #endif
2959 {
2960 assert_param(IS_FUNCTIONAL_STATE(sConfig->OffsetSignedSaturation));
2961
2962 LL_ADC_SetOffsetSignedSaturation(hadc->Instance, sConfig->OffsetNumber, (sConfig->OffsetSignedSaturation == ENABLE) ? LL_ADC_OFFSET_SIGNED_SATURATION_ENABLE : LL_ADC_OFFSET_SIGNED_SATURATION_DISABLE);
2963
2964 assert_param(IS_FUNCTIONAL_STATE(sConfig->OffsetRightShift));
2965
2966 LL_ADC_SetDataRightShift(hadc->Instance, sConfig->OffsetNumber, (sConfig->OffsetRightShift == ENABLE) ? LL_ADC_OFFSET_RSHIFT_ENABLE : LL_ADC_OFFSET_RSHIFT_DISABLE);
2967 }
2968
2969 }
2970 else
2971 {
2972
2973
2974
2975 #if defined(ADC_VER_V5_V90)
2976 if (hadc->Instance == ADC3)
2977 {
2978 if (__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_1)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfig->Channel))
2979 {
2980 LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_1, LL_ADC_OFFSET_DISABLE);
2981 }
2982 if (__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_2)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfig->Channel))
2983 {
2984 LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_2, LL_ADC_OFFSET_DISABLE);
2985 }
2986 if (__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_3)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfig->Channel))
2987 {
2988 LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_3, LL_ADC_OFFSET_DISABLE);
2989 }
2990 if (__LL_ADC_CHANNEL_TO_DECIMAL_NB(LL_ADC_GetOffsetChannel(hadc->Instance, LL_ADC_OFFSET_4)) == __LL_ADC_CHANNEL_TO_DECIMAL_NB(sConfig->Channel))
2991 {
2992 LL_ADC_SetOffsetState(hadc->Instance, LL_ADC_OFFSET_4, LL_ADC_OFFSET_DISABLE);
2993 }
2994 }
2995 else
2996 #endif
2997 {
2998 if (((hadc->Instance->OFR1) & ADC_OFR1_OFFSET1_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
2999 {
3000 CLEAR_BIT(hadc->Instance->OFR1, ADC_OFR1_SSATE);
3001 }
3002 if (((hadc->Instance->OFR2) & ADC_OFR2_OFFSET2_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
3003 {
3004 CLEAR_BIT(hadc->Instance->OFR2, ADC_OFR2_SSATE);
3005 }
3006 if (((hadc->Instance->OFR3) & ADC_OFR3_OFFSET3_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
3007 {
3008 CLEAR_BIT(hadc->Instance->OFR3, ADC_OFR3_SSATE);
3009 }
3010 if (((hadc->Instance->OFR4) & ADC_OFR4_OFFSET4_CH) == ADC_OFR_CHANNEL(sConfig->Channel))
3011 {
3012 CLEAR_BIT(hadc->Instance->OFR4, ADC_OFR4_SSATE);
3013 }
3014 }
3015
3016 }
3017 }
3018
3019
3020
3021
3022
3023 if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
3024 {
3025
3026 LL_ADC_SetChannelSingleDiff(hadc->Instance, sConfig->Channel, sConfig->SingleDiff);
3027
3028
3029 if (sConfig->SingleDiff == ADC_DIFFERENTIAL_ENDED)
3030 {
3031
3032
3033 LL_ADC_SetChannelSamplingTime(hadc->Instance,
3034 (uint32_t)(__LL_ADC_DECIMAL_NB_TO_CHANNEL((__LL_ADC_CHANNEL_TO_DECIMAL_NB((uint32_t)sConfig->Channel) + 1UL) & 0x1FUL)),
3035 sConfig->SamplingTime);
3036 }
3037
3038
3039
3040
3041
3042
3043
3044 if (__LL_ADC_IS_CHANNEL_INTERNAL(sConfig->Channel))
3045 {
3046
3047
3048 tmp_config_internal_channel = LL_ADC_GetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
3049
3050
3051
3052 if (__LL_ADC_IS_ENABLED_ALL_COMMON_INSTANCE(__LL_ADC_COMMON_INSTANCE(hadc->Instance)) == 0UL)
3053 {
3054
3055
3056 if ((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_TEMPSENSOR) == 0UL))
3057 {
3058 if (ADC_TEMPERATURE_SENSOR_INSTANCE(hadc))
3059 {
3060 LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_TEMPSENSOR | tmp_config_internal_channel);
3061
3062
3063
3064
3065
3066
3067 wait_loop_index = ((LL_ADC_DELAY_TEMPSENSOR_STAB_US / 10UL) * ((SystemCoreClock / (100000UL * 2UL)) + 1UL));
3068 while (wait_loop_index != 0UL)
3069 {
3070 wait_loop_index--;
3071 }
3072 }
3073 }
3074 else if ((sConfig->Channel == ADC_CHANNEL_VBAT) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_VBAT) == 0UL))
3075 {
3076 if (ADC_BATTERY_VOLTAGE_INSTANCE(hadc))
3077 {
3078 LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VBAT | tmp_config_internal_channel);
3079 }
3080 }
3081 else if ((sConfig->Channel == ADC_CHANNEL_VREFINT) && ((tmp_config_internal_channel & LL_ADC_PATH_INTERNAL_VREFINT) == 0UL))
3082 {
3083 if (ADC_VREFINT_INSTANCE(hadc))
3084 {
3085 LL_ADC_SetCommonPathInternalCh(__LL_ADC_COMMON_INSTANCE(hadc->Instance), LL_ADC_PATH_INTERNAL_VREFINT | tmp_config_internal_channel);
3086 }
3087 }
3088 else
3089 {
3090
3091 }
3092 }
3093
3094
3095
3096 else
3097 {
3098
3099 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
3100
3101 tmp_hal_status = HAL_ERROR;
3102 }
3103 }
3104 }
3105 }
3106
3107
3108
3109
3110 else
3111 {
3112
3113 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
3114
3115 tmp_hal_status = HAL_ERROR;
3116 }
3117
3118
3119 __HAL_UNLOCK(hadc);
3120
3121
3122 return tmp_hal_status;
3123 }
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141 HAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef *hadc, ADC_AnalogWDGConfTypeDef *AnalogWDGConfig)
3142 {
3143 HAL_StatusTypeDef tmp_hal_status = HAL_OK;
3144 uint32_t tmpAWDHighThresholdShifted;
3145 uint32_t tmpAWDLowThresholdShifted;
3146 uint32_t tmp_adc_is_conversion_on_going_regular;
3147 uint32_t tmp_adc_is_conversion_on_going_injected;
3148
3149
3150 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
3151 assert_param(IS_ADC_ANALOG_WATCHDOG_NUMBER(AnalogWDGConfig->WatchdogNumber));
3152 assert_param(IS_ADC_ANALOG_WATCHDOG_MODE(AnalogWDGConfig->WatchdogMode));
3153 assert_param(IS_FUNCTIONAL_STATE(AnalogWDGConfig->ITMode));
3154
3155 if ((AnalogWDGConfig->WatchdogMode == ADC_ANALOGWATCHDOG_SINGLE_REG) ||
3156 (AnalogWDGConfig->WatchdogMode == ADC_ANALOGWATCHDOG_SINGLE_INJEC) ||
3157 (AnalogWDGConfig->WatchdogMode == ADC_ANALOGWATCHDOG_SINGLE_REGINJEC))
3158 {
3159 assert_param(IS_ADC_CHANNEL(AnalogWDGConfig->Channel));
3160 }
3161
3162 #if defined(ADC_VER_V5_V90)
3163
3164 if (hadc->Instance == ADC3)
3165 {
3166
3167 if (hadc->Init.OversamplingMode == ENABLE)
3168 {
3169
3170
3171 assert_param(IS_ADC3_RANGE(ADC_GET_RESOLUTION(hadc), AnalogWDGConfig->HighThreshold / (hadc->Init.Oversampling.Ratio + 1UL)));
3172 assert_param(IS_ADC3_RANGE(ADC_GET_RESOLUTION(hadc), AnalogWDGConfig->LowThreshold / (hadc->Init.Oversampling.Ratio + 1UL)));
3173 }
3174 else
3175 {
3176
3177 assert_param(IS_ADC3_RANGE(ADC_GET_RESOLUTION(hadc), AnalogWDGConfig->HighThreshold));
3178 assert_param(IS_ADC3_RANGE(ADC_GET_RESOLUTION(hadc), AnalogWDGConfig->LowThreshold));
3179 }
3180 }
3181 else
3182 #endif
3183 {
3184
3185 if (hadc->Init.OversamplingMode == ENABLE)
3186 {
3187
3188
3189 assert_param(IS_ADC_RANGE(ADC_GET_RESOLUTION(hadc), AnalogWDGConfig->HighThreshold / (hadc->Init.Oversampling.Ratio + 1UL)));
3190 assert_param(IS_ADC_RANGE(ADC_GET_RESOLUTION(hadc), AnalogWDGConfig->LowThreshold / (hadc->Init.Oversampling.Ratio + 1UL)));
3191 }
3192 else
3193 {
3194
3195 assert_param(IS_ADC_RANGE(ADC_GET_RESOLUTION(hadc), AnalogWDGConfig->HighThreshold));
3196 assert_param(IS_ADC_RANGE(ADC_GET_RESOLUTION(hadc), AnalogWDGConfig->LowThreshold));
3197 }
3198 }
3199
3200
3201 __HAL_LOCK(hadc);
3202
3203
3204
3205
3206
3207
3208 tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
3209 tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
3210 if ((tmp_adc_is_conversion_on_going_regular == 0UL)
3211 && (tmp_adc_is_conversion_on_going_injected == 0UL)
3212 )
3213 {
3214
3215 if (AnalogWDGConfig->WatchdogNumber == ADC_ANALOGWATCHDOG_1)
3216 {
3217
3218
3219
3220 switch (AnalogWDGConfig->WatchdogMode)
3221 {
3222 case ADC_ANALOGWATCHDOG_SINGLE_REG:
3223 LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, LL_ADC_AWD1, __LL_ADC_ANALOGWD_CHANNEL_GROUP(AnalogWDGConfig->Channel,
3224 LL_ADC_GROUP_REGULAR));
3225 break;
3226
3227 case ADC_ANALOGWATCHDOG_SINGLE_INJEC:
3228 LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, LL_ADC_AWD1, __LL_ADC_ANALOGWD_CHANNEL_GROUP(AnalogWDGConfig->Channel,
3229 LL_ADC_GROUP_INJECTED));
3230 break;
3231
3232 case ADC_ANALOGWATCHDOG_SINGLE_REGINJEC:
3233 LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, LL_ADC_AWD1, __LL_ADC_ANALOGWD_CHANNEL_GROUP(AnalogWDGConfig->Channel,
3234 LL_ADC_GROUP_REGULAR_INJECTED));
3235 break;
3236
3237 case ADC_ANALOGWATCHDOG_ALL_REG:
3238 LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, LL_ADC_AWD1, LL_ADC_AWD_ALL_CHANNELS_REG);
3239 break;
3240
3241 case ADC_ANALOGWATCHDOG_ALL_INJEC:
3242 LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, LL_ADC_AWD1, LL_ADC_AWD_ALL_CHANNELS_INJ);
3243 break;
3244
3245 case ADC_ANALOGWATCHDOG_ALL_REGINJEC:
3246 LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, LL_ADC_AWD1, LL_ADC_AWD_ALL_CHANNELS_REG_INJ);
3247 break;
3248
3249 default:
3250 LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, LL_ADC_AWD1, LL_ADC_AWD_DISABLE);
3251 break;
3252 }
3253
3254
3255
3256
3257 tmpAWDHighThresholdShifted = ADC_AWD1THRESHOLD_SHIFT_RESOLUTION(hadc, AnalogWDGConfig->HighThreshold);
3258 tmpAWDLowThresholdShifted = ADC_AWD1THRESHOLD_SHIFT_RESOLUTION(hadc, AnalogWDGConfig->LowThreshold);
3259
3260
3261 #if defined(ADC_VER_V5_V90)
3262 if (hadc->Instance == ADC3)
3263 {
3264 MODIFY_REG(hadc->Instance->LTR1_TR1,
3265 ADC3_TR1_AWDFILT,
3266 AnalogWDGConfig->FilteringConfig);
3267 MODIFY_REG(hadc->Instance->LTR1_TR1, ADC3_TR1_LT1, tmpAWDLowThresholdShifted);
3268 MODIFY_REG(hadc->Instance->LTR1_TR1, ADC3_TR1_HT1, (tmpAWDHighThresholdShifted << ADC3_TR1_HT1_Pos));
3269 }
3270 else
3271 {
3272
3273 MODIFY_REG(hadc->Instance->LTR1_TR1, ADC_LTR_LT, tmpAWDLowThresholdShifted);
3274 MODIFY_REG(hadc->Instance->HTR1_TR2, ADC_HTR_HT, tmpAWDHighThresholdShifted);
3275 }
3276 #else
3277 MODIFY_REG(hadc->Instance->LTR1, ADC_LTR_LT, tmpAWDLowThresholdShifted);
3278 MODIFY_REG(hadc->Instance->HTR1, ADC_HTR_HT, tmpAWDHighThresholdShifted);
3279 #endif
3280
3281
3282 CLEAR_BIT(hadc->State, HAL_ADC_STATE_AWD1);
3283
3284
3285
3286
3287
3288 LL_ADC_ClearFlag_AWD1(hadc->Instance);
3289
3290
3291 if (AnalogWDGConfig->ITMode == ENABLE)
3292 {
3293 LL_ADC_EnableIT_AWD1(hadc->Instance);
3294 }
3295 else
3296 {
3297 LL_ADC_DisableIT_AWD1(hadc->Instance);
3298 }
3299 }
3300
3301 else
3302 {
3303 switch (AnalogWDGConfig->WatchdogMode)
3304 {
3305 case ADC_ANALOGWATCHDOG_SINGLE_REG:
3306 case ADC_ANALOGWATCHDOG_SINGLE_INJEC:
3307 case ADC_ANALOGWATCHDOG_SINGLE_REGINJEC:
3308
3309
3310 if (AnalogWDGConfig->WatchdogNumber == ADC_ANALOGWATCHDOG_2)
3311 {
3312 SET_BIT(hadc->Instance->AWD2CR, (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB(AnalogWDGConfig->Channel) & 0x1FUL)));
3313 }
3314 else
3315 {
3316 SET_BIT(hadc->Instance->AWD3CR, (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB(AnalogWDGConfig->Channel) & 0x1FUL)));
3317 }
3318 break;
3319
3320 case ADC_ANALOGWATCHDOG_ALL_REG:
3321 case ADC_ANALOGWATCHDOG_ALL_INJEC:
3322 case ADC_ANALOGWATCHDOG_ALL_REGINJEC:
3323
3324 #if defined(ADC_VER_V5_V90)
3325 if (hadc->Instance == ADC3)
3326 {
3327
3328 LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, AnalogWDGConfig->WatchdogNumber, LL_ADC_AWD_ALL_CHANNELS_REG_INJ);
3329
3330 }
3331 else
3332 {
3333 #endif
3334
3335
3336 if (AnalogWDGConfig->WatchdogNumber == ADC_ANALOGWATCHDOG_2)
3337 {
3338 SET_BIT(hadc->Instance->AWD2CR, (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB(AnalogWDGConfig->Channel) & 0x1FUL)));
3339 }
3340 else
3341 {
3342 SET_BIT(hadc->Instance->AWD3CR, (1UL << (__LL_ADC_CHANNEL_TO_DECIMAL_NB(AnalogWDGConfig->Channel) & 0x1FUL)));
3343 }
3344 #if defined(ADC_VER_V5_V90)
3345 }
3346 #endif
3347 break;
3348
3349 default:
3350 LL_ADC_SetAnalogWDMonitChannels(hadc->Instance, AnalogWDGConfig->WatchdogNumber, LL_ADC_AWD_DISABLE);
3351 break;
3352 }
3353
3354
3355
3356 tmpAWDHighThresholdShifted = ADC_AWD23THRESHOLD_SHIFT_RESOLUTION(hadc, AnalogWDGConfig->HighThreshold);
3357 tmpAWDLowThresholdShifted = ADC_AWD23THRESHOLD_SHIFT_RESOLUTION(hadc, AnalogWDGConfig->LowThreshold);
3358
3359 #if defined(ADC_VER_V5_V90)
3360 if (hadc->Instance == ADC3)
3361 {
3362
3363
3364 if (AnalogWDGConfig->WatchdogNumber != ADC_ANALOGWATCHDOG_1)
3365 {
3366
3367
3368
3369 tmpAWDHighThresholdShifted = ADC_AWD23THRESHOLD_SHIFT_RESOLUTION(hadc, AnalogWDGConfig->HighThreshold);
3370 tmpAWDLowThresholdShifted = ADC_AWD23THRESHOLD_SHIFT_RESOLUTION(hadc, AnalogWDGConfig->LowThreshold);
3371 }
3372
3373
3374 LL_ADC_ConfigAnalogWDThresholds(hadc->Instance, AnalogWDGConfig->WatchdogNumber, tmpAWDHighThresholdShifted, tmpAWDLowThresholdShifted);
3375
3376
3377 }
3378 else
3379 {
3380
3381 if (AnalogWDGConfig->WatchdogNumber == ADC_ANALOGWATCHDOG_2)
3382 {
3383
3384 MODIFY_REG(hadc->Instance->LTR2_DIFSEL, ADC_LTR_LT, tmpAWDLowThresholdShifted);
3385 MODIFY_REG(hadc->Instance->HTR2_CALFACT, ADC_HTR_HT, tmpAWDHighThresholdShifted);
3386 }
3387 else
3388 {
3389
3390 MODIFY_REG(hadc->Instance->LTR3_RES10, ADC_LTR_LT, tmpAWDLowThresholdShifted);
3391 MODIFY_REG(hadc->Instance->HTR3_RES11, ADC_HTR_HT, tmpAWDHighThresholdShifted);
3392 }
3393 }
3394 #else
3395 if (AnalogWDGConfig->WatchdogNumber == ADC_ANALOGWATCHDOG_2)
3396 {
3397
3398 MODIFY_REG(hadc->Instance->LTR2, ADC_LTR_LT, tmpAWDLowThresholdShifted);
3399 MODIFY_REG(hadc->Instance->HTR2, ADC_HTR_HT, tmpAWDHighThresholdShifted);
3400 }
3401 else
3402 {
3403
3404 MODIFY_REG(hadc->Instance->LTR3, ADC_LTR_LT, tmpAWDLowThresholdShifted);
3405 MODIFY_REG(hadc->Instance->HTR3, ADC_HTR_HT, tmpAWDHighThresholdShifted);
3406 }
3407
3408 #endif
3409 if (AnalogWDGConfig->WatchdogNumber == ADC_ANALOGWATCHDOG_2)
3410 {
3411
3412 CLEAR_BIT(hadc->State, HAL_ADC_STATE_AWD2);
3413
3414
3415
3416
3417
3418 LL_ADC_ClearFlag_AWD2(hadc->Instance);
3419
3420
3421 if (AnalogWDGConfig->ITMode == ENABLE)
3422 {
3423 LL_ADC_EnableIT_AWD2(hadc->Instance);
3424 }
3425 else
3426 {
3427 LL_ADC_DisableIT_AWD2(hadc->Instance);
3428 }
3429 }
3430
3431 else
3432 {
3433
3434 CLEAR_BIT(hadc->State, HAL_ADC_STATE_AWD3);
3435
3436
3437
3438
3439
3440 LL_ADC_ClearFlag_AWD3(hadc->Instance);
3441
3442
3443 if (AnalogWDGConfig->ITMode == ENABLE)
3444 {
3445 LL_ADC_EnableIT_AWD3(hadc->Instance);
3446 }
3447 else
3448 {
3449 LL_ADC_DisableIT_AWD3(hadc->Instance);
3450 }
3451 }
3452 }
3453
3454 }
3455
3456
3457 else
3458 {
3459
3460 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);
3461
3462 tmp_hal_status = HAL_ERROR;
3463 }
3464
3465 __HAL_UNLOCK(hadc);
3466
3467
3468 return tmp_hal_status;
3469 }
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504 uint32_t HAL_ADC_GetState(ADC_HandleTypeDef *hadc)
3505 {
3506
3507 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
3508
3509
3510 return hadc->State;
3511 }
3512
3513
3514
3515
3516
3517
3518 uint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc)
3519 {
3520
3521 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
3522
3523 return hadc->ErrorCode;
3524 }
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549 HAL_StatusTypeDef ADC_ConversionStop(ADC_HandleTypeDef *hadc, uint32_t ConversionGroup)
3550 {
3551 uint32_t tickstart;
3552 uint32_t Conversion_Timeout_CPU_cycles = 0UL;
3553 uint32_t conversion_group_reassigned = ConversionGroup;
3554 uint32_t tmp_ADC_CR_ADSTART_JADSTART;
3555 uint32_t tmp_adc_is_conversion_on_going_regular;
3556 uint32_t tmp_adc_is_conversion_on_going_injected;
3557
3558
3559 assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
3560 assert_param(IS_ADC_CONVERSION_GROUP(ConversionGroup));
3561
3562
3563
3564 tmp_adc_is_conversion_on_going_regular = LL_ADC_REG_IsConversionOngoing(hadc->Instance);
3565 tmp_adc_is_conversion_on_going_injected = LL_ADC_INJ_IsConversionOngoing(hadc->Instance);
3566 if ((tmp_adc_is_conversion_on_going_regular != 0UL)
3567 || (tmp_adc_is_conversion_on_going_injected != 0UL)
3568 )
3569 {
3570
3571
3572
3573
3574
3575
3576 if (((hadc->Instance->CFGR & ADC_CFGR_JAUTO) != 0UL)
3577 && (hadc->Init.ContinuousConvMode == ENABLE)
3578 && (hadc->Init.LowPowerAutoWait == ENABLE)
3579 )
3580 {
3581
3582 conversion_group_reassigned = ADC_REGULAR_GROUP;
3583
3584
3585 while (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_JEOS) == 0UL)
3586 {
3587 if (Conversion_Timeout_CPU_cycles >= (ADC_CONVERSION_TIME_MAX_CPU_CYCLES * 4UL))
3588 {
3589
3590 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
3591
3592
3593 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
3594
3595 return HAL_ERROR;
3596 }
3597 Conversion_Timeout_CPU_cycles ++;
3598 }
3599
3600
3601 __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOS);
3602 }
3603
3604
3605 if (conversion_group_reassigned != ADC_INJECTED_GROUP)
3606 {
3607
3608 if (LL_ADC_REG_IsConversionOngoing(hadc->Instance) != 0UL)
3609 {
3610 if (LL_ADC_IsDisableOngoing(hadc->Instance) == 0UL)
3611 {
3612
3613 LL_ADC_REG_StopConversion(hadc->Instance);
3614 }
3615 }
3616 }
3617
3618
3619 if (conversion_group_reassigned != ADC_REGULAR_GROUP)
3620 {
3621
3622 if (LL_ADC_INJ_IsConversionOngoing(hadc->Instance) != 0UL)
3623 {
3624 if (LL_ADC_IsDisableOngoing(hadc->Instance) == 0UL)
3625 {
3626
3627 LL_ADC_INJ_StopConversion(hadc->Instance);
3628 }
3629 }
3630 }
3631
3632
3633 switch (conversion_group_reassigned)
3634 {
3635 case ADC_REGULAR_INJECTED_GROUP:
3636 tmp_ADC_CR_ADSTART_JADSTART = (ADC_CR_ADSTART | ADC_CR_JADSTART);
3637 break;
3638 case ADC_INJECTED_GROUP:
3639 tmp_ADC_CR_ADSTART_JADSTART = ADC_CR_JADSTART;
3640 break;
3641
3642 default:
3643 tmp_ADC_CR_ADSTART_JADSTART = ADC_CR_ADSTART;
3644 break;
3645 }
3646
3647
3648 tickstart = HAL_GetTick();
3649
3650 while ((hadc->Instance->CR & tmp_ADC_CR_ADSTART_JADSTART) != 0UL)
3651 {
3652 if ((HAL_GetTick() - tickstart) > ADC_STOP_CONVERSION_TIMEOUT)
3653 {
3654
3655 if((hadc->Instance->CR & tmp_ADC_CR_ADSTART_JADSTART) != 0UL)
3656 {
3657
3658 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
3659
3660
3661 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
3662
3663 return HAL_ERROR;
3664 }
3665 }
3666 }
3667
3668 }
3669
3670
3671 return HAL_OK;
3672 }
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683 HAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef *hadc)
3684 {
3685 uint32_t tickstart;
3686
3687
3688
3689
3690
3691 if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
3692 {
3693
3694 if ((hadc->Instance->CR & (ADC_CR_ADCAL | ADC_CR_JADSTP | ADC_CR_ADSTP | ADC_CR_JADSTART | ADC_CR_ADSTART | ADC_CR_ADDIS | ADC_CR_ADEN)) != 0UL)
3695 {
3696
3697 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
3698
3699
3700 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
3701
3702 return HAL_ERROR;
3703 }
3704
3705
3706 LL_ADC_Enable(hadc->Instance);
3707
3708
3709 tickstart = HAL_GetTick();
3710
3711
3712
3713 uint32_t tmp_multimode_config = LL_ADC_GetMultimode(__LL_ADC_COMMON_INSTANCE(hadc->Instance));
3714 if ((__LL_ADC_MULTI_INSTANCE_MASTER(hadc->Instance) == hadc->Instance)
3715 || (tmp_multimode_config == LL_ADC_MULTI_INDEPENDENT)
3716 )
3717 {
3718 while (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == 0UL)
3719 {
3720
3721
3722
3723
3724
3725
3726
3727
3728 if (LL_ADC_IsEnabled(hadc->Instance) == 0UL)
3729 {
3730 LL_ADC_Enable(hadc->Instance);
3731 }
3732
3733 if ((HAL_GetTick() - tickstart) > ADC_ENABLE_TIMEOUT)
3734 {
3735
3736 if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_RDY) == 0UL)
3737 {
3738
3739 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
3740
3741
3742 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
3743
3744 return HAL_ERROR;
3745 }
3746 }
3747 }
3748 }
3749 }
3750
3751
3752 return HAL_OK;
3753 }
3754
3755
3756
3757
3758
3759
3760
3761
3762 HAL_StatusTypeDef ADC_Disable(ADC_HandleTypeDef *hadc)
3763 {
3764 uint32_t tickstart;
3765 const uint32_t tmp_adc_is_disable_on_going = LL_ADC_IsDisableOngoing(hadc->Instance);
3766
3767
3768
3769
3770 if ((LL_ADC_IsEnabled(hadc->Instance) != 0UL)
3771 && (tmp_adc_is_disable_on_going == 0UL)
3772 )
3773 {
3774
3775 if ((hadc->Instance->CR & (ADC_CR_JADSTART | ADC_CR_ADSTART | ADC_CR_ADEN)) == ADC_CR_ADEN)
3776 {
3777
3778 LL_ADC_Disable(hadc->Instance);
3779 __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_EOSMP | ADC_FLAG_RDY));
3780 }
3781 else
3782 {
3783
3784 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
3785
3786
3787 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
3788
3789 return HAL_ERROR;
3790 }
3791
3792
3793
3794 tickstart = HAL_GetTick();
3795
3796 while ((hadc->Instance->CR & ADC_CR_ADEN) != 0UL)
3797 {
3798 if ((HAL_GetTick() - tickstart) > ADC_DISABLE_TIMEOUT)
3799 {
3800
3801 if ((hadc->Instance->CR & ADC_CR_ADEN) != 0UL)
3802 {
3803
3804 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);
3805
3806
3807 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);
3808
3809 return HAL_ERROR;
3810 }
3811 }
3812 }
3813 }
3814
3815
3816 return HAL_OK;
3817 }
3818
3819
3820
3821
3822
3823
3824 void ADC_DMAConvCplt(DMA_HandleTypeDef *hdma)
3825 {
3826
3827 ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
3828
3829
3830 if ((hadc->State & (HAL_ADC_STATE_ERROR_INTERNAL | HAL_ADC_STATE_ERROR_DMA)) == 0UL)
3831 {
3832
3833 SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);
3834
3835
3836
3837
3838
3839 if ((hadc->Instance->ISR & ADC_FLAG_EOS) != 0UL)
3840 {
3841
3842 if (LL_ADC_REG_IsTriggerSourceSWStart(hadc->Instance) != 0UL)
3843 {
3844
3845 if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_CONT) == 0UL)
3846 {
3847
3848 CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
3849 if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) == 0UL)
3850 {
3851 SET_BIT(hadc->State, HAL_ADC_STATE_READY);
3852 }
3853 }
3854 }
3855 }
3856 else
3857 {
3858
3859
3860 if (READ_BIT(hadc->Instance->CFGR, ADC_CFGR_DMNGT) == 0UL)
3861 {
3862
3863 CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);
3864 if ((hadc->State & HAL_ADC_STATE_INJ_BUSY) == 0UL)
3865 {
3866 SET_BIT(hadc->State, HAL_ADC_STATE_READY);
3867 }
3868 }
3869 }
3870
3871
3872 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
3873 hadc->ConvCpltCallback(hadc);
3874 #else
3875 HAL_ADC_ConvCpltCallback(hadc);
3876 #endif
3877 }
3878 else
3879 {
3880 if ((hadc->State & HAL_ADC_STATE_ERROR_INTERNAL) != 0UL)
3881 {
3882
3883 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
3884 hadc->ErrorCallback(hadc);
3885 #else
3886 HAL_ADC_ErrorCallback(hadc);
3887 #endif
3888 }
3889 else
3890 {
3891
3892 hadc->DMA_Handle->XferErrorCallback(hdma);
3893 }
3894 }
3895 }
3896
3897
3898
3899
3900
3901
3902 void ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma)
3903 {
3904
3905 ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
3906
3907
3908 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
3909 hadc->ConvHalfCpltCallback(hadc);
3910 #else
3911 HAL_ADC_ConvHalfCpltCallback(hadc);
3912 #endif
3913 }
3914
3915
3916
3917
3918
3919
3920 void ADC_DMAError(DMA_HandleTypeDef *hdma)
3921 {
3922
3923 ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
3924
3925
3926 SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA);
3927
3928
3929 SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_DMA);
3930
3931
3932 #if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)
3933 hadc->ErrorCallback(hadc);
3934 #else
3935 HAL_ADC_ErrorCallback(hadc);
3936 #endif
3937 }
3938
3939
3940
3941
3942
3943
3944
3945
3946 void ADC_ConfigureBoostMode(ADC_HandleTypeDef *hadc)
3947 {
3948 uint32_t freq;
3949 if (ADC_IS_SYNCHRONOUS_CLOCK_MODE(hadc))
3950 {
3951 freq = HAL_RCC_GetHCLKFreq();
3952 switch (hadc->Init.ClockPrescaler)
3953 {
3954 case ADC_CLOCK_SYNC_PCLK_DIV1:
3955 case ADC_CLOCK_SYNC_PCLK_DIV2:
3956 freq /= (hadc->Init.ClockPrescaler >> ADC_CCR_CKMODE_Pos);
3957 break;
3958 case ADC_CLOCK_SYNC_PCLK_DIV4:
3959 freq /= 4UL;
3960 break;
3961 default:
3962 break;
3963 }
3964 }
3965 else
3966 {
3967 freq = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC);
3968 switch (hadc->Init.ClockPrescaler)
3969 {
3970 case ADC_CLOCK_ASYNC_DIV2:
3971 case ADC_CLOCK_ASYNC_DIV4:
3972 case ADC_CLOCK_ASYNC_DIV6:
3973 case ADC_CLOCK_ASYNC_DIV8:
3974 case ADC_CLOCK_ASYNC_DIV10:
3975 case ADC_CLOCK_ASYNC_DIV12:
3976 freq /= ((hadc->Init.ClockPrescaler >> ADC_CCR_PRESC_Pos) << 1UL);
3977 break;
3978 case ADC_CLOCK_ASYNC_DIV16:
3979 freq /= 16UL;
3980 break;
3981 case ADC_CLOCK_ASYNC_DIV32:
3982 freq /= 32UL;
3983 break;
3984 case ADC_CLOCK_ASYNC_DIV64:
3985 freq /= 64UL;
3986 break;
3987 case ADC_CLOCK_ASYNC_DIV128:
3988 freq /= 128UL;
3989 break;
3990 case ADC_CLOCK_ASYNC_DIV256:
3991 freq /= 256UL;
3992 break;
3993 default:
3994 break;
3995 }
3996 }
3997
3998 #if defined(ADC_VER_V5_3) || defined(ADC_VER_V5_V90)
3999 freq /= 2U;
4000 if (freq <= 6250000UL)
4001 {
4002 MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, 0UL);
4003 }
4004 else if (freq <= 12500000UL)
4005 {
4006 MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_0);
4007 }
4008 else if (freq <= 25000000UL)
4009 {
4010 MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1);
4011 }
4012 else
4013 {
4014 MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1 | ADC_CR_BOOST_0);
4015 }
4016 #else
4017 if (HAL_GetREVID() <= REV_ID_Y)
4018 {
4019 if (freq > 20000000UL)
4020 {
4021 SET_BIT(hadc->Instance->CR, ADC_CR_BOOST_0);
4022 }
4023 else
4024 {
4025 CLEAR_BIT(hadc->Instance->CR, ADC_CR_BOOST_0);
4026 }
4027 }
4028 else
4029 {
4030 freq /= 2U;
4031
4032 if (freq <= 6250000UL)
4033 {
4034 MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, 0UL);
4035 }
4036 else if (freq <= 12500000UL)
4037 {
4038 MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_0);
4039 }
4040 else if (freq <= 25000000UL)
4041 {
4042 MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1);
4043 }
4044 else
4045 {
4046 MODIFY_REG(hadc->Instance->CR, ADC_CR_BOOST, ADC_CR_BOOST_1 | ADC_CR_BOOST_0);
4047 }
4048 }
4049 #endif
4050 }
4051
4052
4053
4054
4055
4056 #endif
4057
4058
4059
4060
4061
4062
4063
4064