STM32 I2C介绍和软件模拟I2C编程要点
I2C协议层独特特征:
1. 通过地址(Master/Slave Address)区分不同的设备。
2. ACK信号体制,即通过ACK表示是否进行继续传输。
3.由SCL、SDA的四种关系,映射数据有效性、起始信号、结束信号。
STM的硬件I2C编程要点:
1. 通过初始化I2C结构体,配置硬件I2C。
2.有特有的发送起始信号、结束信号,使能 ACK信号的相关库函数命令。不需要手动模拟GPIO,由硬件按协议层要求发送。
3. 有特有的事件检测(EV)库函数和宏定义。通过检测各种事件,达到数据传输的可靠性。
STM32 软件模拟I2C编程要点
1. 配置GPIO的时候,模式要选择开漏输出(GPIO_Mode_Out_OD):(STM32硬件编程I2C时,为复用开漏输出GPIO_Mode_AF_OD)

2. 编写I2C协议层函数时,特别注意接收数据函数的左移次数:
//I2C协议规定:发送数据以一个字节(8bit)为单位,不能多也不能少。
//接收时,一位一位传输,优先接收高位(MSB)
//当SCL为0时,SDA数据可变化(此时数据无效),SCL为1时,SDA数据有效
uint8_t i2c_ReadByte(void)
{ uint8_t dat = 0;
uint8_t i;
for(i=0; i<8; i++)
{
dat <<= 1;//循环总共进行8次,但有效的左移(采集数据位后)应该为7次,此语句不能放在接收收据之后
SCL_1;
i2c_Delay();
if(EEPROM_I2C_SDA_READ() == 0)
{
dat &= ~(1<<0);
}else
{
dat |= (1<<0);
}//dat <<= 1;不能放在这里
SCL_0;
i2c_Delay(); }
return dat; }
STM32 I2C介绍和软件模拟I2C编程要点的更多相关文章
- 软件模拟I2C通讯
I2C协议概述,有相当详细的名词解释: 通信数量受限于地址空间和400Pf总线电容. 所有的数据传输过程中,SDA线的电平变化必须在SCL为低电平时进行,SDA线的电平在SCL线为高电平时要保持稳定. ...
- GPIO软件模拟I2C
/***************************************************************************** * * Filename: * ----- ...
- 软件模拟I2C时输入与输出切换
一 为达到类似C51的操作需要添加以下位带操作:#include "stm32f10x_gpio.h"#include "stm32f10x_conf.h" / ...
- I2C总线以及GPIO模拟I2C
·I2C总线的一些特征: 1. 只要求两条总线,一条串行数据线(SDA),一条串行时钟线(SCL) 2. 两个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机系统软件设定的地址:主机可 ...
- 51单片机 | 基于I2C总线的秒表模拟应用
———————————————————————————————————————————— 参考地址: http://blog.csdn.net/junyeer/article/details/4648 ...
- STM32F10x_模拟I2C读写EEPROM
Ⅰ.写在前面 说到IIC,大家都应该不会陌生,我们初学单片机的时候或多或少都知道或了解过,甚至使用I2C控制过器件.但是,有多少人真正去深入理解,或者深入研究过I2C通信协议呢? 1.我们有必要学习I ...
- STM32F10x_SPI(硬件接口 + 软件模拟)读写Flash(25Q16)
推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来! http://www.captainbed.net/strongerhuang Ⅰ.写在前 ...
- I2C总线协议的软件模拟实现方法
I2C总线协议的软件模拟实现方法 在上一篇博客中已经讲过I2C总线通信协议,本文讲述I2C总线协议的软件模拟实现方法. 1. 简述 所谓的I2C总线协议的软件模拟实现方法,就是用软件控制GPIO的输入 ...
- I2C软件模拟协议与电容触摸控制
I2C 与 Touch slide 最近做了一个与触摸滑条相关的测试,利用I2C通讯协议来配置触摸控制芯片的相关寄存器,读取触摸读数,并通过STM Studio动态显示触摸读数的变化过程.这个测试相对 ...
- stm32软件模拟IIC读取PX4FLOW光流传感器数据
这段时间在做全国光电设计大赛,用到了px4的px4flow光流传感器,用软件模拟iic读取数据不定期会导致px4flow死机,查了资料和光流的源码,发现这个光流用了stm32的硬件iic,所以对软件模 ...
随机推荐
- texlive编译lshort-zh-cn
项目 lshort-zh-cn是一篇latex的中文文档,本身也是latex编写的. 项目地址:https://github.com/ctex-org/lshort-zh-cn 编译 texlive打 ...
- [ 赛后总结 ] CSP-J 2022
前言 今年没考好,估分 100+60+0+10=170pts ,大概能混个2=,没什么用. 这下好了,期中也砸了,已经排到全校 30 开外了,果然鱼和熊掌不可兼得,况且我双双落空,接下来怕是想搞也搞不 ...
- [OpenCV实战]41 嵌入式计算机视觉设备选择
文章目录 1 简介 1.1 深度学习与传统计算机视觉 1.2 性能考量 1.3 社区支持 2 结论 3 参考 在计算机视觉领域中,不同的场景不同的应用程序需要不同的解决方案.在本文中,我们将快速回顾可 ...
- Python自动化结算工资和统计报表|编程一对一教学微信:Jiabcdefh
实例需求说明 你好,我是悦创. 博客首发:https://bornforthis.cn/column/pyauto/auto_base07.html 学习了 Excel 文件的写入.读取和追加内容,那 ...
- Mybatis用List接收返回值
Mybatis 用 List 接收返回值 以 List<Map<String, Object>> 为例 1.XML内 resultType 为单条记录对应类型,设置成 java ...
- Java基础篇——集合框架
集合--对象的容器 集合与数组相似,不同的是,集合的长度可变并且只能组合引用类型数据,如果要组合基本类型,则需要装箱成包装类 Collection体系集合 Collection父接口 Collecti ...
- 使用 Link Cut Tree 维护最小生成树
简介 本文将简单介绍如何使用 Link Cut Tree 维护动态图最小生成树. 思路 最小生成树的性质:一个基环树的最小生成树,为将环上边权最大的边删除后所组成的树. Proof:如果删除环上的其他 ...
- python读取kafka,输出到Vertica数据库
# 主测试 # https://docs.python.org/2/library/json.html import sys import json import vertica_python imp ...
- JavaScript 中 this 关键字的作用和如何改变其上下文
一.this 关键字的作用 JavaScript 中的 this 关键字引用了所在函数正在被调用时的对象.在不同的上下文中,this 的指向会发生变化. 在全局上下文中,this 指向全局对象(在浏览 ...
- C#高性能数组拷贝实验
前言 昨天 wc(Wyu_Cnk) 提了个问题 C# 里多维数组拷贝有没有什么比较优雅的写法? 这不是问对人了吗?正好我最近在搞图像处理,要和内存打交道,我一下就想到了在C#里面直接像C/C++一样做 ...