[STM32F1] 如何给stm32的IO口取反?

[复制链接]
 楼主| quray1985 发表于 2016-8-8 15:53 | 显示全部楼层 |阅读模式
用stm32的按键,按一次一个状态,再按一次又变换一种状态,如何给IO口取反呢?

skygz 发表于 2016-8-8 18:33 | 显示全部楼层
GPIOB->ODR ^= GPIO_PIN_LED;
mmuuss586 发表于 2016-8-8 19:05 | 显示全部楼层
用楼上说的指令就可以了;
zdx818 发表于 2016-8-9 11:59 | 显示全部楼层
我的代码是这样的
void LED_PinFlip(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)//引脚翻转
{
        if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin))
        {
                GPIO_ResetBits(GPIOx,GPIO_Pin);
        }
        else
        {
                GPIO_SetBits(GPIOx,GPIO_Pin);
        }
}

个人感觉2楼的做法不可靠。
wu1169668869 发表于 2016-8-9 12:15 | 显示全部楼层
个人更喜欢二楼的方法
skygz 发表于 2016-8-9 12:37 | 显示全部楼层
zdx818 发表于 2016-8-9 11:59
我的代码是这样的
void LED_PinFlip(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)//引脚翻转
{

晕 ,  寄存器的方法 比用库 效率好,   有啥不可靠................你这种才叫不可靠
qq135791050 发表于 2016-8-9 13:38 | 显示全部楼层
skygz 发表于 2016-8-9 12:37
晕 ,  寄存器的方法 比用库 效率好,   有啥不可靠................你这种才叫不可靠 ...

我喜欢寄存器这种,够直观,只是写代码的时候会慢点,要慢慢查资料
sjw1716094642 发表于 2016-8-9 13:48 | 显示全部楼层
zdx818 发表于 2016-8-9 11:59
我的代码是这样的
void LED_PinFlip(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)//引脚翻转
{

你这不是取反,因为你是通过输入取的,要是引脚被强制拉高或拉低了呢?
qq135791050 发表于 2016-8-9 14:01 | 显示全部楼层
我想知道为什么不用非运算~取反?而用异或运算?
yichunshan 发表于 2016-8-10 15:00 | 显示全部楼层
qq135791050 发表于 2016-8-9 14:01
我想知道为什么不用非运算~取反?而用异或运算?

可以的
fnh02 发表于 2022-3-20 16:40 | 显示全部楼层
((GPIOA->ODR & GPIO_PIN_11) ? (GPIOA->BRR  = GPIO_PIN_11): (GPIOA->BSRR = GPIO_PIN_11))  //取反IO口
您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

1488

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部

156

主题

1488

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部