为什么有的函数他能用 或 来同时执行两个呢?

2019-08-14 19:21发布


比如这一类:
原函数:
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
{
  /* Check the parameters */
  assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    RCC->APB2ENR |= RCC_APB2Periph;
  }
  else
  {
    RCC->APB2ENR &= ~RCC_APB2Periph;
  }
}

调用的函数:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);

为什么他可以用或来使能两个呢?
小弟从51那边过来,第一次见到函数的参数可以这样用,百度查不出个所以然(可能我查的关键词不太对),求C高手为我指点一二,先谢谢各位
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
895855647
2019-08-15 02:55
还有个困扰很久的小问题,刚开始的教程里的库函数默认时钟为72mhz,
#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)  //如果有定义这些,则编译24hmhz的,否则编译72mhz的
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
#define SYSCLK_FREQ_24MHz  24000000
#else
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz  24000000 */
/* #define SYSCLK_FREQ_36MHz  36000000 */
/* #define SYSCLK_FREQ_48MHz  48000000 */
/* #define SYSCLK_FREQ_56MHz  56000000 */
#define SYSCLK_FREQ_72MHz  72000000       //默认为72mhz,例如默认改为36mhz,这段改为#define SYSCLK_FREQ_36MHz 36000000即可
#endif
取决的原因是启动文件,还是魔术棒里的C/C++的那个define里宏定义了STM32F10X_HD,按我理解是后者,然后if不满足,编译else后面的,也就默认为了72mhz,请问我这样理解对吗?

一周热门 更多>