2025-08-13 9:00 AM
This warning is occurring in the STM32U5xx HAL driver's low-level ADC header file (stm32u5xx_ll_adc.h). The warning indicates there's a self-assignment of a variable analog_wd_monit_channels where a variable is being assigned to itself.
STM32CubeMX/Target_1/STM32CubeMX/Drivers/STM32U5xx_HAL_Driver/Inc/stm32u5xx_ll_adc.h:6920:34: warning: explicitly assigning value of variable of type 'uint32_t' (aka 'unsigned int') to itself [-Wself-assign]
6920 | analog_wd_monit_channels = analog_wd_monit_channels;
| ~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
2025-08-13 12:45 PM
This usually occurs because of some kind of "unused parameter" macro, which in its turn exists to silence another warning. For example
#define UNUSED_PARAMETER(x) x = x
int junk(int p1, char p2)
{
UNUSED_PARAMETER(p2);
return p1;
}
So... decide which of the warnings you hate more, and disable the other.
2025-08-14 2:28 AM
I don't seem to have found any unused macro definitions. Here is the code for the warning section.
/**
* @brief Get ADC analog watchdog monitored channel.
* @note Usage of the returned channel number:
* - To reinject this channel into another function LL_ADC_xxx:
* the returned channel number is only partly formatted on definition
* of literals LL_ADC_CHANNEL_x. Therefore, it has to be compared
* with parts of literals LL_ADC_CHANNEL_x or using
* helper macro @ref __LL_ADC_CHANNEL_TO_DECIMAL_NB().
* Then the selected literal LL_ADC_CHANNEL_x can be used
* as parameter for another function.
* - To get the channel number in decimal format:
* process the returned value with the helper macro
* @ref __LL_ADC_CHANNEL_TO_DECIMAL_NB().
* Applicable only when the analog watchdog is set to monitor
* one channel.
* @note On this STM32 series, there are 2 kinds of analog watchdog
* instance:
* - AWD standard (instance AWD1):
* - channels monitored: can monitor 1 channel or all channels.
* - groups monitored: ADC groups regular and-or injected.
* - resolution: resolution is not limited (corresponds to
* ADC resolution configured).
* - AWD flexible (instances AWD2, AWD3):
* - channels monitored: flexible on channels monitored, selection is
* channel wise, from from 1 to all channels.
* Specificity of this analog watchdog: Multiple channels can
* be selected. For example:
* (LL_ADC_AWD_CHANNEL4_REG_INJ | LL_ADC_AWD_CHANNEL5_REG_INJ | ...)
* - groups monitored: not selection possible (monitoring on both
* groups regular and injected).
* Channels selected are monitored on groups regular and injected:
* LL_ADC_AWD_CHANNELxx_REG_INJ (do not use parameters
* LL_ADC_AWD_CHANNELxx_REG and LL_ADC_AWD_CHANNELxx_INJ)
* - resolution: resolution is limited to 8 bits: if ADC resolution is
* 12 bits the 4 LSB are ignored, if ADC resolution is 10 bits
* the 2 LSB are ignored.
* @note On this STM32 series, setting of this feature is conditioned to
* ADC state:
* ADC must be disabled or enabled without conversion on going
* on either groups regular or injected.
* @rmtoll CFGR AWD1CH LL_ADC_GetAnalogWDMonitChannels\n
* CFGR AWD1SGL LL_ADC_GetAnalogWDMonitChannels\n
* CFGR AWD1EN LL_ADC_GetAnalogWDMonitChannels\n
* CFGR JAWD1EN LL_ADC_GetAnalogWDMonitChannels\n
* AWD2CR AWD2CH LL_ADC_GetAnalogWDMonitChannels\n
* AWD3CR AWD3CH LL_ADC_GetAnalogWDMonitChannels
* @PAram ADCx ADC instance
* @PAram AWDy This parameter can be one of the following values:
* @arg @ref LL_ADC_AWD1
* @arg @ref LL_ADC_AWD2 (1)
* @arg @ref LL_ADC_AWD3 (1)
*
* (1) On this AWD number, monitored channel can be retrieved
* if only 1 channel is programmed (or none or all channels).
* This function cannot retrieve monitored channel if
* multiple channels are programmed simultaneously
* by bitfield.
* @retval Returned value can be one of the following values:
* @arg @ref LL_ADC_AWD_DISABLE
* @arg @ref LL_ADC_AWD_ALL_CHANNELS_REG (0)
* @arg @ref LL_ADC_AWD_ALL_CHANNELS_INJ (0)
* @arg @ref LL_ADC_AWD_ALL_CHANNELS_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_0_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_0_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_0_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_1_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_1_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_1_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_2_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_2_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_2_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_3_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_3_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_3_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_4_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_4_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_4_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_5_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_5_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_5_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_6_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_6_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_6_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_7_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_7_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_7_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_8_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_8_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_8_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_9_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_9_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_9_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_10_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_10_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_10_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_11_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_11_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_11_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_12_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_12_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_12_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_13_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_13_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_13_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_14_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_14_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_14_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_15_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_15_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_15_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_16_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_16_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_16_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_17_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_17_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_17_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_18_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_18_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_18_REG_INJ
* @arg @ref LL_ADC_AWD_CHANNEL_19_REG (0)
* @arg @ref LL_ADC_AWD_CHANNEL_19_INJ (0)
* @arg @ref LL_ADC_AWD_CHANNEL_19_REG_INJ
*
* (0) On STM32U5, parameter available only on analog watchdog number: AWD1.
*/
__STATIC_INLINE uint32_t LL_ADC_GetAnalogWDMonitChannels(const ADC_TypeDef *ADCx, uint32_t AWDy)
{
const __IO uint32_t *preg;
if (AWDy == LL_ADC_AWD1)
{
/* Set pointer to register of selected analog watchdog */
preg = __ADC_PTR_REG_OFFSET(ADCx->CFGR1, 0UL);
}
else
{
/* Set pointer to register of selected analog watchdog */
preg = __ADC_PTR_REG_OFFSET(ADCx->AWD2CR, ((AWDy & ADC_AWD_CRX_REGOFFSET_MASK)) \
>> (ADC_AWD_CRX_REGOFFSET_POS + 1UL));
}
uint32_t analog_wd_monit_channels = (READ_BIT(*preg, AWDy) & AWDy & ADC_AWD_CR_ALL_CHANNEL_MASK);
/* If "analog_wd_monit_channels" == 0, then the selected AWD is disabled */
/* (parameter value LL_ADC_AWD_DISABLE). */
/* Else, the selected AWD is enabled and is monitoring a group of channels */
/* or a single channel. */
if (analog_wd_monit_channels != 0UL)
{
if (AWDy == LL_ADC_AWD1)
{
if ((analog_wd_monit_channels & ADC_CFGR1_AWD1SGL) == 0UL)
{
/* AWD monitoring a group of channels */
analog_wd_monit_channels = ((analog_wd_monit_channels | (0x000FFFFFUL)) & (~(ADC_CFGR1_AWD1CH)));
}
else
{
/* AWD monitoring a single channel */
analog_wd_monit_channels = analog_wd_monit_channels;
}
}
else
{
if (ADCx != ADC4)
{
if ((analog_wd_monit_channels & 0x000FFFFFUL) == 0x000FFFFFUL)
{
/* AWD monitoring a group of channels */
analog_wd_monit_channels = (0x000FFFFFUL | ((ADC_CFGR1_JAWD1EN | ADC_CFGR1_AWD1EN)));
}
else
{
/* AWD monitoring a single channel */
/* AWD monitoring a group of channels */
analog_wd_monit_channels = ((ADC_CFGR1_JAWD1EN | ADC_CFGR1_AWD1EN | ADC_CFGR1_AWD1SGL)
| (__LL_ADC_CHANNEL_TO_DECIMAL_NB(analog_wd_monit_channels) \
<< ADC_CFGR1_AWD1CH_Pos));
}
}
else
{
if ((analog_wd_monit_channels & ADC_AWD_CR23_CHANNEL_MASK) == ADC_AWD_CR23_CHANNEL_MASK)
{
/* AWD monitoring a group of channels */
analog_wd_monit_channels = (0x000FFFFFUL | (ADC_CFGR1_AWD1EN));
}
else
{
/* AWD monitoring a single channel */
/* AWD monitoring a group of channels */
analog_wd_monit_channels = ((ADC_CFGR1_AWD1EN | ADC_CFGR1_AWD1SGL)
| (__LL_ADC_CHANNEL_TO_DECIMAL_NB(analog_wd_monit_channels) \
<< ADC_CFGR1_AWD1CH_Pos));
}
}
}
}
return analog_wd_monit_channels;
}
2025-08-14 4:00 PM
Hmm indeed in line 160: analog_wd_monit_channels = analog_wd_monit_channels;
This looks awkward but is legal. Specific warnings can be disabled in the compiler settings.