【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操作,最后那个数据无法传输。

相关推荐
ACP广源盛139246256731 小时前
GSV6155@ACP# 搭配 AI 服务器、AI PC 完整适配方案
大数据·服务器·人工智能·分布式·单片机·嵌入式硬件
辰哥单片机设计3 小时前
STM32音乐播放器
stm32·单片机·嵌入式硬件
周洲08304 小时前
STM32 串口指令控制系统|上位机下发命令控制 LED、继电器,通用指令解析框架
stm32·嵌入式硬件·mongodb
集芯微电科技有限公司4 小时前
PC3100H 专为TFT-LCD面板偏置电源设计双输出100m电流
人工智能·单片机·嵌入式硬件·神经网络·生成对抗网络
广州灵眸科技有限公司5 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) 系统操作-线进程操作
数据库·单片机·嵌入式硬件·算法·php
集芯微电科技有限公司6 小时前
各种大小尺寸TFT-LCD面板供电偏压电源方案IC
人工智能·单片机·嵌入式硬件·神经网络·生成对抗网络
FREEDOM_X6 小时前
嵌入式——定时器工作原理
linux·c语言·单片机·嵌入式硬件·ubuntu
2401_827501287 小时前
51单片机(三)串口通信(UART)、Modbus协议
单片机·嵌入式硬件·51单片机
振浩微433射频芯片7 小时前
5个IO控制20个LED?查理复用实战拆解
网络·单片机·物联网·学习·智能家居
嵌入式-老费9 小时前
esp32开发与应用(和stm32f103用spi通信)
stm32·单片机·嵌入式硬件