STM32-IIC模拟从模式
这里是讲的模拟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模拟从模式相关推荐
- STM32 软件模拟IIC
0.系列目录 STM32 软件模拟IIC STM32 使用DMP库处理MPU6050数据 STM32 MPU6050与匿名上位机通讯(V2.6版) 1.IIC通讯过程 SCL和SDA在空闲时候均为高电 ...
- 45 STM32 IIC主机、从机通信实例(ma51t12b触摸按键芯片)
45.1引言 最近在研究触摸按键板的通信,按键板主要用到的通信协议为IIC,事实上IIC的例子有很多,但大都都是模拟IIC的主机(引用某网友的评论),从机这边的内容还是比较少. 早在两三年前就跟着原子 ...
- 【STM32笔记】低功耗模式配置及避坑汇总
[STM32笔记]低功耗模式配置及配置汇总 文章总结:(后续更新以相关文章为准) [STM32笔记]低功耗模式.WFI命令等进入不了休眠的可能原因(系统定时器SysTick一直产生中断) [STM32 ...
- STM32寄存器操作端口模式CRL/CRH详解
STM32寄存器操作端口模式CRL/CRH详解 首先,在开始讲解前,大家请先看如下一段代码: #define SDA_IN_24c02(){GPIOB->CRH&=0XFFF0FFFF; ...
- STM32 IIC协议 读写EEPROM
EEPROM.MCU6050和OLED显示屏外设都是通过IIC协议[半双工]进行通信. 除此之外,另一个广泛地使用在系统内多个集成电路间的通讯协议:SPI. 目录 一.IIC物理层: 二.IIC协议层 ...
- 基于STM32 GPIO模拟8080时序操作ILI9341-学习笔记12
1.我本人使用是野火STM32指南者开发板. 2.LCD为ILI9341,3.2英寸屏幕,分辨率320*240. 3.了解8080时序通信原理,及学会使用LCD液晶屏. 4.本次实验可能是由于硬件原因 ...
- 大小端模式,stm32采用小端模式
存储模式: 小端:较高的有效字节存储在较高的存储器地址,较低的有效字节存储在较低的存储器地址. 大端:较高的有效字节存储在较低的存储器地址,较低的有效字节存储在较高的存储器地址. STM32 属于小端 ...
- STM32的同步规则模式使用
由于要采集电压.电流以计算功率.阻抗等信息,STM32的同步规则模式很适合于这种情景.使用时有几点需要注意的: 1.选择正确的模式:ADC_Mode_RegSimult,即DUALMOD[3:0] = ...
- STM32三种启动模式 boot0 boot1
STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存=芯片内置的Flash. 2)SRAM=芯片内置的RAM区,就是内存啦. 3)系统存储器=芯片内部一块特定的区域,芯片出厂时在 ...
- STM32——浅谈睡眠模式、停机模式、待机模式
若要理解低功耗,则先要说一下STM32的事件和中断 事件是中断的触发源,开放了对应的中断屏蔽位,则事件可以触发相应的中断.在STM32中,中断与事件不是等价的,一个中断肯定对应一个事件,但一个事件不一 ...
最新文章
- 一鼓作气一年拿下信息系统项目管理师和软考中级系统集成
- 本地搭建K8s环境,并配置Ingress代理(1)
- css flexbox模型_Flexbox教程:了解如何使用CSS Flexbox编写响应式导航栏
- LeetCode 413. 等差数列划分(DP)
- 容器编排技术 -- Kubernetes kubectl create secret tls 命令详解
- xdu1068暨2013陕西省赛C题题解
- Android TextView文字横向自动滚动(跑马灯)
- 【AC军团周报(第一周)第一篇】线段树从入门到入土【1】
- 正则匹配字符串有则替换无则添加;用正则实现添加和替换字符串,原字符串中包含某字段就替换(覆盖),不包含某字段就添加!
- [转载] 使用神经网络和ml模型预测客户流失
- Common plugins
- Atitit.如何避免公司破产倒闭的业务魔咒
- RHCSA-Day1 --- Linux介绍及环境搭建
- AD硬件电路学习笔记(一)常见的管脚名字以及FPGA、Lora等常见的物联网组网
- 团购网站大缩水:5058家团购网站 只剩176家
- DBT乳腺切片投影及重建(MATLAB版)
- 排名第一的word模板引擎,到底有多神仙
- 程序员的希波克拉底誓言
- 「杂谈」什么是我心目中深度学习算法工程师的标准
- 二维平面最短距离(分治)