STM32CubeIDE使用ADC采用DMA重大BUG

问题描述

STM32CubeIDE 1.8.0问题

大牛攻城狮最近调试STM32L151CBT6。由于项目上使用该款芯片做控制电源使用,其中涉及到多路ADC的数据采样。使用STM32CubeIDE 1.8.0版本详细如下图所示

这里大概率是STM32CubeMX版本太低了,从图上看才是6.4.0

注意这里的使用的软件版本号很关键。采用该款软件搭建工程,第一次搭建工程,配置ADC时候,不打开DMA,生成代码如下 :

再次,修改工程,打开DMA后,重新生成代码如下: 

 

这里就出现了问题,具体分析如下,MX_DMA_Init函数首先打开DMA时钟,所以必须在MX_ADC_Init函数之前,所以生成如下代码是错误的,这里只是ADC的DMA存在这个问题,应该其他外设的DMA是不是也有这个问题。 

 MX_ADC_Init();
 MX_DMA_Init();

这个问题的核心是在DMA时钟未打开之前,进行了DMA的操作,后续的现象的ADC采样数据都是错误的,基本上全是0。

这个问题前前后后折腾了一个星期,主要是没有怀疑到STM32CubeIDE生成的代码会有问题,看这种现象,生成的代码也是没有问题,就是代码顺序出现了问题,这些细节对用户来说发现出来真累,主要是是心累,要不断的进行自我怀疑。这个做个记录,希望别人遇到这个问题,一下就能解决了。该工程下载地址

STM32CubeIDE使用ADC采用DMA重大BUG,初始化代码中将MX-DMA-Init函数MX-ADC-Init搞反资源-CSDN文库

STM32CubeMX V6.8.1测试

使用STM32CubeMX,版本V6.8.1未发现该问题

使用STM32CubeMX,版本V6.8.1生成代码如下,反复打开关闭DMA都能保证如下顺序,  MX_DMA_Init在MX_ADC_Init之前。

 STM32CubeIDE 1.16.0测试

反复打开关闭DMA也都能保证如下顺序,  MX_DMA_Init在MX_ADC_Init之前。

其中项目使用STM32CubeMX

 

解决方法 

升级STM32CubeMX版本,STM32CubeIDE版本到最新版本

 如果不想升级软件,比如我,因为这个版本的STM32CubeIDE开发了很多工程,如果更换新版本,编译出来的固件,没有时间和条件测试了。这里需要如下图所示复位一下ADC的配置,然后,再把所有配置,一次性配置好,尤其是DMA,复位ADC配置后,第一次就要选择打开DMA。(这个方法也不是每次都有效,有兴趣的同学可以自己测试一下)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/890757.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

服务器数据恢复—Raid5阵列硬盘磁头损坏导致掉线的数据恢复案例

服务器数据恢复环境: 一台某品牌存储设备上有一组由10块硬盘(9块数据盘1块热备盘)组建的raid5阵列,上层部署vmware exsi虚拟化平台。 服务器故障: raid5阵列中两块硬盘对应的指示灯亮黄灯掉线。硬盘序列号无法读取&am…

Java学习-JVM

目录 1. 基本常识 1.1 JVM是什么 1.2 JVM架构图 1.3 Java技术体系 1.4 Java与JVM的关系 2. 类加载系统 2.1 类加载器种类 2.2 执行顺序 2.3 类加载四个时机 2.4 生命周期 2.5 类加载途径 2.6 双亲委派模型 3. 运行时数据区 3.1 运行时数据区构成 3.2 堆 3.3 栈…

特斯拉全新发布会上,无人驾驶汽车亮相,机器人与用户近距离互动

在科技日新月异的今天,特斯拉再次以其前瞻性的技术和创新理念引领了行业的潮流。近日,特斯拉在美国加利福尼亚州伯班克华纳兄弟工作室召开了一场主题为“WE ROBOT”的新品发布会,会上不仅发布了无人驾驶汽车,还展示了特斯拉人形机…

CVE-2022-26965靶机渗透

​ 开启环境 ​ ​ 进入环境 ​ ​ 使用弱口令admin登录 ​ ​ 利用cms主题构造木马 ​ 需要将主题中的info.php文件修改,再打包成zip再上传,通过网络搜索找到Github中的Pluck CMS,进入后随便下载任一主题 https://github.com/sear…

python之selenium接管打开的谷歌浏览器窗口——隐藏爬虫特征,跳过登陆弹窗验证

文章目录 引言使用selenium接管打开的谷歌浏览器总结 引言 我们知道通过selenium打开的浏览器与本地电脑上打开的浏览器是不同的,selenium通过插件打开浏览器页面会显示爬虫特征信息,且在访问某些网站时,很容易被检测出是一个爬虫机器&#x…

PostgreSQL学习笔记七:常规SQL操作

PostgreSQL 支持标准的 SQL 语句,同时也扩展了一些特有的功能。以下是一些常规的 SQL 语句示例,这些示例涵盖了数据定义、数据操作和数据查询的基本操作: 数据定义语言 (DDL 创建数据库: CREATE DATABASE mydatabase;创建表&#…

为什么要选择高权重媒体?高权重媒体发稿优点有哪些,媒介盒子分享

在品牌传播与市场推广的领域中,选择高媒体权重进行发稿已成为众多企业的共识。高媒体权重不仅代表了媒体的影响力、权威性和传播效果,更是企业实现精准品牌曝光、提升品牌形象和市场竞争力的重要工具。下面,我们将深入探讨为何要选择高媒体权…

【 香格里拉酒店-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 …

国家基本药物目录数据库查询3种方法(2018、2012、2009年版)

国家基本药物目录是一份由国家卫生健康委员会等相关部门制定的药品清单,旨在满足国家公共卫生需求,保障基本医疗服务。该目录包括了多种药品,覆盖了不同的疾病治疗领域,如抗生素、心血管药物、神经系统药物、抗肿瘤药物、维生素和…

Video-LLaMA部署

Video-LLaMA: An Instruction-tuned Audio-Visual Language Model for Video Understanding

如何设计销售人员的薪酬结构?

如何设计销售人员的薪酬结构? 在构建组织薪酬体系的过程中,薪酬结构设计占据核心地位,其复杂性不容小觑。学者普遍认为,薪酬结构反映了薪酬体系中各组成要素的分配比例,其设计需综合考量企业特性、发展阶段、员工特质…

VR全景摄影的拍摄和编辑软件推荐

随着虚拟现实技术的不断进步,VR全景摄影逐渐成为商业、娱乐和教育等多个领域中的重要工具。通过专业的设备与软件,摄影师能够创作出沉浸式的360度全景作品,为观众提供身临其境的视觉体验。在这篇文章中,我们将介绍VR全景摄影的相关…

9月丨创客匠人-IP书院月报附10月活动预告

创客匠人9月部分发售成果展示!带客户拿结果,我们是真干,真出结果!每个月都有新的百万案例! 9月活动回顾: 9月2日I创客发售联盟私教班第二期正式开班《开营第一讲》 9月12日|媛姐连麦巨龙光学董事长董赣明…

借助 Aspose.Words控件,在 Word 中添加目录 (TOC)

考虑一个不包含目录的大型文档。读者必须连续滚动很长时间,从而花费大量时间来寻找所需的信息。目录 (TOC) 可以立即解决此问题,因为它清楚地显示了文档的结构和导航的可能性。在这篇文章中,我们将向您展示如何在 Word 文档中添加目录。 Asp…

【HTML并不简单】笔记4-你不知道的details、dialog和popover元素

文章目录 自带交互的details元素自定义样式案例全新name属性 dialog元素form元素与对话框自动关闭关闭来源的判断自动聚焦特性showModal()方法与真正的对话框焦点隔离特性顶层特性自动层级特性 原生弹层与popover属性 《HTML并不简单:Web前端开发精进秘籍》张鑫旭 笔…

C语言 ——— oj题:搜索插入位置

目录 题目要求 代码实现 题目要求 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置 请必须使用时间复杂度为 O(long n) 的算法 示例 1: 输入: nums [1,3,5,6], t…

Nature 正刊丨生物分子冷凝物介导内体膜的弯曲和断裂

01摘要 多囊体是通过降解膜结合的货物蛋白1,2,3参与细胞质量控制的关键内体隔室。消耗ATP的ESCRT蛋白机制通过多泡体膜的内陷和断裂形成管腔内囊泡,介导膜结合货物蛋白的捕获和吞噬4,5。在这里,我们报告说,植物ESCRT组分FREE16形成与膜结合的…

遗传算法与深度学习实战(18)——使用网格搜索自动超参数优化

遗传算法与深度学习实战(18)——使用网格搜索自动超参数优化 0. 前言1. 网格搜索2. 使用网格搜索自动超参数优化小结系列链接 0. 前言 我们已经学习了如何使用随机搜索获得较好的超参数优化 (Hyperparameter Optimization, HPO) 结果,但它耗…

『Mysql进阶』Mysql explain详解(五)

目录 Explain 介绍 Explain分析示例 explain中的列 1. id 列 2. select_type 列 3. table 列 4. partitions 列 5. type 列 6. possible_keys 列 7. key 列 8. key_len 列 9. ref 列 10. rows 列 11. filtered 列 12. Extra 列 Explain 介绍 EXPLAIN 语句提供有…

【C++指南】C++中的浅拷贝与深拷贝:深入剖析

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 引言 🍃浅拷贝 基本概念 代码示例分析 🍃深拷贝 基本概念 代码示例分析…