历史上的今天
今天是:2025年03月08日(星期六)
2021年03月08日 | STM32 IIC难点易错点
2021-03-08 来源:eefocus
先来点题外话~网上说STM32F103的IIC有瑕疵!就当是有些短板吧,个人觉得,用起来肯定没问题,只是不好用。因为ST公司考虑到专利问题,所以没按飞利浦的标准来。导致STM32的IIC使用起来非常繁杂。下面就讲讲用STM32 IO口模拟IIC的注意问题:
IIC总线时序:

进入正题→_→博主就因为没理解好应答,吃了亏。讲一讲IIC的几个重要状态:
1、空闲状态:当IIC总线空闲时,SDA和SCL两条线均为高电平,由于连接到总线上的器件必须是漏级和集电极开路(至于威为什么请读者自己搜索),只要有一个器件任意时刻输出低电平,都将使总线上的信号变低,即各器件的SDA和SCL是线与的关系。由于各器件输出端是漏级开路,故必须通过上拉电阻接正电源,以保证SDA和SCL在空闲时被拉为高电平。
2、起始信号S和终止信号P(注意起始和终止信号中的延时,严格按照数据手册来,快一点,慢一点都不行!):
起始信号S:在SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号,只有在起始信号以后,其他命令才有效。
终止信号P:在SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号,随着终止信号的出现,所有外部操作都结束。如图:

3、数据的传送:一句话:低电平变化,高电平稳定。
IIC总线在进行数据传送时,每一位数据位的传送都与时钟脉冲相对应。时钟脉冲为高电平期间,数据线上的数据必须保持稳定;只有在时钟线为低电平期间,数据线上的电平状态才允许变化。即:数据在SCL的上升沿来之前就需准备好,并在下降沿来之前必须稳定。如图:

4、(易错)应答信号ACK、非应答信号NACK、终止信号P:
应答信号ACK:该信号是由从器件产生的,IIC总线在传送一字节(8位)数据后都必须有应答信号A,下面是易错点:对于反馈有效应答位ACK的要求是,接收器在第九个时钟脉冲之前得低电平期间将SDA线拉低,并且确保在该时钟的高电平期间为稳定的低电平。表示其已经收到一个8位的数据了。如图:

非应答信号NACK:该信号是由主器件产生的。当主器件接收来自从机的数据时,接收到最后一个数据字节后,必须给从器件发送一个非应答信号,使从机释放数据总线,以便主机发送一个终止信号,从而结束数据的传送。
终止信号P:主机发送终止信号有两种情况:1、当数据传输完成后,主器件发送终止信号。2、由于某种原因,接收方不对主器件寻址信号应答时,例如接收方正在进行其他处理而无法接收总线上的数据时,必须释放总线,将数据线置为高电平,而由主器件产生一个终止信号以结束总线的数据传送。
从上文中可以看出:
1、无论何种数据传输格式(主发从收,主收从发,主机收发),寻址字节都由主器件发出,数据字节的传送方向则由寻址字节中的方向为来决定。
2、寻址字节只表明了从器件的地址及数据传送方向。从器件内部的n个数据地址,由器件设计者在该器件的IIC总线数据操作格式中,指定第1个数据字节作为器件内的单元地址指针,并且设置地址自动加减功能,以减少从器件的寻址操作。
3、每个字节传送都必须有应答信号相随。
4、从器件在接收到起始信号后都必须释放数据总线,使其处于高电平(最后一个图),以便主器件发送从机地址。
史海拾趣
|
本人从事安防行业5年,一路走来,一直在做监控摄像机这一块,发现自己组装生产摄像机,有以下几大优势,供大家参考: 第一:摄像机本身组装很简单,技术含量不高,不如自己动手,还学会了组装,与摄像机内部结构。 第二:自己组装生产摄像机,价格 ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 自2009年年底起,3D在国内成为了“时尚”的代名词,继3D电影《阿凡达》、《爱丽丝梦游仙境》在中国市场赚得盆满钵满,3D似乎也成为了报刊企业的又一掘金点。 2010年4月16日,湖北《十堰晚 ...… 查看全部问答> |
|
先祝各位达人元旦快乐! 我老板现在想开发CDMA的通信模块,就是网上很多卖的那种,可以通过串口或其他通用接口进行CDMA无线通信,但我查了很长时间仍然没有头绪……望各位达人指点一二: 用于开发CDMA模块一般都有什么芯片?我看网上大部分都是高 ...… 查看全部问答> |
|
Powerpc现在编译的文件系统是jff2格式,用串口线先传倒powerpc的RAM里,再复制进flash,但是现在文件系统似乎限制了大小,如果传3M左右就能正常启动,如果大于4M就不能正常启动,系统会不停重启。但是如果系统能正常启动后,用FTP上传文件,则没有 ...… 查看全部问答> |
|
之前用的是vxworks+Tornado开发方式,一切比较顺利!! 最近单位买了最新版的vxworks,开发环境是workbench,刚接触,本打算先做启动软盘尝试启动vxworks,可发现每次编译后,目标机出现v1.6++++++++++++++++++然后又重起,尝试了各种方法,都是这样,请各位 ...… 查看全部问答> |
|
S3C44B0X那块板子,能在线调试并且LCD显示正常,但是将程序烧录进去后,却发现LCD没有显示了。这是怎么回事呢?有哪位大虾遇到过同样的问题吗? 做LED实验却不管在线调试还是将程序烧录进去,都能得到正确的结果。… 查看全部问答> |




