网络上很多F1系列的ATC24的读写程序,但F0几乎没有。由于F0完全重写了I2C,所以以往的代码并不能直接使用,修改事件、接口上会浪费很多时间,特别是对于使用F0系列进行入门的新手。
在此十分感谢 畅学电子网 的对于AT24C16的资料,特别是AT24C16地址的解释。调试过程中这篇文章给了很大的帮助。建议不想只当伸手党的同志们认真阅读,否则只会Ctrl C Ctrl V,你又怎么能说自己是嵌入式开发者?
废话不多说,进入正题。(哈哈,每篇文章都用这个开头)
I2C 的配置
static void InitI2C()
{
I2C_InitTypeDef I2C_InitStructure;
GPIO_InitTypeDef GPIO_InitA;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);//使能I2C1,I2C2的时钟
RCC_I2CCLKConfig(RCC_I2C1CLK_SYSCLK);//时钟源设定
GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_1); //配置PB8 成第二功能引脚 I2C1_SCL
GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_1); //配置PB9 成第二功能引脚 I2C1_SDA
GPIO_InitA.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitA.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitA.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitA.GPIO_OType = GPIO_OType_PP;
GPIO_InitA.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOB, &GPIO_InitA);
I2C_InitStructure.I2C_Mode = I2C_Mode_SMBusHost;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Enable;
I2C_InitStructure.I2C_DigitalFilter = 0x01;
I2C_InitStructure.I2