使用STM8L的硬件I2C(四)硬件I2C的使用注意

本文介绍使用STM8L微控制器进行硬件I2C通信时的关键注意事项,包括时钟配置、从机地址设置、读流程关闭及超时处理等。特别强调了在中断模式下对Ack和Stop信号的预处理以及错误处理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用STM8L的硬件I2C(四)硬件I2C的使用注意

其他系列文章请参见:
(一)硬件I2C的简介
(二)硬件I2C的事件和检测
(三)硬件I2C中断读写(流程及代码)

使用STM8L的硬件I2C时,有几个点要注意:

  • I2C的初始化
    时钟的使能操作必须在其他I2C设置之前,否则设置不生效

    CLK_PeripheralClockConfig(CLK_Peripheral_I2C1, ENABLE);
    
  • Slave地址的设置
    这一点让人困扰,花了不少时间才搞清楚。
    是因为标准库函数I2C_Send7bitAddress()并不会帮助你左移。
    这个左移动作必须由用户完成,如下:

    I2C_Send7bitAddress(I2C1, _i2c_dev.addr << 1, I2C_Direction_Transmitter);实现并不会帮助左移
    
  • Read流程的关闭
    因为使用硬件I2C,处理速度较快。要预先在下一数据接收前完成Nack和Stop设置。
    中断和Polling模式都要处理,特别是中断必须处理。中断模式下可以如下操作:

    EV5:送Slave地址(Read)
    EV6:如果仅需读取字节数n=1,则直接关Ack并发送Stop,n>=2,则不做动作
    EV7:先读数据,然后判断剩余字节n,如果n=1,则关Ack并发送Stop,如n=0,则关中断
    

其实本质就是必须要提前1个字节做好准备动作(清Ack、开Stop)。

  • 超时处理
    要是地址错误或者其他总线错误会导致总线挂起停止响应,所以应用层上最好做超时处理。

  • I2C_IT_ERR和SR2处理
    开启了I2C_IT_ERR中断时,SR2中会存储错误码供处理。
    最简单的处理就是将SR2清楚,重置为0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值