stm32 之 IIC应用

stm32 之 IIC应用

ID:39468486

大小:220.50 KB

页数:7页

时间:2019-07-04

stm32 之 IIC应用_第1页
stm32 之 IIC应用_第2页
stm32 之 IIC应用_第3页
stm32 之 IIC应用_第4页
stm32 之 IIC应用_第5页
资源描述:

《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); 

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。