请教一个STM32控制74HC165的问题

教育作者 / 996信息技术 / 2026-04-21 19:16
"
针对当前热议的请教一个STM32控制74HC165的问题话题,我们进行了深入调研和信息整合,力求为您呈现全面客观的内容分析。GPIOB在

针对当前热议的请教一个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的问题的精彩内容就分享到这里,衷心希望这些信息能为您带来实质帮助。期待您继续支持我们,发现更多有价值的知识。

分享到
声明:本文为用户投稿或编译自英文资料,不代表本站观点和立场,转载时请务必注明文章作者和来源,不尊重原创的行为将受到本站的追责;转载稿件或作者投稿可能会经编辑修改或者补充,有异议可投诉至本站。

热文导读