STM32的口要让它反转,么样实现?

[复制链接]
14841|7
 楼主| liuoulyy 发表于 2013-5-21 11:25 | 显示全部楼层 |阅读模式
单片机的口,反转很容易。sbit led = P1 ^6;  led = ~led;而STM32的口要让它反转,怎样实现呢?
IJK 发表于 2013-5-21 11:47 | 显示全部楼层
很容易,可以参考固件库:
  GPIOx->ODR ^= GPIO_Pin;
busdriver 发表于 2013-5-21 11:49 | 显示全部楼层
异或,你知道不。。
比如要将portb的bit0取反,那就GPIOB->ODR^=0x00000001,
busdriver 发表于 2013-5-21 11:52 | 显示全部楼层
回帖时间几乎相等。。
mmuuss586 发表于 2013-5-21 12:26 | 显示全部楼层
这里效率很高的。:lol
 楼主| liuoulyy 发表于 2013-5-21 19:38 | 显示全部楼层
知道了,跟单片机一样,直接操作寄存器。
jiaxinhui 发表于 2013-5-22 08:09 | 显示全部楼层
如果你用库编程的话,就有现成的。
acgean 发表于 2013-5-22 08:49 | 显示全部楼层
异或, 都是异或。
不过, 同志们要注意。
表面看,好像都一样。其实,这里有很大的差别。

sbit led = P1 ^6;  led = ~led;
其实这里就 CPL 一条指令。

而STM32的口要让它反转,怎样实现呢?
还是异或, 其实还有别的手段,用 BITBAND,再++或--, 但不管怎么异或,都要读,修改,写的过程。起码3条指令。

AVR 也没有 CPL 这样的指令。 为了快速实现端口翻转(一条指令)。IO 端口特别做了设计,就是给引脚 pin 输入写1。
当然, 还有的芯片的 IO 口会有翻转寄存器。
可见也不是指令系统能限制的,或许在未来的芯片中,STM32 也会提供快速的 IO 口翻转的办法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

134

主题

472

帖子

1

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