File indexing completed on 2025-05-11 08:23:09
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
0019
0020
0021 #include "stm32h7xx_ll_comp.h"
0022
0023 #ifdef USE_FULL_ASSERT
0024 #include "stm32_assert.h"
0025 #else
0026 #define assert_param(expr) ((void)0U)
0027 #endif
0028
0029
0030
0031
0032
0033 #if defined (COMP1) || defined (COMP2)
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051 #define IS_LL_COMP_POWER_MODE(__POWER_MODE__) \
0052 ( ((__POWER_MODE__) == LL_COMP_POWERMODE_HIGHSPEED) \
0053 || ((__POWER_MODE__) == LL_COMP_POWERMODE_MEDIUMSPEED) \
0054 || ((__POWER_MODE__) == LL_COMP_POWERMODE_ULTRALOWPOWER) \
0055 )
0056
0057
0058
0059
0060
0061 #if defined (COMP_CFGRx_INP2SEL)
0062 #define IS_LL_COMP_INPUT_PLUS(__COMP_INSTANCE__, __INPUT_PLUS__) \
0063 ( ((__INPUT_PLUS__) == LL_COMP_INPUT_PLUS_IO1) \
0064 || ((__INPUT_PLUS__) == LL_COMP_INPUT_PLUS_IO2) \
0065 || ((__INPUT_PLUS__) == LL_COMP_INPUT_PLUS_DAC2_CH1))
0066 #else
0067 #define IS_LL_COMP_INPUT_PLUS(__COMP_INSTANCE__, __INPUT_PLUS__) \
0068 ( ((__INPUT_PLUS__) == LL_COMP_INPUT_PLUS_IO1) \
0069 || ((__INPUT_PLUS__) == LL_COMP_INPUT_PLUS_IO2))
0070 #endif
0071
0072
0073
0074
0075
0076 #if defined (COMP_CFGRx_INMSEL_3)
0077 #define IS_LL_COMP_INPUT_MINUS(__COMP_INSTANCE__, __INPUT_MINUS__) \
0078 ( ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_1_4VREFINT) \
0079 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_1_2VREFINT) \
0080 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_3_4VREFINT) \
0081 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_VREFINT) \
0082 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_DAC1_CH1) \
0083 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_DAC1_CH2) \
0084 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO1) \
0085 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO2) \
0086 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_TPSENS_DAC2CH1) \
0087 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_VBAT_VDDAP))
0088 #else
0089 #define IS_LL_COMP_INPUT_MINUS(__COMP_INSTANCE__, __INPUT_MINUS__) \
0090 ( ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_1_4VREFINT) \
0091 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_1_2VREFINT) \
0092 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_3_4VREFINT) \
0093 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_VREFINT) \
0094 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_DAC1_CH1) \
0095 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_DAC1_CH2) \
0096 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO1) \
0097 || ((__INPUT_MINUS__) == LL_COMP_INPUT_MINUS_IO2))
0098 #endif
0099
0100 #define IS_LL_COMP_INPUT_HYSTERESIS(__INPUT_HYSTERESIS__) \
0101 ( ((__INPUT_HYSTERESIS__) == LL_COMP_HYSTERESIS_NONE) \
0102 || ((__INPUT_HYSTERESIS__) == LL_COMP_HYSTERESIS_LOW) \
0103 || ((__INPUT_HYSTERESIS__) == LL_COMP_HYSTERESIS_MEDIUM) \
0104 || ((__INPUT_HYSTERESIS__) == LL_COMP_HYSTERESIS_HIGH) \
0105 )
0106
0107 #define IS_LL_COMP_OUTPUT_POLARITY(__POLARITY__) \
0108 ( ((__POLARITY__) == LL_COMP_OUTPUTPOL_NONINVERTED) \
0109 || ((__POLARITY__) == LL_COMP_OUTPUTPOL_INVERTED) \
0110 )
0111
0112 #define IS_LL_COMP_OUTPUT_BLANKING_SOURCE(__OUTPUT_BLANKING_SOURCE__) \
0113 ( ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_NONE) \
0114 || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM1_OC5) \
0115 || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM2_OC3) \
0116 || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM3_OC3) \
0117 || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM3_OC4) \
0118 || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM8_OC5) \
0119 || ((__OUTPUT_BLANKING_SOURCE__) == LL_COMP_BLANKINGSRC_TIM15_OC1) \
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 ErrorStatus LL_COMP_DeInit(COMP_TypeDef *COMPx)
0150 {
0151 ErrorStatus status = SUCCESS;
0152
0153
0154 assert_param(IS_COMP_ALL_INSTANCE(COMPx));
0155
0156
0157
0158 if(LL_COMP_IsLocked(COMPx) == 0UL)
0159 {
0160 LL_COMP_WriteReg((COMPx), CFGR, 0x00000000UL);
0161
0162 }
0163 else
0164 {
0165
0166
0167
0168 status = ERROR;
0169 }
0170
0171 return status;
0172 }
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186 ErrorStatus LL_COMP_Init(COMP_TypeDef *COMPx, LL_COMP_InitTypeDef *COMP_InitStruct)
0187 {
0188 ErrorStatus status = SUCCESS;
0189
0190
0191 assert_param(IS_COMP_ALL_INSTANCE(COMPx));
0192 assert_param(IS_LL_COMP_POWER_MODE(COMP_InitStruct->PowerMode));
0193 assert_param(IS_LL_COMP_INPUT_PLUS(COMPx, COMP_InitStruct->InputPlus));
0194 assert_param(IS_LL_COMP_INPUT_MINUS(COMPx, COMP_InitStruct->InputMinus));
0195 assert_param(IS_LL_COMP_INPUT_HYSTERESIS(COMP_InitStruct->InputHysteresis));
0196 assert_param(IS_LL_COMP_OUTPUT_POLARITY(COMP_InitStruct->OutputPolarity));
0197 assert_param(IS_LL_COMP_OUTPUT_BLANKING_SOURCE(COMP_InitStruct->OutputBlankingSource));
0198
0199
0200
0201 if(LL_COMP_IsLocked(COMPx) == 0UL)
0202 {
0203
0204
0205
0206
0207
0208
0209
0210 #if defined (COMP_CFGRx_INP2SEL)
0211 MODIFY_REG(COMPx->CFGR,
0212 COMP_CFGRx_PWRMODE
0213 | COMP_CFGRx_INPSEL
0214 | COMP_CFGRx_INP2SEL
0215 | COMP_CFGRx_SCALEN
0216 | COMP_CFGRx_BRGEN
0217 | COMP_CFGRx_INMSEL
0218 | COMP_CFGRx_HYST
0219 | COMP_CFGRx_POLARITY
0220 | COMP_CFGRx_BLANKING
0221 ,
0222 COMP_InitStruct->PowerMode
0223 | COMP_InitStruct->InputPlus
0224 | COMP_InitStruct->InputMinus
0225 | COMP_InitStruct->InputHysteresis
0226 | COMP_InitStruct->OutputPolarity
0227 | COMP_InitStruct->OutputBlankingSource
0228 );
0229 #else
0230 MODIFY_REG(COMPx->CFGR,
0231 COMP_CFGRx_PWRMODE
0232 | COMP_CFGRx_INPSEL
0233 | COMP_CFGRx_SCALEN
0234 | COMP_CFGRx_BRGEN
0235 | COMP_CFGRx_INMSEL
0236 | COMP_CFGRx_HYST
0237 | COMP_CFGRx_POLARITY
0238 | COMP_CFGRx_BLANKING
0239 ,
0240 COMP_InitStruct->PowerMode
0241 | COMP_InitStruct->InputPlus
0242 | COMP_InitStruct->InputMinus
0243 | COMP_InitStruct->InputHysteresis
0244 | COMP_InitStruct->OutputPolarity
0245 | COMP_InitStruct->OutputBlankingSource
0246 );
0247 #endif
0248 }
0249 else
0250 {
0251
0252 status = ERROR;
0253 }
0254
0255 return status;
0256 }
0257
0258
0259
0260
0261
0262
0263
0264 void LL_COMP_StructInit(LL_COMP_InitTypeDef *COMP_InitStruct)
0265 {
0266
0267 COMP_InitStruct->PowerMode = LL_COMP_POWERMODE_ULTRALOWPOWER;
0268 COMP_InitStruct->InputPlus = LL_COMP_INPUT_PLUS_IO1;
0269 COMP_InitStruct->InputMinus = LL_COMP_INPUT_MINUS_VREFINT;
0270 COMP_InitStruct->InputHysteresis = LL_COMP_HYSTERESIS_NONE;
0271 COMP_InitStruct->OutputPolarity = LL_COMP_OUTPUTPOL_NONINVERTED;
0272 COMP_InitStruct->OutputBlankingSource = LL_COMP_BLANKINGSRC_NONE;
0273 }
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287 #endif
0288
0289
0290
0291
0292
0293 #endif
0294