7、STM32之 AT24CXX --模拟IIC

以畅学三合一傻瓜板为例

IO管教 配置图

 

电路图:

 

此刻我们可以想到 IIC 协议中  SCL代表时钟, SDA代表数据。其中 主机模式 为 STM32F103C8T6 ,从机模式 为 AT24C02 。

可知 时钟有STM32提供, 即 SCL-PB2 必须为 输出模式,也只有输出模式一种。 

而 SDA 数据是双向的,可以是 从机向主机发送  数据或应答(非)信号。 也可以是 主机向从机发送  数据或应答(非) 信号。

PS:解决一个相对性问题,对于 主机STM32来说,下面的思维都是按照 这个相对性来解释的。

  主机向从机发送  数据或应答(非) 信号 是 写数据;

  从机向主机发送  数据或应答(非) 信号 是 读数据。 

如此而来, SDA--PB3 有两个方向,一个是输入,一个是输出两种模式。

一、看一下配置: 

设置二者0、1 状态

 

下面配置PB2、3 (包含SCL-PB2 必须为输出模式,也只有输出模式一种)

 

分析为什么要功能复位时钟,并且 JTAG和SW全部失能??

用一大节的内容讲解:

1、为什么要开启复位时钟?

我们要使用复位功能,必然要打开这个复位时钟。使用复位功能是为了在调试期间可以使用更多GPIOs 口。

因为这里我们要使用PB3,关键问题是 JTAG和SW占用了PB3(图)

 

这些端口是否可用,如下图。

 

001、010、100 这3中配置分别对应了,IO口是否复用可用。

 

这样说明为什么要开启复位时钟了,就是为了要使用 PB3端口,否则不可用。

看一下电路图:

 

2、怎样使用端口重映射配置,复用情况有3种?

 

 

是通过上图配置的,每种配置的含义在之前已经说明。

这样初始化IIC就全部分析完了。

二、SDA--PB3 有两个方向,一个是输入,一个是输出两种模式。

先附几张简单流程图,看完想必一定有启发

 

 

下面简单介绍一下IIC 时序

1)起始信号和终止信号  (都是主机发送,所以都是输出模式)

 

2) 应答 与 非应答   (包括一个等待应答)  (也是主机发送,所以输出模式)

主机应答与非应答

 

下面看一下 等待应答 

(主机等待从机应答,所以这个应答是 从机发送给主机,那么SDA为输入模式)

 

 

3) 读写一个字节

 

写一个字节 (主机发送,所以SDA输出)

 

读1个字节 ,分为有应答 和 非应答 (是从机给主机发送,所以主机SDA设置为输入模式,完成后 是否有主机的应答)

 

 

 

 

下面看一下  AT24C02  收发过程

 

 这样上面散装的胳膊、腿什么的都准备好了,下面开始组装。

 

初始化,不介绍。

 

读出一个数据

 

这里IIC_Send_Byte  和 IIC_Read_Byte  函数写的时候,都是按照 8 位数据来的,

所以当有类似 AT24c02 的 超过8位 数据的时候,要发送两次来确定地址。

 

写入一个数据

 

 

下面看一下别的读写一个数据:也是调用了上面函数

 

  检查AT24CXX是否正常

这样AT24C02XX--IIC关系就讲解完了,这要在 main 函数中使用其相应的函数即可。

这给人的感觉就是一层一层封装的感觉,最后把接口留给用户,这样用户直接使用接口就能完成AT24CXX 存储器模块的读写。

同理 STM32的3.5库也是这种道理,我们是上层用户,我们知道接口后,直接调用STM32函数库; 而使用我们写好函数的用户是 上上层用户,直接调用AT24CXX_Write和AT24CXX_Read 就能完成操作。

如果用相对性理解的话,我们也算是底层开发,哈哈!!

 

 

 

 

 

州仔 发表于08-21 13:38 浏览65216次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

州仔
州仔()
金币:3354个|学分:191145个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号