我用原子的IIC例程,更改了SDA和CLK两个引脚,就无法读写AT24C16了

2019-07-21 08:05发布

我用原子的IIC例程,更改了SDA和CLK两个引脚,就无法读写AT24C16了,求高手指点!!!
自顶!!!
更改代码如下:

这是没改之前的

//IO·½ÏòéèÖÃ
#define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}

//IO2ù×÷oˉêy         
#define IIC_SCL    PBout(6)                 //SCL
#define IIC_SDA    PBout(7)                 //SDA         
#define READ_SDA   PBin(7)                          //ê&#228;è&#235;SDA


void IIC_Init(void)
{

        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOB, ENABLE );        //ê1&#196;üGPIOBê±&#214;ó
          
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //í&#198;íìê&#228;3&#246;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7);         //PB6,PB7 ê&#228;3&#246;&#184;&#223;

}


这是改了之后的
//IO·&#189;&#207;òéè&#214;&#195;

#define SDA_IN()  {GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=(u32)8<<4;}
#define SDA_OUT() {GPIOB->CRL&=0XFFFFFF0F;GPIOB->CRL|=(u32)3<<4;}

//IO2ù×÷oˉêy         
#define IIC_SCL    PBout(0) //SCL
#define IIC_SDA    PBout(1) //SDA         
#define READ_SDA   PBin(1)  //ê&#228;è&#235;SDA



void IIC_Init(void)
{                                             
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOB, ENABLE );        //ê1&#196;üGPIOBê±&#214;ó
          
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //í&#198;íìê&#228;3&#246;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1);         //PB6,PB7 ê&#228;3&#246;&#184;&#223;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
Anyint
2019-07-22 07:08
改了端口的话,记得SDA这个脚,在at24cxx.h当中有两句代码是操控SDA管脚输入输出模式的切换的,用的是寄存器操作,所以你改了管脚,那个模式切换那边的也得改。

下面这两行要改

#define At24cxxSdaModeIn()   {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)8<<28;}
#define At24cxxSdaModeOut()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(u32)3<<28;}

一周热门 更多>