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

相关推荐
雷门大师姐6 小时前
14.DS18B20温度传感器
单片机·嵌入式硬件
触角010100017 小时前
OLED屏幕开发全解析:从硬件设计到物联网显示实战 | 零基础入门STM32第五十二步
驱动开发·stm32·单片机·嵌入式硬件·物联网
蓑衣客VS索尼克8 小时前
无感方波开环强拖总结
经验分享·单片机·学习
傍晚冰川10 小时前
【江协科技STM32】ADC数模转换器-学习笔记
笔记·科技·stm32·单片机·嵌入式硬件·学习
Whappy00111 小时前
第三节:基于Winform框架的串口助手小项目---串口操作《C#编程》
linux·单片机·c#
爱吃奶酪的松鼠丶13 小时前
51单片机之蓝牙模块的使用
单片机·嵌入式硬件·51单片机
盐析大白兔14 小时前
STM32G431RBT6--(3)片上外设及其关系
stm32·单片机·嵌入式硬件
与光同尘 大道至简15 小时前
中国嵌入式单片机就业形势分析
arm开发·python·单片机·嵌入式硬件·github·硬件工程
辰哥单片机设计17 小时前
STM32项目分享:智能家居语音系统(ASRPRO版)
stm32·单片机·智能家居
summer__777720 小时前
案例1_1:Proteus点亮8个蓝色LED灯
单片机·proteus