这个例程是讲解一下I2C,相信大家以前学51的的时候想驱动AT24C02的时候就是用到模拟I2C总线吧。在STM8S207RB中,是以硬件来实现I2C总线的,如果大家说哪一种方式来驱动AT24C02的话,我只能说是各有千秋。用IO模拟的I2C总线的话就简单点,但速度不够快,如果是用片内的硬件I2C的话,程序编写有点复杂,但速度快很多。下面我主要是介绍STM8S207RB的硬件I2C.
1 / 10
风驰电子STM8开发板 2011
大家可以参考STM8寄存器.pdf文档中的第246页至248页。 大家在看看我们风驰电子STM8开发板的硬件连接
下面我们从主函数看起
2 / 10
风驰电子STM8开发板 2011
其他的初始化就不多说了,现在前面的例程都说得很清楚了,先主要是说下与I2C相关的初始化和读写
I2C_DeInit() I2C的复位,其实设和没设都一样,因为单片机复位后它也跟着复位了。
I2C_EEInit() I2C的初始化 函数原型:
3 / 10
风驰电子STM8开发板
I2C_Init(I2C_Speed, I2C1_SLAVE_ADDRESS7, I2C_DUTYCYCLE_2,\\
I2C_ACK_CURR, I2C_ADDMODE_7BIT, Input_Clock)重点看下这个函数,这个就是I2C总线的初始化。设置I2C的速度为标准的速度 100K,从地址为0xA0,快速模式Fast mode Tlow/THigh = 2 ,当前数据位应答,7位从地址,时钟为系统时钟。
函数原型:void I2C_Init(u32 OutputClockFrequencyHz, u16 OwnAddress, I2C_DutyCycle_TypeDef DutyCycle, I2C_Ack_TypeDef Ack, I2C_AddMode_TypeDef AddMode, u8 InputClockFrequencyMHz )
代码太长了,看工程代码就可以了。
初始化弄好了,那怎样往从地址写一个字节呢?这个很重要 我们的选择模式是主设备方式读写
4 / 10
风驰电子STM8开发板 2011 这个函数主要是根据I2C的时序来操作的,下面介绍一下I2C的时序
5 / 10
风驰电子STM8开发板 2011 来源于STM8寄存器.pdf中第251页
6 / 10
风驰电子STM8开发板 2011
这个函数是往AT24C02写一页数据,每页最多能写8Byte。
7 / 10
风驰电子STM8开发板 2011 8 / 10
风驰电子STM8开发板 2011 这个函数是从AT24C02任何地址读多个字节的(可以超过8个字节)回来放在内存pBuffer中。
参考STM8寄存器.pdf文档第252页。
9 / 10
风驰电子STM8开发板 2011
实验效果:
风驰电子祝您学习愉快~~~!!!!!
10 / 10
因篇幅问题不能全部显示,请点此查看更多更全内容