我用原子的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条回答
hong12345
1楼-- · 2019-07-22 05:18
 精彩回答 2  元偷偷看……
Anyint
2楼-- · 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;}
Rogy
3楼-- · 2019-07-22 11:24
我最近也是卡在24C16的读写这个地方了,搞了好久也没有搞正常,求指导啊
渣渣晖
4楼-- · 2019-07-22 17:01
Anyint 发表于 2018-7-13 21:18
改了端口的话,记得SDA这个脚,在at24cxx.h当中有两句代码是操控SDA管脚输入输出模式的切换的,用的是寄存 ...

这两行怎么改?

学习STM32F103
5楼-- · 2019-07-22 22:36
你把模式改成上拉试试?感觉是上拉问题
szczyb1314
6楼-- · 2019-07-23 02:26
 精彩回答 2  元偷偷看……

一周热门 更多>