打印

问个小白问题。C与GPIO

[复制链接]
2598|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 lord_fan 于 2011-5-6 22:07 编辑

//此两句话屏蔽低8位端口
    Unsigned int  value;
    GPIOB->BSRR = (value<<8) & 0xff00;
    GPIOB->BRR = ((~value)<<8) & 0xff00;
如手册说的。BSRR高16bit是复位。低16Bit是置位。
                  BRR高是保留。低是复位。

1.复位应该是指置0没错吧。。。
2value高8位 原本是1 经过BSRR 置位不就变0了?
3value送给BRR的高8位。他不是保留位吗?这样不是没作用

请大家帮我解释下这个是怎么屏蔽端口的低8位的。C学得不好。呵呵 我有结贴的习惯。

1.jpg (52.21 KB )

1.jpg

2.jpg (65.47 KB )

2.jpg
沙发
airwill| | 2011-5-6 21:48 | 只看该作者
楼主没有仔细看吧,
如手册说的。BSRR高16bit是复位。低16Bit是置位。
                  BRR高是保留。低是复位。

1.复位应该是指置0没错吧。。。
2value高8位 原本是1 经过BSRR 置位不久变0了?
3value送给BRR的高8位。他不是保留位吗?这样不是没作用

1. 正确
2. BSRR 置位, 是 GPIO 置1.的操作, 怎么叫 "变0"?
3. BRR 是 16位的, 不是8位, 是不是你弄错了?

使用特权

评论回复
板凳
zhiyonghe| | 2011-5-6 22:04 | 只看该作者
//此两句话屏蔽低8位端口
    Unsigned int  value;
    GPIOB->BSRR = (value<<8) & 0xff00;
    GPIOB->BRR = ((~value)<<8) & 0xff00;
//----------------------------------------------------------------
这两句无论value值为什么,寄存器GPIOB->BSRR ,GPIOB->BRR 低八位都是0 !& 0XFF00

使用特权

评论回复
地板
zhiyonghe| | 2011-5-6 22:17 | 只看该作者
1.复位应该是指置0没错吧。。。
2value高8位 原本是1 经过BSRR 置位不久变0了?
3value送给BRR的高8位。他不是保留位吗?这样不是没作用
//----------------------------------------------------------
1.复位,寄存器上面有复位值,全为0,是不是0关键看复位值。
2.value高8位??这个表述估计有错;GPIOB->BSRR = (value<<8) & 0xff00; 这句的意思是把value的低八位值放到BSRR的高八位中去,即BS8~BS15。
3.刚好和上面一样,只是把~value值放到BRR的高八位中去,即BR8~BR15。

使用特权

评论回复
5
lord_fan|  楼主 | 2011-5-7 08:51 | 只看该作者
本帖最后由 lord_fan 于 2011-5-7 09:08 编辑

谢谢两位。取反后的VALUE值会变吗?

就是取反做运算。然后下次用value的时候还是原来的值?

移位符号呢?会改变原来变量的值?
----------------------
刚发现。BSRR只能以字的方式访问。就是16字节。那他的高16字节怎么访问?用双字?

-----------------------
BSRR和BRR是不是一定要合用,才能送出某个数啊?
不知道有没别的单个寄存器可以直接赋值,送出某个数的?

使用特权

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

本版积分规则

0

主题

308

帖子

0

粉丝