STM32入门学习------每天进步一点点(记得多写代码多总结((二))

读STM32数据手册
作为每一个学习嵌入式开发的我们必须要学会了解去阅读一个产品的数据手册,否则对一些东西不能很好的使用,当然跟大多数人一样看到这个东西难免会头大,所以慢慢来了解一下**
转载链接:https://blog.csdn.net/qq_29350001/article/details/79799713
MMA8452Q是一款智能低功耗三轴电容式微机械系统,具有12位分辨率的加速计。MMA8452Q具有用户可选的满量程±2g /±4g /±8g高通过滤后的数据以及实时可用的未过滤数据。 该设备可以 配置成从任何组合产生惯性唤醒中断信号,可配置的嵌入式功能允许MMA8452Q监控事件,并在闲置期间保持低功耗模式。
————————————————
版权声明:本文为CSDN博主「聚优致成」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_29350001/article/details/79799713
特性
t特性方面很多都是电气参数,涉及比较多的模电数电概念
引脚定义主要有输入输出和开漏三种状态
器件电源通过VDD线供电。电源去耦电容器(100 nF陶瓷加上4.7μF容量,或单个4.7μF陶瓷)应尽可能靠近器件的引脚1和14放置。 控制信号SCL,SDA和SA0不能耐受高于VDDIO + 0.3 V的电压。如果VDDIO被移除,则控制信号SCL,SDA和SA0将利用其内部ESD保护二极管来钳位任何逻辑信号。两个中断引脚(INT1和INT2)的功能,阈值和时序可通过I 2 C 进行用户编程接口。 SDA和SCL I 2 C连接是漏极开路的,因此需要使用上拉电阻。
————————————————
上面这些东西是在涉及PCB版布局画线时会接触到的,可以深入模电了解其中原理。
表1.引脚说明
Pin# 引脚名称    描述              引脚状态
1    VDDIO     内部电源(1.62 V - 3.6 V)    输入
2    BYP      旁路电容(0.1μF)        输入
3    NC       保持开放。不要连接。      打开
4    SCL      I 2 C串行时钟         开漏
5    GND     连接到地面           输入
6    SDA      I 2 C串行数据         开漏
7    SA0      I 2 C设备I 2 C地址的最低有效位  输入
8    NC      内部未连接(可以是GND或VDD) 输入
9    INT2      惯性中断2            输出
10   GND      连接到地面            输入
11   INT1      惯性中断1            输出
12   GND      连接到地面            输入
13   NC       内部未连接(可以是GND或VDD)  输入
14   VDD      电源(1.95 V - 3.6 V)       输入
15   NC       内部未连接(可以是GND或VDD)  输入
16   NC       内部未连接(可以是GND或VDD)  输入
————————————————
在这些引脚的定义中,我们可以来了解一下什么是IIC?
转载链接:https://blog.csdn.net/qq_29350001/article/details/78738305
网上的资料很多,但是大多讲解的不太全面。如果只是单纯的讲一下I2C总线协议,那就没必要再写了。因为MPU6050 开发部分已经将 I2C 通信协议,讲的很清楚了。但是I2C设备驱动、上拉电阻取值、设备地址、电路设计、I2C仲裁、Linux下配置等都还没细讲。
I2C(Inter-Integrated Circuit)字面上的意思是集成电路之间,它其实是I2C Bus简称,所以中文应该叫集成电路总线,它是一种串行通信总线(同步、半双工、非差分、低速率),使用多主从架构,由飞利浦(Philips)公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。I2C的正确读法为“I平方C”(“I-squared-C”),而“I二C”(“I-two-C”)则是另一种错误但被广泛使用的读法。自2006年11月1日起,使用I2C协议已经不需要支付专利费,但制造商仍然需要付费以获取I2C从属设备地址。
————————————————
对于串行通信啥的幸好之前已经有过一些了解,在学51单片机的时候。
(1)设计概述

I2C只使用两条双向漏极开路(Open Drain)(串行数据(SDA)及串行时钟频率(SCL))并利用电阻将电位上拉。I2C允许相当大的工作电压范围,但典型的电压准位为+3.3V或+5v。
I2C的参考设计使用一个7比特长度的地址空间但保留了16个地址,所以在一组总线最多可和112个节点通信[a]。常见的I2C总线依传输速率的不同而有不同的模式:标准模式(100 Kbit/s)、低速模式(10 Kbit/s),但时钟频率可被允许下降至零,这代表可以暂停通信。而新一代的I2C总线可以和更多的节点(支持10比特长度的地址空间)以更快的速率通信:快速模式(400 Kbit/s)、高速模式(3.4 Mbit/s)。
虽然最大的节点数目是被地址空间所限制住,但实际上也会被总线上的总电容所限制住,一般而言为400 pF。
————————————————
版权声明:本文为CSDN博主「聚优致成」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_29350001/article/details/78738305
AT24C02 介绍
对于具体的芯片,一般有以下几个部分:
1)芯片封装
更多详细的嵌入式开发知识可以参考链接:https://blog.csdn.net/qq_29350001/article/details/52237824
2)引脚
3)结构与设备寻址
AT24C02的存储容量为2K bit,内容分成32页,每页8Byte,共256Byte,操作时有两种寻址方式:芯片寻址和片内子地址寻址。
(1)芯片寻址:AT24C02的芯片地址为1010,其地址控制字格式为1010A2A1A0R/W。其中A2,A1,A0可编程地址选择位。A2,A1,A0引脚接高、低电平后得到确定的三位编码,与1010形成7位编码,即为该器件的地址码。R/W为芯片读写控制位,该位为0,表示芯片进行写操作。由于A2A1A0共有 8 种组合,系统最多可外接 8 片AT24C02。

(2)片内子地址寻址:芯片寻址可对内部256B中的任一个进行读/写操作,其寻址范围为00~FF,共256个寻址单位。


————————————————
Pin Description(引脚描述)Memory Organization(内存组织)
Device Address(设备地址)
1k 4k 8k 16k
每一k 对应的地址结构为1 0 1 0 A2 A1 A0 R/W,最高位为MSB,最低为为LSB
如果A0A1A2为000
写地址:10100000(0xA0)
读地址:1010001 (0xA1)
设备地址:01010000(0x50)
去掉R/W,最高位补0
写入操作分为字节写入操作和页写入操作
字节写入1操作有:
顺序:Start --MSB–Decivide ADDress —LSB
------Write ----R/W—ack ----WORD ADDRESS—MAB—LSB—ACK-----DATA----ACK—STOP
读操作
随机读取和连续读取
)I2C协议

时钟和数据传输:

SDA引脚通常通过外部设备拉高。SDA引脚上的数据只能在SCL低电平期间改变,SCL高电平期间的数据变化将指示开始或停止。
起始位和停止位:

开始条件:SCL为高电平的SDA从高电平变为低电平是一个开始条件,这必须在任何其他命令之前。
停止条件:SCL为高电平的SDA从低到高跳变是停止条件。在读取序列之后,停止命令将把EEPROM置于备用电源。
应答:

所有地址和数据字串行传输EEPROM中的8位字。 EEPROM发送一个低电平来确认它有收到每一个字。这发生在第九个时钟周期。
时间,这里的时间也就是写I2C程序时候的延时时间
SCL高电平期间,SDA的下降沿做为启动信号
4)总结

AT24C02、MT9P031、MPU6050这三个设备已经介绍完了。可以发现,阅读芯片手册I2C通信主要分为下面几部分。

1、引脚 (pin)

得出 SDA和SCL在哪个引脚上

2、设备地址 (address)

得出写地址和读地址是什么

3、片内子地址寻址定义或寄存器定义(word address)

得出片内寄存器地址是什么

4、I2C通信协议 (bus)

通信协议是一致的。起始位(Start)、停止位(Stop)、应答(Acknowledge),需要知道它们的条件,还有延时时间。

————————————————
版权声明:本文为CSDN博主「聚优致成」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_29350001/article/details/78738305
重点中的重点上拉电阻的选取
I2C(Inter-Intergrated Circuit)总线是微电子通信控制领域中常用的一种总线标准,具有接线少,控制方式简单,通信速率高等优点。 分为标准模式(100 kbit/s)、快速模式(400 kbit/s)、快速模式Plus(Fm+)(1 Mbit/s)、高速模式(3.4 Mbit/s)、超快速模式(5 Mbit/s)。

I2C总线的内部结构图如下图所示,I2C器件连接到总线输出级必须是集电极开路或漏极开路形式才能实现线“与”的逻辑功能。输出端未接上拉电阻的时候只能输出低电平,所示保证I2C总线正常工作输出端必须接上拉电阻。

在I2C电路中常见的上拉电阻是1K,1.5K,2.2K,3.3K,4.7K,5.1K,10K等等,但选哪一个阻值更合适?
————————————————
版权声明:本文为CSDN博主「聚优致成」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_29350001/article/details/78738305
上图中除了一对提升电阻Rp之外,还有每个I2C设备依现况的需要可选择加装一对抗干扰用的电阻Rs(尤其是当SDA,SCL的布线绕经特殊干扰源时)。
应用 I2C 时,最麻烦的是计算Rp的阻值,及为各个晶片选择合适的 Rs 阻值。例如:现今的智慧型手机,汇流排上少说就有:罗盘(地磁仪,多轴),陀螺仪(多轴),加速计(多轴),高度计,温度计,湿度计,环境光线…等等 I2C 晶片。
Rs 需要依照各个晶片实际受干扰的情况选择,但阻值一般会限制在 ≦Rp / 10(或约330欧姆)。因为一但Rs不为0,晶片真正的Rp(总)会变成是Rp + Rs,选择太大的Rs会使Rp(Total)Rp太多,影响该晶片的运作。 Rp一般为2K~7K Ohm,Rp数值小传输的波形会比较接近方波,但比较耗电; Rp数值大虽然比较省电,但传输的波形就会比较容易受电路上电容充放电的影响而变了样。不过因为Rp的数值会影响整个汇流排是否可以顺畅工作,一般会需要依据I2C的规范来计算而不是用试误法去猜。
下面列出了Rp的最大值和最小值公式 (依据NXP目前最新的I2C规范文件第55页)

Rp(max) = tr/(0.8473 x Cb)
Rp(min) = (Vdd-VOL(max))/IOL

那这两个公式是如何得到的呢?来看一下:
(1)公式推导
1》 Rp(max) = tr/(0.8473 x Cb)

总线电容是导线,连接和引脚的总电容。 由于指定的上升时间,这个电容限制Rp的最大值。下图显示了Rp(max)作为总线电容的函数。
————————————————
由于各种不同的技术设备(CMOS,NMOS,双极),可以连接到I2C总线,逻辑“0”(LOW)和“1”(HIGH)的电平不固定并取决于VDD的相关电平。输入参考电平设置为VDD的30%和70% VIL为 0.3VDD,VIH为 0.7VDD 一些传统器件的输入电平固定在VIL = 1.5 V和VIH = 3.0 V,但是所有新器件都需要这个30%/ 70%的规格。
————————————————
版权声明:本文为CSDN博主「聚优致成」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_29350001/article/details/78738305
I2C规范将低于VIL或0.3VDD的电压定义为逻辑低电平,同样将高于VIH或0.7VDD的电压定义为逻辑高电平。然后考虑在VDD 的相关的输入阈VIH = 0.7VDD 和 VIL = 0.3VDD 为目的RC时间常数计算的。

那么 V(t) = VDD (1 - e-t / RC) ,其中 t 是从充电开始的时间,RC 是时间常数。

V(t1) = 0.3 × VDD = VDD (1 - e-t1 / RC);  那么 t1 = 0.3566749 × RC
V(t2) = 0.7 × VDD = VDD (1 - e-t2 / RC);  那么 t2 = 1.2039729 × RC
T = t2 - t1 = 0.8473 × RC 

最后得出公式:Rp(max) = tr/(0.8473 x Cb)

其中最大Rp为标准模式、快速模式和快速模式Plus下的总线电容的函数。

对于每种模式,Rp(max)是下表中上升时间最大值(tr)和估算的总线电容(Cb)的函数:
————————————————
版权声明:本文为CSDN博主「聚优致成」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_29350001/article/details/78738305
注: (各种模式下的延时时间,你也需要搞清楚哦)

根据上表可以看出,由于不同模式下,上升沿的最大时间及总线负载最大容限要求不同,标准模式、快速模式、快速模式Plus分别是:1000ns/400pF、300ns/400pF、120ns/550pF。

将对应的数值代入式子中,我们很快就可以算出,采用快速模式的情况下:

Cb 为 50pF时 Rp(max) = 300/(0.8473 x 50) = 7.081K Ohm,

Cb 为 100pF时Rp(max) = 300/(0.8473 x 100) = 3.541K Ohm。
————————————————

由上面的计算可得出快速模式下,Vdd 为 5V时,上拉电阻 Rp 可以取的范围是 1.53K~7K ,一般取 5.1K 。
同理到 3.3V VDD 低功耗设计中,通常选用 4.7K 牺牲速度换取电池使用时间,此阻值也是常规阻值。

关于 I2C 的上拉电阻,最好的方式是看官方给出的参考设计,如果走线长了或总线上有多从机,就相应把电阻改小一些, 如若参考设计没有就在计算范围内选用一个常规阻值。实际的时候我们没有去测量总线电容的问题,只能在选件、走线的时候给予些许关注。

那么问题又来了,标准模式、快速模式等的传输速率是知道,但是该如何判断I2C设备是什么模式下传输的呢?或者说I2C的传输速率由什么决定?
五、I2C传输速率

IIC的传输速率由“时钟线上(SCL)的时钟频率”决定。具体用哪一个模式,需要你根据硬件手册进行设定。手册上面会有标明最高速率,只要不超过最好速率都可以。单片机一般常用400kbit/s或以下。
————————————————

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值