使用STM8L的硬件I2C(一)硬件I2C简介

使用STM8L的硬件I2C(一)硬件I2C简介

I2C是常用的外设协议,用途广泛。
很多时候为了实现简单,在STM8上大家都是用GPIO来模拟I2C工作。
STM8L自带硬件I2C,不过相对于模拟I2C的清晰简单,硬件I2C的处理要麻烦一些。
一是必须要理解各寄存器用法,二是使用STD库时还须理解STD抽象出的I2C接口和使用逻辑。

模拟I2C一般情况下使用问题不大,但若同时要处理其他外设或者对延时有要求,模拟方法就力不从心。
使用硬件I2C,是更好的办法。目前STM8L上利用硬件I2C的文章很少,
我来分享一下经验,总体分为以下几个部分介绍:
(一)硬件I2C的简介(本文)
(二)硬件I2C的事件和检测
(三)硬件I2C中断读写(流程及代码)
(四)硬件I2C的使用注意

1、I2C协议回顾

  • Start: 表示通信开始,SCL为高电平时SDA拉低
  • Stop: 表示通信结束,SCL为高电平时SDA拉高
  • Ack:收到8位数据时的回应
  • NAck:不再接收数据时的回应
  • ReStart:没有Stop时又一次发出的Start
  • 数据收发:SCL低电平时SDA跳变且只能在SCL低时跳变、SCL高电平时SDA要维持供采样

2、STM8L的I2C功能

STM8L支持硬件I2C,但只提供了一个I2C硬件接口,即I2C1。
其SCL pin为PC1,SDA pin为PC0。
支持Master和Slave, 支持标准频率100KHz和高速400KHz两种速率。
另外,作为高级功能,还支持I2C的SMB模式以及DMA方式传输数据。

3、STM8L的I2C寄存器

所谓硬件I2C,无非是MCU内部实现了I2C协议,由硬件执行控制逻辑。
而MCU对外的接口只有寄存器,所以STM8L提供了很多寄存器用于在各个方面和内部I2C实现做交互。
包含控制、状态、数据缓冲、中断等等方面。具体如下:

控制寄存器:

  • Control register 1 (I2C_CR1)
  • Control register 2 (I2C_CR2)

I2C时钟寄存器:

  • Frequency register (I2C_FREQR)

地址寄存器:(支持10位地址所以有2个地址寄存器)

  • Own address register LSB (I2C_OAR1L)
  • Own address register MSB (I2C_OAR1H)
  • Own address register 2 (I2C_OAR2)

数据寄存器:所有数据发送和接收都用这个寄存器,包括I2C外设地址

  • Data register (I2C_DR)

状态寄存器:SR1和SR3为通信状态、SR2主要错误状态

  • Status register 1 (I2C_SR1)
  • Status register 2 (I2C_SR2)
  • Status register 3 (I2C_SR3)‘

中断和DMA寄存器:控制中断类型(Event/Buffer/Error)

  • Interrupt and DMA register (I2C_ITR)

时钟频率控制寄存器:用于设置I2C通信频率

  • Clock control register low (I2C_CCRL)
  • Clock control register high (I2C_CCRH)

上升沿控制寄存器:I2C_Init函数会自动设置该寄存器

  • TRISE register (I2C_TRISER)

Pakcet校验寄存器:硬件I2C支持CRC校验,开启该功能时使用此寄存器

  • PEC register (I2C_PECR)

全部寄存器:
使用STM8L的硬件I2C(一)硬件I2C简介_第1张图片

其中I2C通信控制中最常用的寄存器是:
CR1/CR2/SR1/SR3

你可能感兴趣的:(STM8L,I2C,IIC,硬件I2C,中断)