历史上的今天
返回首页

历史上的今天

今天是:2025年04月02日(星期三)

正在发生

2019年04月02日 | 【STM32CUBEMX】 I2C Slave 实现

2019-04-02 来源:eefocus

背景

最近,在使用 STM32F030C8T6 做 I2C Slave 设备接口。在网上查了好多的资料,使用 STM32 硬件 I2C 的例程少之又少,对 STM32 硬件 I2C 的批判巨多,只能硬着头皮,自己一步一步摸索。 

实际上,在这次硬件 I2C 调试之前,其实我已经通过 IO 模拟的方式实现了 I2C,但速率仅能实现 Standard-mode(up to 100 kbit/s)。对于 Fast-mode(up to 400 kbit/s),IO 模拟方式简直是无能为力。同时,由于 IO 模拟 I2C 时并没有充分的考虑架构,最终的实现结果是功能单一,客户满意度不好。


I2C 实现方式

经过多次纠结和考虑,我决定采用Dummy Write + Register 方式进行 I2C 通讯。这样的好处,在于用户使用方便,对于后续的功能增加或需求变化,对客户接口完全无影响,只需要修改寄存器列表就 OK。这个也是参考了几个 I2C接口的芯片决定的。


Dummy Write

Dummy Write 要求 Master 访问 Slave 时,必须发送两次的从机地址。同时对于 STM32 HAL 的 Slave Receive 或 Write ,都必须指定长度,因此,在 第一次写操作中, Master 发送了 寄存器地址和写入数据的长度。时序图如下图所示。 


这里写图片描述


程序源码位于:https://github.com/CherryXiuHuaWoo/STM32F030C8-IIC-Slave 。


记录各种坑爹

第 1 次调试结果:总线挂了

第一次 Master Write 时,通讯完成。

第二次 Master Write 时,在 Address + Write 后, SDA 被置为 Low,导致总线被占用,无法再继续通讯。 


这里写图片描述
这里写图片描述 
这里写图片描述


第 2 次调试结果:基本调通了 Write/Read

通过在每次地址中断回调函数HAL_I2C_AddrCallback处理完成后,增加 HAL_I2C_EnableListen_IT(&hi2c1),不再出现第一次调试问题,可反复通讯。 


 这里写图片描述 


Bug 分析: 

通过查看调用HAL_I2C_AddrCallback(hi2c, transferdirection, slaveaddrcode) 的代码部分。 

发现,在I2C_ITAddrCplt 函数中,在调用 HAL_I2C_AddrCallback 回调函数前,有调用 I2C_Disable_IRQ(hi2c, I2C_XFER_LISTEN_IT)把中断关了!!!!!!之后也没有恢复中断,所以用户必须自行把中断打开!!!!!!


第 3 次调试:DUMMYWrite 后,总线挂了

这个总线挂了是我还没有编写DuMMYWrite后的处理代码所导致。 


这里写图片描述


第 4 次调试:DUMMYWrtie 读写正常

读时序: 


这里写图片描述


写时序: 


这里写图片描述

推荐阅读

史海拾趣

BLACK&DECKER公司的发展小趣事

随着公司的不断发展壮大,BLACK&DECKER开始进军国际市场。1993年,公司在中国成立了第一家工厂,这标志着BLACK&DECKER全球化战略的重要一步。此后,公司通过在全球范围内设立生产基地和销售网络,不断扩大品牌影响力。同时,BLACK&DECKER还通过收购其他知名品牌,如得伟(DeWalt)等,进一步巩固了其在电子行业中的领先地位。

Greenlee公司的发展小趣事

面对电子行业的多元化需求,GREEGOO公司选择了智能家居作为其主要发展方向。公司深入调研市场需求,精准定位目标客户群体,推出了一系列具有创新性和实用性的智能家居产品。通过不断优化产品设计和用户体验,GREEGOO在智能家居领域逐渐建立了良好的口碑和品牌形象。随着智能家居市场的不断扩大,GREEGOO的销售额和市场份额也实现了稳步增长。

amcc [applied micro circuits corp]公司的发展小趣事

在电子行业的激烈竞争中,GREEGOO公司凭借其在半导体材料领域的持续创新,成功研发出了一种新型高性能芯片封装材料。这种材料不仅大幅提升了芯片的散热性能和稳定性,还显著降低了生产成本。这一技术突破迅速吸引了业界的关注,多家知名电子产品制造商纷纷与GREEGOO建立合作关系,推动了公司业务的快速增长。GREEGOO因此在电子材料市场上崭露头角,成为行业内的佼佼者。

福斯特(FIRST)公司的发展小趣事
测量车辆在纵向(前后方向)和侧向(左右方向)上的加速度。这些数据对于监测车辆的加速、减速和侧向受力情况非常关键。
BELLING LEE公司的发展小趣事

为了进一步扩大市场份额,BELLING LEE公司开始实施国际化战略。公司首先在欧洲和北美市场设立了分支机构,并逐步拓展到亚洲、非洲等其他地区。在国际化过程中,公司不仅积极推广自己的产品和技术,还加强了与当地企业的合作与交流,从而实现了资源的优化配置和市场的互利共赢。

Axon' Cable公司的发展小趣事

为了进一步扩大市场份额和提升竞争力,Axon' Cable公司开始实施全球化战略。公司在全球范围内设立了多个生产基地和研发中心,积极开拓国际市场。同时,Axon' Cable还加强了与国际知名企业的合作,共同推动技术创新和产业升级。这些举措使得Axon' Cable的产品在全球范围内得到了广泛应用,公司的国际影响力也逐步提升。

问答坊 | AI 解惑

理解和应用数模转换器

数模转换器(DAC)是非常通用的器件,其能力远远超出电平设置的范畴,而且延伸到通信、视频、音频、电位计和替代可变电阻器、信号合成以及许多其它应用。    DAC的一些技术指标   DAC是最基本最重要的混合信号构建模块,其输出可以是单端 ...…

查看全部问答>

ZigBee遭遇基于IP的竞争对手

无线传感器网络标准ZigBee要有麻烦了。一家与无线传感器技术相竞争的公司最近推出了基于通用网络标准IP的产品。     基于IP:可与企业网相连     PhyNet就是这家名为Arch Rock的公司新推出的产品,同ZigBee一样,它也可 ...…

查看全部问答>

LED倒装技术是怎么回事啊?

replyreload += \',\' + 374033; 1、倒装(Flip chip)   1998年Lumileds公司封装出世界上第一个大功率LED(1W LUXOEN器件),使LED器件从以前的指示灯应用变成可以替代传统照明的新型固体光源,引发了人类历史上继白炽灯发明以来的又一场 ...…

查看全部问答>

私活报价,大家给点建议,合理就散分。

接了一私活,单片机软件编程,硬件由别人完成。  功能包括:uart通信,lcd显示,键盘操作,io输出。大家看看该报个什么价。…

查看全部问答>

在c#中如何显示大与1.5兆的图片

我用c#做了一个wince下的看图程序,每当打开一个大于1.5mb的图片时就出错,提示outofmemoryexception错误,而有些文章上介绍用SHloadImagefile但是为什么c# api中没有呢,大家有没有好的解决方法,如果c#中有那么他在那个动态库下呀,谢谢各位大哥 ...…

查看全部问答>

空pro没希望了,最简的呢??

所谓最简, 包括所有基本设置,基本文件------主要是包括maim() while1{}===========当然,在while1{}之前或者内部,添加程序,可以执行....哪位 有??…

查看全部问答>

给香香公主拜个晚年

                                 今后少不得要常来。今天先来认个路。…

查看全部问答>

STM32PWM问题

                                 请问版主 STM32 PWM要怎么配置才能实现6步换相? 用一个定时器 还是两个定时器实现…

查看全部问答>

FPGA电源管理问答

    现场可编程门阵列(FPGA)是可以包括数千个典型的、可编程逻辑单元。一个由线和可编程开关的矩阵与单独的逻辑单元互连。典型的设计包括指定每个单元的简单逻辑功能和选择性地关闭互连矩阵中的开关。 FPGA主要用于原型IC系统。当 ...…

查看全部问答>

msp430和usb系统采样速度问题

最近使一个msp430f149和国产的usb芯片ch372,之前以为会很麻烦,结果用了labview的visa,居然可以生成usb芯片的驱动,然后就可以利用usb协议的批量(bulk)管道直接上下传数据,官方提供的dll都不用了。想了解的可以联系我,这个我已经弄好了。 问 ...…

查看全部问答>