欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IIC实验感想

程序员文章站 2024-02-09 16:11:52
...

初始化SDA数据线和SCL时钟线

void IIC_Init(void)
{					     
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(	RCC_APB2Periph_GPIOB, ENABLE );//使能GPIOB	
	   
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;//PB6,PB7
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //开漏输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7); 	//PB13,PB14 输出高
}

通过操作IO对应的寄存器GPIOx->CRL(CRH),改变SDA是输入还是输出,8的二进制是1000,左移28位在寄存器CPL上对IO口7进行操作,10且为上下拉输入,00代表为输入模式;3=0011右移28位,00表示通用推挽输出,11表示输出模式

#define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}//上/下拉输入
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}//通用推挽输出

//IO操作函数	 
#define IIC_SCL    PBout(6) //SCL
#define IIC_SDA    PBout(7) //SDA	 
#define READ_SDA   PBin(7)  //输入SDA 
相关标签: STM32