STM8L15x系列单片机判断指定I/O引脚电平

/**
  * @brief  Reads the specified GPIO input data pin.
  * @param  GPIOx : Select the GPIO peripheral number (x = A to I).
  * @param  GPIO_Pin : Specifies the pin number.
  *           This parameter can be one of the following values:
  *            @arg GPIO_Pin_0: Pin 0
  *            @arg GPIO_Pin_1: Pin 1
  *            @arg GPIO_Pin_2: Pin 2
  *            @arg GPIO_Pin_3: Pin 3
  *            @arg GPIO_Pin_4: Pin 4
  *            @arg GPIO_Pin_5: Pin 5
  *            @arg GPIO_Pin_6: Pin 6
  *            @arg GPIO_Pin_7: Pin 7 
  * @retval BitStatus : GPIO input pin status.
  */
BitStatus GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
{
     return ((BitStatus)(GPIOx->IDR & (uint8_t)GPIO_Pin));
}

以上是ST文件读取指定IO口电平原型。


如果你使用类似
if(GPIO_ReadInputPin(GPIO_ReadInputPin(GPIOC,GPIO_PIN_7) == SET)
{
.....
}
这样的判断代码,你会发现永远的不到你想要的。原因是BitStatus是个enum类型,其实enum从某个层面上说它是与int类型相似。所以你用BitStatus test = GPIO_ReadInputPin(GPIO_ReadInputPin(GPIOC,GPIO_PIN_7) ;你会发现,test值是个8位的数,而非类似BOOL的0或1.

所以你可以考虑将代码修改为

BitStatus GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
{
    return ((GPIOx->IDR & (uint8_t)GPIO_Pin) ? SET : RESET); 
}

你可能感兴趣的:(STM8L15x系列单片机)