当前位置: 首页 > news >正文

完整教程:STM32硬件I2C主机接收字节

完整教程:STM32硬件I2C主机接收字节

主机接收时序

我们先按照江科大的主机接收的时序图流程走

主机接收的前面几个时序与主机发送一致

等待EV5事件I2C_EVENT_MASTER_MODE_SELECT(这个事件表示起始条件成功发送)

发送从机地址(写方向)

等待EV6事件:I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED(这个事件表示从机已应答,主机已进入发送器模式)

发送寄存器地址

等待EV8_2事件I2C_EVENT_MASTER_BYTE_TRANSMITTED(这个事件表示寄存器地址已成功发送,并从从机收到应答)

生成重复起始条件

生成重复起始条件之后,等待EV5事件

发送从机地址,方向为接收, 这里的读写位就是的方向

等待EV6事件,此时的EV6事件是主机接收的EV6,不是主机发送的EV6

接着大家进入到主机接收的模式之后,就开始接收从机发的数据了。我们只接收一个字节。

EV6_1事件。就是在序列图中,有个EV6事件,它的后面就

EV6_1并不是一个需要大家去“等待”的事件标志,它没有对应的独立事件标志位。它只是一个代码执行位置的描述,告诉我们”现在应该做某件事了”。

我们现在得注意的是,在EV6事件之后,因为我们是接收一个字节,所以需要清除响应停止条件

故而在代码的该时刻,我们需要把ACK置0,并且同时生成停止条件

依据主机接收的时序图,现在不应该是接收数据吗??

停止条件不是停止时序吗??既然还没有接收到数据,又为什么要生成停止条件呢??

但是规定就是,在接收终于一个字节之前,就要提前把ACK置0,并且同时生成停止条件

又因为我要接收一个字节,所以这个字节就是上述条件的最后一个字节

所以即便我们还没有接收数据,我们就需要提前把ACK置0,并且同时生成停止条件

为什么要这样设计呢??

大家看一下时序图,如果你不提前在数据还没收到之前给ACK置0,那么收到数据之后,应答位就已经发送出去了。现在我们再给ACK置0,那就只能在下一个内容之后给非应答位,这样就会多接收一个字节。因此在最后一个数据之前,就要给ACK置0。

同时也最好提前设置STOP终止条件,虽说是提前设置,不过这个终止条件不会截断当前字节。而是会等待当前字节接收完成之后,才产生终止条件。

因此,假设我们需要读取多个字节的数据,那么我们就等待EV7事件,读取DR就行了。

等到接收最终一个字节之前,即下图中的EV7_1事件。我们就像读取一个字节那样,

提前将ACK置0(即发送非应答位,表示我不再需要读取数据了),STOP位置1。

最后再return收到的数据就行了。

EV7_1事件与EV6_1事件

这个EV7_1事件和EV6_1事件相似。

EV6_1事件提醒我们如果只接收一个字节,那么该字节就是最后一个字节。

因此,必须在这个EV6_1事件的时间窗口内,提前告知从机“我不会应答,并且之后要停止”。

EV7_1事件提醒我们如果接收多个字节(N个字节),那么末了一个字节就是N字节。

在接收完第N-1个字节后,会产生EV7事件,读取后,大家就进入了EV7_1时刻。

此时必须在这个EV7_1事件的时间窗口内,提前告知从机“我不会应答,并且之后要停止”。

总结:

对于单字节读取在就是,设置NACK和STOP“EV6_1”事件所描述的时间窗内完成的。

对于多字节读取的最后一个字节,配备NACK和STOP是在“EV7_1”事件所描述的时间窗内 完成的。

这是我的部分见解,有什么问题欢迎指正,大家共同进步!

http://www.jsqmd.com/news/354468/

相关文章:

  • u-blox 新品!推出MAYA-W381/MAYA-W383/MAYA-W386-00B 以及 NINA-B501/NINA-B506-10B NINA-W152-01B
  • PHP如何实现500M以上大文件上传的解决方案?
  • Qt 6.10.1 安卓生成安装包
  • web页面如何通过PHP实现超大文件(500M+)上传?
  • 农业大数据平台如何优化UEDITOR的WORD表格粘贴?
  • 2026年评价高的手动加热压片机/防护压片机实力厂家 - 品牌宣传支持者
  • 技术拆解与选型避坑:2026年五大企业级BI平台深度横评报告
  • 政府网站如何通过UEDITOR实现PDF文档的在线批注?
  • 2026年质量好的嘉兴生鲜商超设备/制冷保温商超设备热门品牌厂家推荐 - 品牌宣传支持者
  • 医疗系统如何通过富文本编辑器实现DICOM图像转存?
  • 这次终于选对!风靡全网的AI论文工具 —— 千笔ai写作
  • 余华《活着》深度解读:在苦难废墟上,生命自有其庄严
  • 分析实力强的斜纹滚花辊供应商,忠平机械性价比高吗? - mypinpai
  • 原生Android程序如何实现多线程编程?
  • 基于深度学习YOLOv10的足球运动员检测系统(YOLOv10+YOLO数据集+UI界面+Python项目源码+模型)
  • 2026年口碑好的文丘里变风量阀/实验室变风量阀厂家推荐及选购指南 - 品牌宣传支持者
  • 用过才敢说!深得人心的降AIGC平台 —— 千笔·专业降AI率智能体
  • 聊聊售后完善的婚礼宴会厅,哪家性价比高值得关注 - 工业品网
  • 交易所源码开发:单语言VS多语言,到底该怎么选?
  • 2026年质量好的小型尿素包衣设备/硫包衣尿素包衣设备厂家推荐及选择参考 - 品牌宣传支持者
  • 2026年知名的全自动快速量热仪/氧弹式量热仪厂家选购参考汇总 - 品牌宣传支持者
  • 一次全文降AI省下两天时间:我的真实经历分享 - 我要发一区
  • 全国劳动争议律师推荐,北京敦行所孙征律师靠谱吗费用多少? - 工业品牌热点
  • 科研党收藏!降AIGC工具 千笔·降AI率助手 VS Checkjie,本科生专属高效选择
  • 2026年知名的复合肥设备生产线/滚筒筛复合肥设备厂家推荐及选择参考 - 品牌宣传支持者
  • 2026年不锈钢接地端子多少钱,四川靠谱厂家大盘点 - myqiye
  • 2026年口碑好的消除死区搅拌器/顶入式搅拌器厂家推荐及采购指南 - 品牌宣传支持者
  • 2026年佛山值得选的GEO服务品牌,新纪元智能网络解决方案揭秘 - 工业推荐榜
  • 2026年口碑好的煤炭化验设备检测/煤炭化验设备自动化厂家最新推荐 - 品牌宣传支持者
  • 2026年北大通史班服务,探讨哪家合适口碑好 - 工业品网