这里是讲的模拟IIC,不是采用硬件IIC。为啥用软件模拟IIC而不用硬件IIC? 除了ST的IIC模块本身问题,还因为硬件IIC移植不方便,在不同的MCU中无法通用;而且有的项目需要在IIC主从模式切换。

网上的资料大部分都是模拟IIC主模式的,很少有资料告诉我怎么实现模拟IIC从模式。

因为特殊要求,我们在做汽车电容屏升级的时候,要扔掉原车屏的一个部件,即IIC从机部分,只保留IIC主芯片,并采用STM32替代被扔掉的IIC从机功能,而且在不同应用内容下,需要切换IIC的主从工作模式。

要实现IIC从机功能,最核心的部分就是如何精确的抓住IIC_SCL,也就是IIC主机发出来的时钟信号。只有抓住精确的时钟SCL,才能正确的读取到SDA的数据,才能真正模拟出IIC时序。

但是要抓住SCL信号可不容易,IIC最高速度有400K,最小有效脉宽达到1.4us(数字0/1),最小脉冲是0.8us(应答和STOP信号产生的尖刺),采用中断来识别SCL是不可能的做到的,因为即使在最高主频72MHZ情况下,STM32最小指令周期是1/72(us),从SCL中断发生到STM32进入中断响应,至少要要40个指令周期,也就是40/72(us),加上堆栈操作及变量,很可能已经错过了SCL信号。

图1.高速模式下IIC波形

图2 应答和STOP信号产生的尖刺

所以只能采用查询方式来识别SCL,而到目前为止,我还没有看到哪篇文章是采用查询SCL的方式来模拟IIC从模式。

所以很多文章说模拟IIC从模式的内容都是假的,要么骗人要么就是从来没有实践过。

写这篇文章,就是想提醒很多跟我一样的人,不要老是拷贝别人的程序,以为改改就行了的,这样的想法肯定是会吃苦头的;

越是简单的事情,越是要多花时间来理顺,因为这是大厦的基石;

这是花了好多时间走了很多弯路,很愤怒差点被带沟里的博主,写于20160711。

STM32-IIC模拟从模式相关推荐

  1. STM32 软件模拟IIC

    0.系列目录 STM32 软件模拟IIC STM32 使用DMP库处理MPU6050数据 STM32 MPU6050与匿名上位机通讯(V2.6版) 1.IIC通讯过程 SCL和SDA在空闲时候均为高电 ...

  2. 45 STM32 IIC主机、从机通信实例(ma51t12b触摸按键芯片)

    45.1引言 最近在研究触摸按键板的通信,按键板主要用到的通信协议为IIC,事实上IIC的例子有很多,但大都都是模拟IIC的主机(引用某网友的评论),从机这边的内容还是比较少. 早在两三年前就跟着原子 ...

  3. 【STM32笔记】低功耗模式配置及避坑汇总

    [STM32笔记]低功耗模式配置及配置汇总 文章总结:(后续更新以相关文章为准) [STM32笔记]低功耗模式.WFI命令等进入不了休眠的可能原因(系统定时器SysTick一直产生中断) [STM32 ...

  4. STM32寄存器操作端口模式CRL/CRH详解

    STM32寄存器操作端口模式CRL/CRH详解 首先,在开始讲解前,大家请先看如下一段代码: #define SDA_IN_24c02(){GPIOB->CRH&=0XFFF0FFFF; ...

  5. STM32 IIC协议 读写EEPROM

    EEPROM.MCU6050和OLED显示屏外设都是通过IIC协议[半双工]进行通信. 除此之外,另一个广泛地使用在系统内多个集成电路间的通讯协议:SPI. 目录 一.IIC物理层: 二.IIC协议层 ...

  6. 基于STM32 GPIO模拟8080时序操作ILI9341-学习笔记12

    1.我本人使用是野火STM32指南者开发板. 2.LCD为ILI9341,3.2英寸屏幕,分辨率320*240. 3.了解8080时序通信原理,及学会使用LCD液晶屏. 4.本次实验可能是由于硬件原因 ...

  7. 大小端模式,stm32采用小端模式

    存储模式: 小端:较高的有效字节存储在较高的存储器地址,较低的有效字节存储在较低的存储器地址. 大端:较高的有效字节存储在较低的存储器地址,较低的有效字节存储在较高的存储器地址. STM32 属于小端 ...

  8. STM32的同步规则模式使用

    由于要采集电压.电流以计算功率.阻抗等信息,STM32的同步规则模式很适合于这种情景.使用时有几点需要注意的: 1.选择正确的模式:ADC_Mode_RegSimult,即DUALMOD[3:0] = ...

  9. STM32三种启动模式 boot0 boot1

    STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存=芯片内置的Flash. 2)SRAM=芯片内置的RAM区,就是内存啦. 3)系统存储器=芯片内部一块特定的区域,芯片出厂时在 ...

  10. STM32——浅谈睡眠模式、停机模式、待机模式

    若要理解低功耗,则先要说一下STM32的事件和中断 事件是中断的触发源,开放了对应的中断屏蔽位,则事件可以触发相应的中断.在STM32中,中断与事件不是等价的,一个中断肯定对应一个事件,但一个事件不一 ...

最新文章

  1. 一鼓作气一年拿下信息系统项目管理师和软考中级系统集成
  2. 本地搭建K8s环境,并配置Ingress代理(1)
  3. css flexbox模型_Flexbox教程:了解如何使用CSS Flexbox编写响应式导航栏
  4. LeetCode 413. 等差数列划分(DP)
  5. 容器编排技术 -- Kubernetes kubectl create secret tls 命令详解
  6. xdu1068暨2013陕西省赛C题题解
  7. Android TextView文字横向自动滚动(跑马灯)
  8. 【AC军团周报(第一周)第一篇】线段树从入门到入土【1】
  9. 正则匹配字符串有则替换无则添加;用正则实现添加和替换字符串,原字符串中包含某字段就替换(覆盖),不包含某字段就添加!
  10. [转载] 使用神经网络和ml模型预测客户流失
  11. Common plugins
  12. Atitit.如何避免公司破产倒闭的业务魔咒
  13. RHCSA-Day1 --- Linux介绍及环境搭建
  14. AD硬件电路学习笔记(一)常见的管脚名字以及FPGA、Lora等常见的物联网组网
  15. 团购网站大缩水:5058家团购网站 只剩176家
  16. DBT乳腺切片投影及重建(MATLAB版)
  17. 排名第一的word模板引擎,到底有多神仙
  18. 程序员的希波克拉底誓言
  19. 「杂谈」什么是我心目中深度学习算法工程师的标准
  20. 二维平面最短距离(分治)

热门文章

  1. Satellite卫星遥感图像中小物体的分割识别
  2. 一文弄懂责任链设计模式
  3. 怎么申报高新?流程是什么??
  4. 使用VB.Net操作Excel输出重复内容的表格
  5. python中小数点后取2位(四舍五入)以及取2位(四舍五不入)的方法总结
  6. nixyx —— 一个小巧的项目工程/编译文件生成器(构建系统?)
  7. 蓝桥杯物联网STM32 学习记录3——HAL库GPIO函数
  8. mysql中sql_mode的那些问题
  9. shopee数据分析:虾皮卖家如何正确分析shopee卖场数据?
  10. 面试java想要高工资的看这里