首页 > 其他 > 详细

STM32的寄存器控制SDA_IN()/SDA_OUT()

时间:2016-09-07 18:55:03      阅读:762      评论:0      收藏:0      [点我收藏+]

#define SDA_IN()  {GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=(u32)8<<28;}
#define SDA_OUT() {GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL|=(u32)3<<28;}

 

终于碰到点儿寄存器的操作了.

上面的意思, 其实就是切换PA_7的模式, 控制模式的寄存器叫CRL跟CRH, 如下图:

CRL(引脚0-7):

技术分享

CRH(引脚8-16):

技术分享

研究了一下,

GPIOA->CRL&=0X0FFFFFFF;

GPIOA->CRL|=(u32)8<<28;

的意思 先都置0, 得0000, 然后1000B, 左移28位, 得1000, 分别是将CRL的31到28bit位置1000, 查下面的表:

技术分享

 

1000意思就是Input模式, Input pull-down/pull-up

GPIOA->CRL&=0X0FFFFFFF;

GPIOA->CRL|=(u32)3<<28;

3换成2进制是0011, 结合上面的就是00就是outpu的push-pull, 11表示速度是50MHz

 

那么, 如果要修改PA_11的配置, 就修改CRH, 移动3*4次就好,

#define SDA_IN()  {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=(u32)8<<12;}
#define SDA_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=(u32)3<<12;}

 

经验证, 成功.

 

STM32的寄存器控制SDA_IN()/SDA_OUT()

原文:http://www.cnblogs.com/Montauk/p/5850344.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!