C语言复习10

枚举变量的应用

在stm32f103中,为了方便对TB6612的IN1和IN2进行电平操作,可以采取如下的写法,将x强制转换为BitAction类型也就是枚举类型,x=0就是Bit_RESET,x=1就是Bit_SET

//右轮需要PB12,PB13,左轮需要PB14,PB15
#define Motor1AIN1(x) 			GPIO_WriteBit(GPIOB,GPIO_Pin_13,(BitAction)x)
#define Motor1AIN2(x) 			GPIO_WriteBit(GPIOB,GPIO_Pin_12,(BitAction)x)
#define Motor2BIN1(x) 			GPIO_WriteBit(GPIOB,GPIO_Pin_15,(BitAction)x)
#define Motor2BIN2(x) 			GPIO_WriteBit(GPIOB,GPIO_Pin_14,(BitAction)x)

解析一下GPIO_WriteBit函数,主要是第三个参数BitVal,可以看到这个参数类型是enum类型也就是枚举类型,说明这个函数的第三个参数只能是Bit_RESET或者是Bit_SET,并且可以看到BitVal的第一个值也就是Bit_RESET=0,那么Bit_SET就默认是1了

/**
  * @brief  Sets or clears the selected data port bit.
  * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
  * @param  GPIO_Pin: specifies the port bit to be written.
  *   This parameter can be one of GPIO_Pin_x where x can be (0..15).
  * @param  BitVal: specifies the value to be written to the selected bit.
  *   This parameter can be one of the BitAction enum values:
  *     @arg Bit_RESET: to clear the port pin
  *     @arg Bit_SET: to set the port pin
  * @retval None
  */
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
  assert_param(IS_GPIO_BIT_ACTION(BitVal)); 
  
  if (BitVal != Bit_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BRR = GPIO_Pin;
  }
}

  

/** 
  * @brief  Bit_SET and Bit_RESET enumeration  
  */

typedef enum
{ Bit_RESET = 0,
  Bit_SET
}BitAction;

你可能感兴趣的:(C语言复习--链表,c语言,单片机,stm32)