STM8函数GPIO_ReadInputPin(GPIOA, GPIO_PIN_0)的问题,在使用时,会出现这样的问题: 如果定义 uchar i=0; i=GPIO_ReadInputPin(GPIOA, GPIO_PIN_0);在该位为低电平时,会得到 0 ,而在为高电平时,会收到0和1以外的数据。 解析如下:
GPIO_ReadInputPin(GPIOA, GPIO_PIN_0)的原型是
BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin) {
return ((BitStatus)(GPIOx->IDR & (vu8)GPIO_Pin)); }
而BitStatus的原型是: typedef enum { RESET = 0, SET = !RESET }
在使用时尽量不如下使用:
if(GPIO_ReadInputPin(GPIOA, GPIO_PIN_0)==1) 尽量这样使用:
if(GPIO_ReadInputPin(GPIOA, GPIO_PIN_0) !=RESET) 这样,能防止读到0和1以外的值