首先IIC.H里修改的内容,端口映射不会有错,检查了好几遍了
//IO方向设置
#define SDA_IN() {GPIOD->CRL&=0X0FFFFFFF;GPIOD->CRL|=0X80000000;}
#define SDA_OUT() {GPIOD->CRL&=0X0FFFFFFF;GPIOD->CRL|=0X30000000;}
//IO操作函数
#define IIC_SCL  
Dout(6) //SCL
#define IIC_SDA  
Dout(7) //SDA
#define READ_SDA PDin(7) //输入SDA
然后IIC.C里,我看有的人代码里是
GPIO_Mode_Out_OD,不过换了也没啥意义。
//初始化IIC
void IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD, 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(GPIOD, &GPIO_InitStructure);
GPIO_SetBits(GPIOD,GPIO_Pin_6|GPIO_Pin_7); //PB10,PB11 输出高
}
接着24CXX.H 的EE_TYPE改成AT24C64,不太清楚AT24C64和FM24CL64的差别
最后24CXX.C里面没有动,代码也是新的,不存在多一个ACK的问题,样例的在战舰开发板上跑没问题,修改后的在自己的板子上跑就没反应了,自己改了许多,也用了许多网上别人说成功的代码,都不行。
求大神帮助!!!!!!!!!!!!!!!!!!!!!!!!!!!
---------------------------------
把输出模式改成开漏之后,单字符发送接收成功了,连续多字符读写不行,我再自己写一个连续读写的函数好了!
一周热门 更多>