打印
[STM32F1]

如何给stm32的IO口取反?

[复制链接]
8221|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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楼的做法不可靠。

使用特权

评论回复
5
wu1169668869| | 2016-8-9 12:15 | 只看该作者
个人更喜欢二楼的方法

使用特权

评论回复
6
skygz| | 2016-8-9 12:37 | 只看该作者
zdx818 发表于 2016-8-9 11:59
我的代码是这样的
void LED_PinFlip(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)//引脚翻转
{

晕 ,  寄存器的方法 比用库 效率好,   有啥不可靠................你这种才叫不可靠

使用特权

评论回复
7
qq135791050| | 2016-8-9 13:38 | 只看该作者
skygz 发表于 2016-8-9 12:37
晕 ,  寄存器的方法 比用库 效率好,   有啥不可靠................你这种才叫不可靠 ...

我喜欢寄存器这种,够直观,只是写代码的时候会慢点,要慢慢查资料

使用特权

评论回复
8
sjw1716094642| | 2016-8-9 13:48 | 只看该作者
zdx818 发表于 2016-8-9 11:59
我的代码是这样的
void LED_PinFlip(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)//引脚翻转
{

你这不是取反,因为你是通过输入取的,要是引脚被强制拉高或拉低了呢?

使用特权

评论回复
9
qq135791050| | 2016-8-9 14:01 | 只看该作者
我想知道为什么不用非运算~取反?而用异或运算?

使用特权

评论回复
10
yichunshan| | 2016-8-10 15:00 | 只看该作者
qq135791050 发表于 2016-8-9 14:01
我想知道为什么不用非运算~取反?而用异或运算?

可以的

使用特权

评论回复
11
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

粉丝