本文主要是介绍【IIC】#define SDA_IN() {GPIOB->CRH=0XFFFFFF0F;GPIOB->CRH|=8<<4;},希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在软件IIC中看到以下代码,花了好长时间搞懂,特此记录
// SDA对应IO口方向的设置
#define SDA_IN() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=8<<4;}// 1000 上拉输入模式
#define SDA_OUT() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=3<<4;}// 输出模式,最大速度50mhz
首先了解所操作的CRH寄存器
1.清零
GPIOB->CRH&=0XFFFFFF0F
注意CRH是高八位IO控制寄存器,是一个32位的寄存器,其中CNFX 和 MODEX 这16位来控制一个IO的工作模式, 注意只用到每八位的[1:0]两位!
SDA对应PB9
GPIOB->CRH&=0XFFFFFF0F
因此此代码将SDA对应的位置清零
2.设定
GPIOB->CRH|=8<<4
8 :1000
因为每16位对应4位二进制代码,为了跳过 PB8对应的位数,左移4来实现。
那么为了操作PB10 就是
GPIOB->CRH|=8<<8
那么为了操作PB11 就是
GPIOB->CRH|=8<<12
是不是很清除了呢?
这篇关于【IIC】#define SDA_IN() {GPIOB->CRH=0XFFFFFF0F;GPIOB->CRH|=8<<4;}的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!