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

2023-11-19

问题描述

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 《小岛区块链》之区块链起源

    今天我们开始 小岛区块链 的第三章节 智能合约 本文衔接于 小岛区块链 第二章节 共识之后 为方便大家理解 请先阅读 小岛区块链 之起源 小岛区块链 之共识 一 选举记账还能再升级一下吗 上回说到 在小郑的提议下 鹿谷的村民们都开始按照投票
  • 2019年电赛之路——2015年电子设计竞赛A题任务设计

    参加19年电赛 我们奔着电源题来的 所以我们一开始要练习的题目就选定了15年的A题 因为我们找到了几个国一方案 但是只有一个方案 代码和PCB图都没有 这也是我们失误的地方 本来的路线应该是找一个成品方案 模仿着做下来 先做下来一个题目后
  • 剑指 Offer 05. 替换空格(java+python)

    请实现一个函数 把字符串 s 中的每个空格替换成 20 示例 1 输入 s We are happy 输出 We 20are 20happy 限制 0 lt s 的长度 lt 10000 java StringBuilder StringB
  • tomcat7启动报taglib标签错误

    问题描述 应用在tomcat6上发布没有问题 部署到tomcat7后报错 不识别配置的taglib标签 问题截图如下 解决方法 查询应用环境 除服务器为tomcat7外 配置的web xml 头文件为 测试头文件为
  • Arduino 自动初始化ESP8266为透传模式

    通过上篇可以把esp8266设置成透传模式 但掉电后esp8266会退出透传模式 需要重新初始化 这样arduino和esp8266结合使用时 每次重启后都要通过电脑重新设置esp8266进入透传模式 这里通过把AT指令写进arduino程
  • elasticsearch 为“非查询字段”不建索引 index store

    官方文档 index 简章翻译 文末附原文 索引index 这个参数可以控制字段应该怎样建索引 怎样查询 它有以下三个可用值 no 不把此字段添加到索引中 也就是不建索引 此字段不可查询 not analyzed 将字段的原始值放入索引中
  • python元组练习题

    Python 元组综合练习 使用python语言创建空元组 score 按学号顺序 由小到大 保存多个学生一门课程的 考试成绩 调用元组操作的常用函数实现以下功能 1 创建score 元组 其中包含10 个数值 68 87 92 100 7
  • Golang当中的定时器

    定时器 前言 定时器的基本使用 前言 在平时写代码的时候 我们经常会遇到在将来某个时间点或者间隔一段时间重复执行函数 这个时候我们就可以考虑使用定时器 本片文章主要介绍一下golang当中的几个常用的定时器 time Timer time
  • (二十六)admin-boot项目之基于注解的数据字段脱敏

    项目地址 https gitee com springzb admin boot 如果觉得不错 给个 star 简介 这是一个基础的企业级基础后端脚手架项目 主要由springboot为基础搭建 后期整合一些基础插件例如 redis xxl
  • VMware 14 安装win7x64

    所需工具 VMware17 windows镜像 windows镜像在脚本之家下载的 1 新建虚拟机 文件 gt 新建虚拟机 gt 下一步 2 选择 稍候安装操作系统 下一步 3 选择操作系统和版本 下一步 4 设置虚拟机名称和存放位置 选择
  • java动态创建xml文件

    private static void createXml String dest throws Exception DocumentBuilderFactory factory DocumentBuilderFactory newInst
  • Java中占位符的实战运用

    java中的占位符 有以下几种等等 s字符串类型的占位符 b布尔类型的占位符 d整数类型的占位符 c字符类型的占位符 我们大多情况就只用前两种 举个例子 Created by xiwen on 2021 1 14 Slf4j public
  • 常用小工具使用记录整理

    简单记录方便后续使用 1 截图软件 FSCapture exe FSCapture最新版是款适合电脑屏幕中使用的抓屏工具 FSCapture官方版集成了图像捕捉 图像浏览以及图像编辑等功能为一体 帮助用户对截取的图形进行处理操作 并且FSC
  • ionic 解析json串 带(路由 侧拉 效果 上拉刷新 下拉加载)

    先上图看效果 上代码 一般都是 按顺序上代码的
  • 使用STM32高级定时器(TIM8)PWM互补通道输出PWM

    一 为何使用 最近做项目 因为定时器不够用需要用高级定时器 TIM8 来输出PWM来控制电机 刚好硬件工程师把引脚分配到了TIM8定时器CH3的互补通道CH3 ON上 所以需要将CH3 ON当普通的PWM模式输出PWM 特意记录一下 二 下
  • 阿里云Linux热扩容云盘(growpart和resize2fs工具)

    阿里云linux机器系统盘空间不够进行扩容 一 扩容物理盘 阿里云控制台在线扩容完成 二 安装growpart工具和resize2fs工具 root A yum install cloud utils growpart root A yum
  • token保活设计.md

    如果我们要使用token机制用以标识用户登录状态 以获得请求相关资源接口的权限 让你来设计一套方案 以为怎么设计呢 通常有两种思路 1 使用refreshtoken获取新的accesstoken 登录成功之后 返回一个返回refreshto
  • jQuery动态控制单选框选中,实现radio单选框选中后触发事件。prop()选中,取消事件判断。

    input name IS BREAK value 0 prop checked true div class form group div
  • 重读百度移动生态:“第一曲线”的创新“延长线”

    刚刚结束的 WISE2022新经济之王 大会上 百度集团资深副总裁 百度移动生态事业群组总经理何俊杰在主旨演讲中断言 百度搜索 百度APP是AI规模最大的应用场景 随着AI预训练大模型 AIGC 数字人等新技术的规模化落地 其AI带来的创新
  • 【STM32】IIC使用中DMA传输时 发送数据总少一个的问题

    问题描述 在使用STM32 I2C数据发送过程中 发现每轮实际发送出去的数据总比在DMA配置中设定的传输数据个数要少一个 比方说 DMA配置里设定的传输数据个数是10个 结果发现在总线上只能发出9个 经过进一步发现是少了最后一个数据 当对I