【STM32】IIC使用中DMA传输时 发送数据总少一个的问题

问题描述

在使用STM32 I2C数据发送过程中,发现每轮实际发送出去的数据总比在DMA配置中设定的传输数据个数要少一个。比方说:DMA配置里设定的传输数据个数是10个,结果发现在总线上只能发出9个,经过进一步发现是少了最后一个数据。当对I2C接收到的数据进行DMA传输时,没有异常。

关于I2C的DMA传输,STM32技术参考手册部分有这么一段话:

意思是说当DMA产生EOT标志后,(如果开启了EOT相关中断就进中断程序,没有开启就进行软件查询做后续处理)关闭DMA请求,然后等待BTF事件,之后执行STOP操作。

这里的BTF事件就是I2C数据收发过程中的数据字节是否传输完成的的事件。SR寄存器中的一个位

查看关于I2C发送代码,发现他在检测到DMA产生EOT标志后,他首先就是做的STOP操作,然后关闭相关DMA请求。代码里没有检测BTF标志的过程。

这样做就会导致个问题。在最后一次DMA数据传输完成后,数据刚放进I2C的DR寄存器,还没来得及把这个新数据通过I2C发送出去,因为用户程序立即做了STOP操作,最后那个数据无法传输。

相关推荐
GilgameshJSS7 分钟前
STM32H743-ARM例程36-DNS
c语言·arm开发·stm32·单片机·嵌入式硬件
工具人555544 分钟前
电脑插入USB一个端口都识别不出来
单片机·嵌入式硬件·电脑
KOAN凯擎小妹1 小时前
晶振信号质量:上升下降时间与占空比
单片机·嵌入式硬件·fpga开发·信息与通信
小莞尔3 小时前
【51单片机】【protues仿真】基于51单片机简易电子琴系统(8键)
c语言·单片机·嵌入式硬件·物联网·51单片机
平凡灵感码头5 小时前
STM32 串口中断接收原理与实战详解:从配置到中断服务函数全流程解析
单片机·嵌入式硬件
切糕师学AI6 小时前
MCU中的RC电路(Resistor-Capacitor Circuit)
单片机·嵌入式硬件
Jie_jiejiayou10 小时前
STM32F10xxx启动模式配置与ISP一键下载
stm32·isp·烧录模式
GilgameshJSS13 小时前
STM32H743-ARM例程33-TOUCH
c语言·arm开发·stm32·单片机·嵌入式硬件
我先去打把游戏先19 小时前
ESP32开发指南(基于IDF):连接AWS,乐鑫官方esp-aws-iot-master例程实验、跑通
开发语言·笔记·单片机·物联网·学习·云计算·aws
hazy1k20 小时前
51单片机基础-继电器实验
stm32·单片机·嵌入式硬件·51单片机·1024程序员节