野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18711|回复: 5

关于Cortex-M3的位带操作方式的疑问。

[复制链接]
发表于 2013-7-2 11:05:13 | 显示全部楼层 |阅读模式
火哥在《零死角玩转stm32初级篇》里面的第七-KEY(polling)里面讲到可以用Cortex-M3的位带操作方式来取反输出,请问下要怎么写代码?直接 GPIO_Pin_3 &=~GPIO_Pin_3 么?
下面是火哥的原话
这一段代码首先调用了 GPIO_ReadOutputDataBit()函数,读取 PC3 的当前
输出电平,然后再用 1 减去读取得的电平数据状态,相当于获取一个也当前输
出相反的状态,再把这个相反的状态利用 GPIO_WriteBit()函数写入到 PC3,从
而实现了输出状态取反的功能。大家会发现,这实在太复杂了,我们只不过是
要取反输出,在 51 单片机可以直接 PA0=~PA0 就可以完成了,而在这里使用
库的时候,我们竟然要先读取状态,再计算出反状态,最后再写入新状态。能
不能也像单片机那样使用呢?答案是肯定的,我们可以采用 Cortex-M3 的位带
操作方式,实现同样的功能。

回复

使用道具 举报

发表于 2013-7-2 11:25:59 | 显示全部楼层
mdk  有专门的 位操作 的关键字 声明的
回复 支持 反对

使用道具 举报

发表于 2013-7-2 11:26:57 | 显示全部楼层
当然,也可以用 联合体 的位域 来实现
回复 支持 反对

使用道具 举报

发表于 2013-7-2 11:30:28 | 显示全部楼层
stm32 ,可以 用 Bitband方式(由内核支持)或者 BSRR寄存器(由外设支持)
回复 支持 反对

使用道具 举报

发表于 2013-7-2 17:45:56 | 显示全部楼层
可以去看看《CM3权威指南》中文版 宋岩译的那个....,上面有详细的介绍..
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-2 23:16:32 | 显示全部楼层
太棒了,非常感谢谢谢楼上的几位了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-11 02:06 , Processed in 0.029541 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表