
针对当前热议的请教一个STM32控制74HC165的问题话题,我们进行了深入调研和信息整合,力求为您呈现全面客观的内容分析。
GPIOB在这里是一个结构体指针,是指向GPIO_TypeDef这样的一个结构体,并且强制将该结构体指针指向的地址为GPIOB_base,一般情况下是不允许对绝对地址空间的操作,但是在这里可以。
下面的宏定义
#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || \
((PERIPH) == GPIOB) || \
((PERIPH) == GPIOC) || \
((PERIPH) == GPIOD) || \
((PERIPH) == GPIOE) || \
((PERIPH) == GPIOF) || \
((PERIPH) == GPIOG))
也是合法的,后面的斜杠\标识连接着的意思,等效于:
#define IS_GPIO_ALL_PERIPH(PERIPH) (((PERIPH) == GPIOA) || ((PERIPH) == GPIOB) …)
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));这句主要是判断传进函数中的参数GPIOx是否有效,因为GPIOx必须是GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG这几个当中的其中一个,否则会被认为是无效的参数。
assert_param(xxxxxxxx)就是判断参数是否有效,但在实际情况下并不使用,因为宏定义中:
#ifdef USE_FULL_ASSERT
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
void assert_failed(uint8_t* file, uint32_t line);
#else
#define assert_param(expr) ((void)0)
#endif
因为一般情况下USE_FULL_ASSERT是没有被定义的,assert_param(xxxxxxxx)就等于((void)0),什么也没有做。
请教一个STM32控制74HC165的问题的精彩内容就分享到这里,衷心希望这些信息能为您带来实质帮助。期待您继续支持我们,发现更多有价值的知识。