打印
[应用相关]

为什么采用PBout(0)=0而没有采用GPIOB->ODR=0<<0??

[复制链接]
6749|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#include <stm32f10x_lib.h>
#include"led.h"
int main(void)
{
  Stm32_Clock_Init(9);
led_init();
PBout(0)=0;
// GPIOB->ODR=0<<0;

while(1);

}

问题:采用PBout(0)=0;和采用GPIOB->ODR=0<<0;都能点亮接在B口上第一个引脚的LED,这两者有什么不同呢?为什么教程上采用PBout(0)=0而没有采用GPIOB->ODR=0<<0??
沙发
ar_m_cu| | 2014-3-23 18:50 | 只看该作者
编程习惯,这就像有人习惯用while(1);有人习惯用for(;;)实现死循环一样

使用特权

评论回复
板凳
Marco-Marco| | 2014-3-23 21:23 | 只看该作者
采用PBout(0)=0是做了相应位带操作的处理,目的是观赏性更强,具体实现可参考正点原子sys.h如图

使用特权

评论回复
地板
mmuuss586| | 2014-3-23 21:39 | 只看该作者
PBout(0)=0;类似51的编程习惯,更通俗易懂

使用特权

评论回复
5
拿起书本| | 2014-3-24 22:32 | 只看该作者
有两种方式,一种是控制方向,另外一种是控制输出寄存器的值

使用特权

评论回复
6
huangfeng33| | 2014-3-30 17:23 | 只看该作者
放在一起也是可以的,只是如果工程大了,文件多了,就混乱了
按类型分了类,清除也好找啊,最好保持这种好的做法!

使用特权

评论回复
7
小L1u氓| | 2014-8-27 12:27 | 只看该作者
实现的效果都一样吧,一样的话就是个人习惯了,就像有的人习惯用左手有的人习惯用右手一样。

使用特权

评论回复
8
小L1u氓| | 2014-8-27 12:30 | 只看该作者
突然明白了,PBout(0)=0只将PB0清零,GPIOB->ODR=0<<0?是将PB0~PB15都清零
清零操作:
将PB0清零可以这样写:GPIOB->ODR&=~(1<<0),
将PB1清零可以这样写:GPIOB->ODR&=~(1<<1),
……
……
将PB15清零可以这样写:GPIOB->ODR&=~(1<<15),
置1操作:
将PB0置1可以这样写:GPIOB->ODR|=(1<<0),
将PB1置1可以这样写:GPIOB->ODR|=(1<<1),
……
……
将PB15置1可以这样写:GPIOB->ODR|=(1<<15),
其它以此类推~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

482

主题

2214

帖子

11

粉丝