STM32CubeIDE使用ADC采用DMA重大BUG

news/2024/10/18 14:52:20/

问题描述

STM32CubeIDE 1.8.0问题

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

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

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

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

 

这里就出现了问题,具体分析如下,MX_DMA_Init函数首先打开DMA时钟,所以必须在MX_ADC_Init函数之前,所以生成如下代码是错误的,这里只是ADCDMA存在这个问题,应该其他外设的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。(这个方法也不是每次都有效,有兴趣的同学可以自己测试一下)


http://www.ppmy.cn/news/1540022.html

相关文章

kafka消息丢失?可能和seekToEnd有关

最近遇到kafka消息丢失的偶现问题,排查许久都没找到原因。后面通读代码,才发现消息丢失和seekToEnd有关。 我有一套环境是HA架构,3个节点,每个节点有多个app,每个app启动时会向zk注册,然后利用zk选出主app&…

操作系统简介:作业管理

作业管理 一、作业管理1.1 作业控制1.2 作业的状态及其转换1.3 作业控制块和作业后备队列 二、作业调度2.1 调度算法的选择2.2 作业调度算法2.3 作业调度算法性能的衡量指标 三、人机界面 作业:系统为完成一个用户的计算任务(或一次事务处理)…

Python打包之嵌入式打包神器PyStand

在使用Python开发项目时,如果项目依赖了如torch这样的大型第三方库,打包后的体积可能会变得非常庞大(超过1GB)。传统的打包工具,如Nuitka或PyInstaller,可能会面临打包成功率低、耗时长、打包后体积巨大的问…

4.stable-diffusion-webui1.10.0--图像修复(adetailer)插件

ADetailer是Stable Diffusion WebUI的一个插件,它通过深度学习模型智能检测图像中的人脸、手部及身体等关键部位,并自动进行重绘修复,使得生成的图像更加自然、符合预期。 ADetailer插件主要应用于图像的细节增强、降噪和修复,特…

hive自定义函数缺包报错,以及运行时与hive冲突解决

一.问题描述 仅描述了从配置到打包上传的过程&#xff0c;想要看解决请直接跳到下文的对应模块。 在使用hive设置自定义函数的时候在pom.xml中配置如下依赖&#xff0c;使其打包的时候带依赖打包&#xff1a; <dependencies><dependency><groupId>org.apa…

递归——二叉树中的深搜

文章目录 计算布尔二叉树的值求根节点到叶节点数字之和二叉树剪枝验证二叉搜索树二叉搜索树中第 K 小的元素二叉树的所有路径 二叉树中的深搜有三种方法 前序遍历 根->左子树->右子树 中序遍历 左子树->根->右子树 前序遍历 左子树->右子树->根 计算布尔…

【人工智能】大模型的崛起为AI Agent注入了“聪明的大脑”,彻底改变了定义!

在人工智能的迅猛发展中&#xff0c;大模型的崛起为AI Agent注入了“聪明的大脑”&#xff0c;彻底改变了其定义。如今&#xff0c;基于大模型的AI Agent架构已成为企业应用大模型的首选方案。本文将深入探讨AI Agent的构建、框架选择及其在实际应用中的重要性&#xff0c;帮助…

PCL 点云配准-4PCS算法(粗配准)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 加载点云数据 2.1.2 执行4PCS粗配准 2.1.3 可视化源点云、目标点云和配准结果 2.2完整代码 三、实现效果 3.1原始点云 3.2配准后点云 PCL点云算法汇总及实战案例汇总的目录地址链接…