欢迎来到天天文库
浏览记录
ID:39468486
大小:220.50 KB
页数:7页
时间:2019-07-04
《stm32 之 IIC应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、stm32之IIC应用iic协议是比较简单的双线协议,时钟线CLK和数据线SDA。一般我们常见的还有spi总线,这种总线可以可以根据需要扩展,还有单总线等等这次还以at240c2为例进行操作!PS:这就是传说中的iic时序图硬件构造我们不过多的分析,今天用到库了!我们先从库函数硬件iic初始化说起!PB6 -- CLKPB7 -- SDA[cpp]viewplaincopyprint?1.void i2c_init(u8 addr,u32 clock) 2.{ 3. I2C_InitTypeDef i2c; 4. RCC->APB2ENR
2、=
3、1<<3; 5. GPIOB->CRL
4、= (u32)0xff<<(6*4); 6. 7. RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE); 8. i2c.I2C_Ack = I2C_Ack_Enable; 9. i2c.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; 10. i2c.I2C_ClockSpeed = clock*1000; 11. i2c.I2C_DutyCycle =
5、I2C_DutyCycle_2; 12. i2c.I2C_Mode = I2C_Mode_I2C; 13. i2c.I2C_OwnAddress1 = addr; 14. 15. I2C_Cmd(I2C1,ENABLE); 16. I2C_Init(I2C1,&i2c); 17.} voidi2c_init(u8addr,u32clock){I2C_InitTypeDefi2c;RCC->APB2ENR
6、=1<<3;GPIOB->CRL
7、=(u32)0xff<<(6*4);RCC_APB1PeriphClockCmd(RCC_
8、APB1Periph_I2C1,ENABLE);i2c.I2C_Ack=I2C_Ack_Enable;i2c.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;i2c.I2C_ClockSpeed=clock*1000;i2c.I2C_DutyCycle=I2C_DutyCycle_2;i2c.I2C_Mode=I2C_Mode_I2C;i2c.I2C_OwnAddress1=addr;I2C_Cmd(I2C1,ENABLE);I2C_Init(I2C1,&i2c);}在配置管脚方面,我还是喜欢用寄存器配置,
9、因为我的两行代码可以解决库函数的N多行代码的问题!还有在结构体变量命名方面也是属于我自己的独创吧,这样反正我觉得是既容易识别,也少打几个字!typedefstruct{ uint32_tI2C_ClockSpeed;//I2C时钟频率设置 uint16_tI2C_Mode; //I2C模式设置 uint16_tI2C_DutyCycle; //高低电平时间之比 uint16_tI2C_OwnAddress1; //主设备地址设置,也就是自己的地址 uint16_tI2C_Ack; //Check uint16_tI2C_Acknowl
10、edgedAddress;//地址长度,可以为7bit的也可以为10bit的}I2C_InitTypeDef;IIC初始化完之后,我们开始来研究eeprom看完这个写一个字节的协议之后,我们应该对这个写已经没有什么问题了,很简单的。这个是写一个page注:在eeprom里面写数据时,一次最多只能写一个page,一个page为8byte,同时这个也有字节对齐的要求!比如我们从Address=4开始写,那么我们最多一次性可写4个byte,如果我们从8开始写的话,我们就可以8个byte,最后偏移到15。[cpp]viewplaincopyprint?1.void eep
11、rom_write_byte(u8 wt_addr,u8 data) 2.{ 3. 4. I2C_GenerateSTART(I2C1,ENABLE);delay(5); 5. I2C_Send7bitAddress(I2C1,EEPROM_ADDR,I2C_Direction_Transmitter); 6. while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); 7. I2C_SendData(I2C1,wt_addr);delay
12、(5);
此文档下载收益归作者所有