[STM32爬坑]STM32G431ADC工作不正常:

news/2024/12/2 19:40:07/

       近期收到了一块STM32G4系列的开发板,作为试用开发板,尝试使用G4做电源类项目,在使用G4系列开发板的时候,碰到了ADC工作不正常的情况,具体情况如下所示:

       由于项目需要,主频限定在20Mhz,使用了板载24Mhz晶振,时钟树分布如下:

图 1 时钟树分布

使用了ADC2,使能了ADC CH1 CH2 不使用多重采样,使能ADC2通道DMA,使用DMA2总线CH1,循环模式,传输方式为Half Word ,使能ADC中断和DMA中断,ADC配置如下图所示:

图 2 ADC配置图

ADC设置了12位 循环模式,使能DMA ,DMA非单次中断.

理论上,经过以上配置之后,在main函数中使用

HAL_ADC_Start_DMA(&hadc2, (uint32_t*) AD_G4Data.AD_Data, 256);

函数开启ADC采集之后,主函数应该得到轮询,通过DEBUG应该可以看到采样值得到变动,可是实际DEBUG的时候,主函数没有得到轮询,通过单步调试发现,函数卡在了ADC获取值的回调函数上,感觉很奇怪.一时找不出问题.

我开始怀疑是不是主频太低,导致CPU处理不过来ADC转换信号,我提高主频至80M,发现ADC采样正常,但是通过DMA模式获取的ADC数据,偶发通道传输错误现象,百思不得其解,起因主频问题,所以我将主频调整到160M,数据传输恢复正常.至此,可以总结为是主频问题,所以回去详细查看时钟树.

问题所在:

系统主频为20M,但是单片机ADC分频为160M,单片机AD请求太快,导致单片机来不及处理,所以一直在ADC取值请求等待,调整ADC时钟后,问题问题解决,附上调整后的时钟树.

图 3 调整后的时钟树

调整前后的时钟树,唯一的差别就是ADC12 Clock Mux 最开始为160M 调整后为20M

后来没有发现这个问题,原因是在STM32Cube FW_G4 V1.1.0包中已经修复了这个问题,使用V1.1.0创建的工程,如果使用了ADC,ADC12 Clock Mux的最大值自动锁定为系统主频,这个问题给我们提供了一条思路,当某一模块工作不正常时,分析代码,如果卡在某一特定的函数上,可以根据特定函数的功能进行分析,详细检查时钟树,DMA等功能,一般能排除故障。

 

如果有任何问题,欢迎加入STM32讨论群,大家一起讨论问题


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

相关文章

STM32G0开发笔记-Platformio+libopencm3-按键和外部中断

【原文】https://makerinchina.cn/article_12434df0dc1e.html title: STM32G0开发笔记-Platformiolibopencm3-按键和外部中断 tags: STM32MCUSTM32G070libopencm3MonkeyPiexti categories: STM32 date: 2022-9-8 09:33:05 使用Platformio平台的libopencm3开发框架来开发STM32…

STM32G4系列MCU学习笔记:按键模块

第一次以写博客的方式记录自己在嵌入式学习过程中的学习经历和踩的那些坑~ Day1 那么开始叭! STM32G4系列MCU学习笔记:按键模块 前言一、硬件操作1. 原理图2. 硬件分析3. 初始化代码 二、按键模块的驱动层实现1. 硬件框图2. 按键驱动层代码实现3. 计时操…

服务器32g系统为什么显示3g,使用32G内存的电脑是什么样的体验?

以前因为工作关系接触过很多大内存服务器。也帮土豪朋友配32G的电脑(一个主机加过近万元) 32G内存电脑和16G差别大么? 相同的配置下,区别不会很大。16G内存目前完全可以满足一般家庭对电脑的99%的需求。 个人用的pc最吃配置的还是游戏和设计类用户。但无…

STM32G431简介

STM32G431简介 STM32系列32位微控制器基于Arm Cortex-M处理器,旨在为MCU用户提供新的开发自由度。它包括一系列产品,集高性能、实时功能、数字信号处理、低功耗/低电压操作、连接性等特性于一身,同时还保持了集成度高和易于开发的特点。 1.…

stm32g474教程_STM32G474 DAC使用DMA不输出的解决办法/汗

STM32G474 DAC使用DMA不输出的解决办法/汗 [复制链接] 今天准备使用STM32G474的DAC输出CHIRP信号,结果调了一天才调通,原因只是因为2个小小的问题 第一个问题是DMA设置是periperal处要选WORD image.png (32.29 KB, 下载次数: 0) 2020-9-6 19:14 上传 第二…

【STM32G0】按键控制LED亮灭

目录 硬件介绍STM32CubeMX新建工程时钟配置LED配置原理图CubeMX配置 按键KEY配置原理图CubeMX配置 生成工程添加用户代码实验现象 硬件介绍 STM32 NUCLEO-G071RB 开发板,软硬件资源详见官网介绍,主要是参考用户手册和电路图,利用STM32CubeMX…

STM32G4之按键实验

文章目录 前言一、按键原理二、程序编写1.按键扫描函数2.按键处理函数 总结 前言 一、按键原理 按键电路原理图(CT117E-M4产品手册) 这四个按键一端都接了VDD,所以默认高电平,当我们按下按键时,电路闭合,…

stm32g431使用CubeMX配置按键与使用

stm32g431使用CubeMX配置按键与使用 使用cubemx新建一个工程 配置八个LED的GPIO口为输出(GPIO_Output),四个按键的GPIO口为输入(GPIO_Input) 设置晶振 配置时钟 生成工程 工程生成之后在工程目录下新建这些文件夹和文件,这样方便…