基于STM32系列MCU使用软件模拟I2C步骤

EDN电子技术设计 2017-10-26 10:39 次阅读

一、Bit Bang

关于 Bit Bang 的解释:Use software to control serial communication at general-purpose I/O pins,简单来讲就是使用软件通过 IO 脚去实现 I2C 的时序从而使用 I2C 协议进行通信。

这样做的好处是可以突破硬件上的限制,例如芯片不具有硬件 I2C 模块,或者硬件 I2C 模块损坏,又或者使用硬件 I2C 模块时布线非常麻烦。坏处是需要写代码模拟时序,根据不同的硬件平台和不同的时钟频率,代码中的部分参数是不一样的。

二、代码分析

以下代码基于 STM32 系列 MCU

使用软件模拟 I2C 的步骤如下:

1、设置 GPIO 管脚

设置两个管脚作为 SCL 和 SDA,例如 GPIOA1 和 GPIOA2

2、SCL时钟周期

3、附加设置

这里主要是使用宏定义模拟函数

4、I2C 启动

5、I2C停止

6、发送 8 位数据,返回值为从响应 ACK 标志

7、接收 8 位数据

三、操作实例

以下代码为通过调用上面的基本代码来实现 I2C 通信

1、设置 DAC 寄存器的值

三个参数分比为从机地址,寄存器地址,8 位数据

2、读取 DAC 寄存器的值

两个参数分别为从机地址,寄存器地址,返回数据为 16 位。这是由于某些器件的硬件设计,采用 7 位表示寄存器地址,而每个寄存器包含 9 位数据。更常见的方式为 8 位寄存器地址,一个寄存器 8 位数据,这种方式的代码仅返回 8 位数据,见代码 2。

代码 1,返回 16 位数据,不常见

代码 2,返回 8 位数据

EDN电子技术设计 技术专区

原文标题:学会这个技术,再也不怕芯片不具有硬件I2C模块了!

文章出处:【微信号:edn-china,微信公众号:EDN电子技术设计】欢迎添加关注!文章转载请注明出处。

关注电子发烧友微信

有趣有料的资讯及技术干货

下载发烧友APP

打造属于您的人脉电子圈

关注发烧友课堂

锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

STM32调试SP3485技术总结

本文主要对STM32调试SP3485技术总结。使用的STM32芯片是STM32F103RB,使用的资....

发表于 01-17 15:56 次阅读 0条评论
STM32调试SP3485技术总结

STM32的调试方式、更新程序、仿真以及补救措施

STM32支持JTAG和SWD两种调试方式,且默认状态下这两种调试功能都是开启的。

的头像 贸泽电子设计圈 发表于 01-17 14:55 次阅读 0条评论
STM32的调试方式、更新程序、仿真以及补救措施

用stm32控制4位数码管_stm32控制共阴数码管

本文主要介绍了stm32控制4位共阳数码管输出计数程序设计和stm32控制共阴数码管程序设计。首先我....

发表于 01-16 17:07 次阅读 0条评论
用stm32控制4位数码管_stm32控制共阴数码管

对STM32基本知识的详细剖析

STM32是一种功能比较强大的32位单片机,广泛应用于各种嵌入式设备中,由于它的普及性及丰富的资源,....

的头像 21ic电子网 发表于 01-16 14:29 次阅读 0条评论
对STM32基本知识的详细剖析

max7219驱动数码管程序(51单片机+STM32 MAX7219数码管程序案例)

本文主要介绍了max7219驱动数码管:STM32硬件SPImax7219驱动8位数码管显示模块程序....

发表于 01-15 16:51 次阅读 0条评论
max7219驱动数码管程序(51单片机+STM32 MAX7219数码管程序案例)

详细解析STM32中的堆栈机制

这下明白了吧,STM32在启动的时候,RAM首先分配给使用到的全局变量,还有调用库占用的一些数据(不....

的头像 贸泽电子设计圈 发表于 01-15 15:03 次阅读 0条评论
详细解析STM32中的堆栈机制

分享STM32定时器输出比较模式的理解

初学STM32,我这个地方卡了很久,现在终于有些明白了,现在把我的理解写下与大家共享,如果有不对的地....

的头像 玩转单片机 发表于 01-15 08:49 次阅读 0条评论
分享STM32定时器输出比较模式的理解

stm32看门狗复位技巧编辑

本文主要介绍了stm32看门狗复位技巧,包括三个方面:判断是否需要使用、保证看门狗工作正常、保证看门....

发表于 01-14 15:51 次阅读 0条评论
stm32看门狗复位技巧编辑

LED光源实现植物生长动态补光控制的几大要点

在番茄的各个生长期,弱光环境都会对番茄的生长造成很大影响,所以需要对番茄的各个生长期进行补光,至于怎....

的头像 电子设计 发表于 01-13 07:25 次阅读 0条评论
LED光源实现植物生长动态补光控制的几大要点

STM32+MS5611测气压温度例程详解

MS5611气压传感器是集合SPI和I²C(高达20 MHz)总线接口的高分辨率气压传感器,分辨率可....

发表于 01-12 15:31 次阅读 0条评论
STM32+MS5611测气压温度例程详解

STM32通过I2C与BMP280通信

BMP280对温度和气压的测量是通过一堆补偿数据然后根据自己的算法算出来的,要注意这些数据是什么类型....

发表于 01-12 13:14 次阅读 0条评论
STM32通过I2C与BMP280通信

基于stm32的GPIO寄存器学习解析

GPIO即通用输入/输出 (General Purpose Input Output) 包括:....

的头像 MCU开发加油站 发表于 01-11 09:03 次阅读 0条评论
基于stm32的GPIO寄存器学习解析

STM32中断优先级谁更高 主要根据两个方面来判断

STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称....

发表于 01-10 14:12 次阅读 0条评论
STM32中断优先级谁更高 主要根据两个方面来判断

STM32 系列MCU 不同型号的移植步骤解析

STM32 系列MCU 不同型号的移植!

的头像 张飞实战电子 发表于 01-10 10:45 次阅读 0条评论
STM32 系列MCU 不同型号的移植步骤解析

多合一烧写几种接口及编程模式

如今ST推出了新的高集成度的编程工具软件STM32CubeProgrammer,以后就不用这么麻烦了....

的头像 STM32单片机 发表于 01-10 09:23 次阅读 0条评论
多合一烧写几种接口及编程模式

基于STM平台中五大嵌入式操作系统

基于STM平台且满足实时控制要求操作系统,有以下5种可供移植选择。分别为μClinux、μC/OS-....

的头像 单片机爱好者 发表于 01-10 09:17 次阅读 0条评论
基于STM平台中五大嵌入式操作系统

意法半导体推最新软体工具让烧录STM32程式更方便

据报道,意法半导体推处理一款最新软体工具,可以支持多平台可配置环境让烧录STM32程式更方便,还可以....

发表于 01-08 13:20 次阅读 0条评论
意法半导体推最新软体工具让烧录STM32程式更方便

NUCLEO-F767ZI开发板评测

本文主要介绍了NUCLEO-F767ZI开发板评测,NUCLEO-F767ZI是意法半导体ST公司推....

发表于 01-05 17:16 次阅读 0条评论
NUCLEO-F767ZI开发板评测

STM32单片机的串口波特率计算方法

不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率:波特率就是每秒传....

的头像 贸泽电子设计圈 发表于 01-05 09:59 次阅读 0条评论
STM32单片机的串口波特率计算方法

基于STM32自码DS18B20驱动程序

根据DS18B20的通信协议,DS18B20只能作为从机,而单片机系统作为主机,单片机控制DS18B....

发表于 01-05 09:03 次阅读 0条评论
基于STM32自码DS18B20驱动程序