关于I2C心得总结

*1关于读写操作*
在读操作时候,先执行一个伪写操作,然后再执行读操作。I2C要求的。

2关于时间的问题
一个晶振周期是晶振频率的倒数。
对于51单片机,一个机器周期是12个晶振周期。
一个nop()是一个机器周期。(具体nop()的时间见汇编)
对于时钟频率为11.0592Mhz的单片机,一个nop()是1us。

对于I2C驱动EEPROM的时序要严格按照下图:
这里写图片描述

我们一般把delay()时间设置为5us。即5个nop()。
对于I2C驱动其他外设,比如oled,它要求的保持周期只是0.6us。具体的要看器件的要求。

对于stm32

cortexm3的指令有单周期的,也有多周期的,3级流水线相当于同时处理3条指令,这同时被处理的3条指令处于指令执行周期的不同时段。所以平均下来,会达到1.25mips/Mhz的效果,也就是每个时钟周期能够执行超过一条指令。但具体到程序,并不是总能达到这个效果。

static void i2c_Delay(void)
{
    uint8_t i;

    /* 
        下面的时间是通过逻辑分析仪测试得到的。
    工作条件:CPU主频72MHz ,MDK编译环境,1级优化

        循环次数为10时,SCL频率 = 205KHz 
        循环次数为7时,SCL频率 = 347KHz, SCL高电平时间1.5us,SCL低电平时间2.87us 
        循环次数为5时,SCL频率 = 421KHz, SCL高电平时间1.25us,SCL低电平时间2.375us 

        上面的意思是SCL的频率是变化的。因为I2C要求,delay()延时超过4us。即scl频率低于250Khz。
      上面的处理大抵是符合的。
    */
    for (i = 0; i < 10; i++);
}

除了上述要求的延时之外,写和读之间也必须有延时,不可以写之后立刻读。需要延时相当长一段时间。
读操作没有时间要求,写操作一次最多8字节,需要得到10ms以上来固化数据。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在STM32的I2C调试过程中,有两种实现I2C协议的方式。一种是通过GPIO口来模拟I2C协议,另一种是使用STM32自带的I2C模块。其中,使用GPIO口模拟I2C协议需要详细了解I2C协议的内容,并修改对应的源码实现功能。而使用STM32自带的I2C模块,可能会遇到一些问题,一些网上的声音指出该模块存在bug且难以调试。然而,这些问题在我自己的实践中尚未遇到,可能需要进一步验证。在调试过程中,需要注意以下几点: 1. 首先,要确保I2C1时钟已经使能。可以使用RCC_APB1PeriphClockCmd函数来使能I2C1时钟。 2. 其次,需要配置I2C参数。例如,设置I2C_Mode、I2C_DutyCycle、I2C_ClockSpeed等参数。 3. 进一步,需要初始化I2C模块。可以使用I2C_Init函数进行初始化,并通过I2C_Cmd函数使能I2C模块。 4. 在主机中断发送数据时,可以使用I2C_INT_Write函数进行发送。该函数会检查总线是否繁忙,然后进行传输处理,并使能I2C_IT_TXI中断。这样可以实现主机中断发送功能。 以上是关于STM32的I2C调试过程的一些注意事项和示例代码。具体调试过程还需要根据实际情况进行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [STM32之I2C模块调试总结](https://blog.csdn.net/u010847928/article/details/83445346)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [STM32 I2C调试过程心得记录](https://blog.csdn.net/yhl_sophia/article/details/88718448)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值