IIC实验求指教

2019-08-14 19:15发布

原子哥IIC实验用的是PB10、PB11,我改用为PB6、PB7。修改前后的程序如下,可是最后检测不到AT24C02的存在,是不是还需要修改其它地方,请大神指点!小民万分感激!

/*
//IO方向设置
#define SDA_IN()  {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<12;}
#define SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=3<<12;}

//IO操作函数     
#define IIC_SCL    PBout(10) //SCL
#define IIC_SDA    PBout(11) //SDA     
#define READ_SDA   PBin(11)  //输入SDA
*/
///*
//IO方向设置
#define SDA_IN()  {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<8;}
#define SDA_OUT() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=3<<8;}

//IO操作函数     
#define IIC_SCL    PBout(6) //SCL
#define IIC_SDA    PBout(7) //SDA     
#define READ_SDA   PBin(7)  //输入SDA
//*/

//初始化IIC
void IIC_Init(void)
{    /*                     
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(    RCC_APB2Periph_GPIOB, ENABLE );    
      
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;
    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_10|GPIO_Pin_11);    //PB10,PB11 输出高
    */
    ///*
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(    RCC_APB2Periph_GPIOB, ENABLE );    
      
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
    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);    //PB6,PB7 输出高
    //*/
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
27条回答
赵雨骁
1楼-- · 2019-08-17 02:31
正点原子 发表于 2015-5-8 00:32
回复【17楼】图灵信念:
---------------------------------
每个IO模式配置占用4个位,第7个IO,那不是&lt; ...

那第11个IO不就是4*11=44,为什么却是<<12??
xuande
2楼-- · 2019-08-17 08:15

不同的寄存器,每个IO占用的位数不同,
有的4位,所以就是 4 x n;
有的2位,所以是 2 x n;还有1位的。

去看下寄存器的位定义就明白了。



aiyeba
3楼-- · 2019-08-17 12:46
 精彩回答 2  元偷偷看……
学习stm32加油
4楼-- · 2019-08-17 14:01
正点原子 发表于 2015-5-8 00:32
回复【17楼】图灵信念:
---------------------------------
每个IO模式配置占用4个位,第7个IO,那不是&lt; ...

我用SDA是PB7  SCL是PB6,寄存器设置SDA_IN()和SDA_OUT()是怎么弄啊原子哥
Sunny^o^
5楼-- · 2019-08-17 19:28
aiyeba 发表于 2016-7-12 13:57
每一组IO有16个 PA0~PA15   每个IO又需要占4位寄存器    所以将PA0~PA15分成每8个一组。

PA0~PA7  是 ...

很详细,赞
操作系统
6楼-- · 2019-08-18 00:18
i2c总线当然要使用开漏模式,其它做法,程序复杂,问题多多.

一周热门 更多>