Okayan 发表于 2011-10-10 16:53:24

【求助】用库函数操作GPIO时,GPIO某个位的取反怎么做?

新手求助、用库函数操作GPIO,按键按下LED灯亮、再按下LED灯灭,如此反复,用库函数能实现吗?

发表于 2011-10-10 17:23:13

RE:【求助】用库函数操作GPIO时,GPIO某个位的取反怎么做?

能。可以直接对PIN引脚操作。详细情况参见:
void GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin);

Okayan 发表于 2011-10-10 23:10:12

回复:【求助】用库函数操作GPIO时,GPIO某个位的取反怎么做?

回复第 2 楼 于2011-10-10 09:23:13发表:
能。可以直接对PIN引脚操作。详细情况参见:
void GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pi
 GPIO_SetBits、GPIO_ResetBits    不能取反啊  因为我是要在每次按键按下后,灯由亮到灭或由灭到亮

wzzhuhz 发表于 2011-10-11 11:47:10

RE:【求助】用库函数操作GPIO时,GPIO某个位的取反怎么做?

if(GPIO_ReadOutputDataBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) == Bit_SET)
    GPIO_ResetBits (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
else
    GPIO_SetBits (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

hui235 发表于 2011-10-11 12:25:34

RE:【求助】用库函数操作GPIO时,GPIO某个位的取反怎么做?

一般read GPIO的状态时要设置成input模式,,否则读出来的不一定准。所以最好是用一个变量记录GPIO的状态,根据次变量去改变状态。。

Okayan 发表于 2011-10-11 14:32:09

回复:【求助】用库函数操作GPIO时,GPIO某个位的取反怎么做?

回复第 4 楼 于2011-10-11 03:47:10发表:
if(GPIO_ReadOutputDataBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) == Bit_SET)
GPIO_ResetBits (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
else
GPIO_SetBits (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 

 
 
这种方法不可以的、只在按键按下的时候会变化,那么按键松开就又还原了对吧。我要实现的是,按键每按一次,LED的状态变化一次

Okayan 发表于 2011-10-11 14:34:47

回复:【求助】用库函数操作GPIO时,GPIO某个位的取反怎么做?

回复第 5 楼 于2011-10-11 04:25:34发表:
一般read GPIO的状态时要设置成input模式,,否则读出来的不一定准。所以最好是用一个变量记录GPIO的状态,根据次变量去改变状态。。 

 
 
那是不是用库函数操作的时候,无法做到直接取反?

发表于 2011-10-11 14:43:17

RE:【求助】用库函数操作GPIO时,GPIO某个位的取反怎么做?

可以,通过GPIO-BSRR,和BRR来控制。

hui235 发表于 2011-10-11 21:15:41

RE:【求助】用库函数操作GPIO时,GPIO某个位的取反怎么做?

最好是用变量记录LED的状态,然后再在按下时根据变量的值取反控制,。
每次按键按下的时候去读LED的状态也可以,但不一定读的准。。

alven 发表于 2020-2-5 19:30:14

GPIO_ToggleBits(GPIOx, GPIO_Pin_x);
页: [1]
查看完整版本: 【求助】用库函数操作GPIO时,GPIO某个位的取反怎么做?