程序是从原子例程的基础上改的 之前试过读写AT24C08,读写正常;但同样的电路换成AT24C512就不行,#define AT24C512 65535 这个已经改了,读出来全是FF,应该是没写进去 wp置低了
还有就是驱动AT24C08的时候我把例程SCL SDA的管脚配置成开漏输出读写也不行(加了上拉电阻,而且我测得波形貌似也正常),配成推挽输出就能正常读写
[mw_shl_code=c,true]void AT24CXX_IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //???ì????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //???ì????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_SetBits(GPIOE,GPIO_Pin_9|GPIO_Pin_10); //PB10,PB11 ??????
}
[/mw_shl_code]
[mw_shl_code=c,true]//////////////////////////////////////////////////////////////////////////////////
#define AT24CXX_SDA_IN() {GPIOE->CRH&=0XFFFFF0FF;GPIOE->CRH|=8<<8;}
#define AT24CXX_SDA_OUT() {GPIOE->CRH&=0XFFFFF0FF;GPIOE->CRH|=3<<8;}
//IO??×÷????
#define AT24CXX_IIC_WP PEout(8) //SCL
#define AT24CXX_IIC_SCL PEout(9) //SCL
#define AT24CXX_IIC_SDA PEout(10) //SDA
#define AT24CXX_READ_SDA PEin(10) //????SDA
#define AT24C01 127
#define AT24C02 255
#define AT24C04 511
#define AT24C08 1023
#define AT24C16 2047
#define AT24C32 4095
#define AT24C64 8191
#define AT24C128 16383
#define AT24C256 32767
#define AT24C512 65535
//?¨??EE_TYPE??AT24C512
#define EE_TYPE AT24C512[/mw_shl_code]
其他 部分没变
|