我也在STM32社区论坛发布了同样的问题,但没有得到答案。
我正在使用启用C++14的stm32 HAL库进行项目开发,出现了以下警告,但我无法消除它:
../platform/stm32/l4/STM32L4xx_HAL_Driver/Inc/stm32l4xx_hal_rcc.h:735:57:
注意: 转换为 void 将不会访问类型为‘volatile uint32_t {aka volatile long unsigned int}’的对象 UNUSED(tmpreg); \
当调用__GPIOX_CLK_ENABLE()或__HAL_RCC_GPIOX_CLK_ENABLE时,就会出现以上问题。
是否有人能够在保持HAL源代码不变的情况下消除上述警告?
或者有什么建议吗?
当前警告级别为-Wall。
我已经在l4和f4系列代码中遇到了上述问题。
以下是示例代码:
int main(void)
{
HAL_Init();
__GPIOB_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.Pin = GPIO_PIN_7;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
GPIO_InitStructure.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
for (;;)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
HAL_Delay(500);
}
}
罪魁祸首是__GPIOB_CLK_ENABLE()
,在ST驱动程序中会被扩展成以下形式。#define __HAL_RCC_GPIOB_CLK_ENABLE() do { \
__IO uint32_t tmpreg; \
SET_BIT(RCC->AHB2ENR, RCC_AHB2ENR_GPIOBEN); \
/* Delay after an RCC peripheral clock enabling */ \
tmpreg = READ_BIT(RCC->AHB2ENR, RCC_AHB2ENR_GPIOBEN); \
UNUSED(tmpreg); \
} while(0)
我的原始问题旨在找到一种解决方案,同时保留底层的ST驱动程序。一种可能的解决方案是直接访问寄存器,而不通过库提供的便捷宏。
提前感谢您。