STMCU小助手
发布时间:2022-8-4 22:44
|
前言 ' y) a" ]- s% _2 k& Z 利用 ST 提供的辅助开发工具 STM32CubeMX,可以快速开发 STM32 应用。在本文中讨论的 ADC 应用,同样是建立在STM32CubeMX 生成工程的基础上。具体为在 STM32H743ZI 上,利用 DMA 自动实现 ADC 数据周期采集和转移,在采集指定数量的采样值后产生中断,对数据进行处理。; C: t; s7 t, z$ t$ m; }' X m 文中仅对上述实现过程中出现的一种异常,进行介绍和分析。不涉及具体的 ADC 采集和处理实现的介绍。 - [# V1 I! T; Z/ X+ B/ e, n) w( p. V $ X( R0 c- A: F! `' t 一 实验环境 硬件平台:Nucleo-H743ZI W( v0 o9 f! D% G) F* Y STM32CubeMX 版本:v4.28.0 STM32CubeH7 版本:v1.2.0 IDE: MDK-ARM v5.25.2.0 (优化级别 Level3) 首先利用 STM32CubeMX 生成 ADC 应用的初始化工程,涉及的配置如下所示:- ~6 u4 C- d$ N5 t) }5 b
3 E' l' m5 f8 v$ J 然后在工程中增加对 ADC 周期采集和 DMA 传输实现的命令,如下所示。并且增加回调函数内容,本文中实现仅添加了空指令。在调试过程中,在空指令处增加断点,判断 ADC DMA 传输半完成和传输完成中断是否正常进入。 4 F; ^# H" I! ^( i& }+ H
9 s( T5 \* W, T 7 Q2 l2 S, u8 _; ^5 k- n/ ~7 y 注: 如果在编译链接的过程中,出现没有定义 ECC_IRQn 提示,需将 stm32h7xx_hal_msp.c 中对 HAL_NVIC_SetPriority(ECC_IRQn, 0, 0);的调用移除。8 M {) ~' F9 _$ D/ x) c6 n' i; G 二 异常现象 在运行过程中,无法进入 HAL_ADC_ConvHalfCpltCallback 和 HAL_ADC_ConvCpltCallback 回调函数(分别对应 DMA传输半完成和传输完成回调函数)。 跟踪中断服务函数,发现在首次 DMA1 传输后,DMA_LISR 寄存器值为 0x8。即 TEIF0 置位,Stream 0 出现传输错误。 @6 [' L3 `8 v$ } M. c# h. n: t6 s 完整版请查看:附件 : ^0 w: A/ J3 r/ f 5 L' }, u# F4 G: f6 A |
STM32 DMA abnormal transmission.pdf
下载971.18 KB, 下载次数: 7
经验分享 | 通过STM32 TIMER的PWM功能模拟输出正弦波
SPI 32位宽DMA方式收发失败问题
多通道DMA传输为何有一路异常?
经验分享 | STM32N6 ADC DMA 传输失败案例分享
经验分享 | DMA发送函数只能第一次调用有效?
经验分享 | 使用EXIT0同步触发SPI的DMA发送话题
【开发经验】LAT1500 如何通过DMA配合CRC功能
我心中的ST中文论坛
经验分享 | 为什么重启ADC的DMA传输要先停掉ADC?
经验分享 | 使用GPIO+DMA+TIM模拟SPI通信演示
微信公众号
手机版