0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

对STM32内部FLASH编程时遇到的ADC异常问题

茶话MCU 来源:ST MCU 信息交流 2020-05-14 09:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

STM32用户使用STM32F407芯片开发产品。用到内部3个ADC,其中ADC1与ADC2工作在ADC双模式,ADC3独立工作。运行代码时给FLASH开锁编程后,发现ADC3不工作了(其DR数据寄存器似乎不更新了,倒是用来触发ADC的定时器TIM2依然正常),Flash编程前后ADC3配置寄存器CR1、CR2没有发生改变。如果重新配置ADC3后就能正常工作。

从问题现象来看,初步感觉跟flash编程有些关系。

经了解,客户的确做了flash编程,有一部分参数需要存放在FLASH内。他的ADC3是由TIM2触发的,ADC3的转换结果是通过DMA搬运。

鉴于此,我这边便提醒他,如果不是基于双BANK条件,在flash编程时CPU是堵塞的,此时若发生中断不会得到响应,让他注意这点及因此可能导致的问题。

客户进一步反馈确认:

1:通ADC结果过DMA读取,并非中断方式获取;

2:FLASH编程过程中禁止了所有中断;

3:奇怪的是ADC3改为由软件触发则没有异常现象。用来触发ADC的定时器一直计数正常,并且只要重新配置ADC3(无须对触发定时器重新配置)也能恢复它的正常工作。

先说下客户提到的在flash编程时将总中断关闭动作。其实,从效果来讲,这个关中断没啥用,反正在Flash编程过程中即使有中断发生CPU也不会给予响应。

结合其反馈,软件触发和定时器触发ADC有个明显差别,就在于定时器的触发对于我们用户来讲往往存在些未知性或不确定性,即不知它具体的触发时间点。客户一直强调TIM工作保持正常,对ADC不能被触发感到奇怪。

整体上,通过问题症状结合经验初步判断是ADC3发生溢出事件了,建议客户做进一步检查确认。

后来,他反馈的确是发生了ADC溢出事件。在FLASH编程前暂停TIM2触发就可以避免溢出发生,不再发生ADC功能异常。

按理说他现在ADC结果是DMA传输,TIM触发DMA时应该可以及时读取数据的,怎么还发生了溢出呢?那就有种可能,在某个时刻,当ADC被TIM触发完成转换后,这时的DMA还没有准备好,导致ADC的结果没有被及时取走。

那什么原因会导致ADC结果不能被及时取走呢?若DMA配置在非循环模式,当DMA传输完成一轮数据后,DMA将不再继续实施数据传输,这时CPU往往还会进入DMA中断服务程序做些必要处理或者为下轮传输做准备。若这个DMA传输完成中断发生在FLASH编程期间,这就可能导致问题。由于该期间它本身不能得到响应,下一轮的DMA传输就没法被开启。但此时的TIM还是依然如故地触发ADC,其结果若不能被及时取走,导致溢出就再自然不过了。

当ADC发生溢出后,如果没有对溢出位做清零,后续的ADC转换动作是不会触发DMA的。具体到本案例,严格地讲,后来客户觉得读不到ADC的更新数据,不是因为ADC不工作,其实它一直被定时器触发转换,只是因为发生了溢出,没法正常触发DMA传输,进而无法实现ADC结果的搬运。

所以,在上述应用情况下,在做flash编程前可以先行关闭定时器,之后再打开。或者在DMA传输完成的中断服务程序里,在重新开启DMA之前,先暂时关闭定时器,对并ADC的溢出及出错做检测处理,之后再开启定时器和DMA传输。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5627

    浏览量

    130981
  • STM32
    +关注

    关注

    2315

    文章

    11223

    浏览量

    375724
  • 定时器
    +关注

    关注

    23

    文章

    3382

    浏览量

    125446

原文标题:对STM32内部FLASH编程时遇到的ADC异常问题

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ADRV9009 ADC采集异常是什么原因

    驱动,FPGA使用AMD JESD204B IP核实现,现在芯片与FPGA的JESD204B通信正常,发射通道正常,将发射回环到接收通道,数据采集出现异常。 以下为adrv9009配置: 以下
    发表于 05-14 07:12

    STM32H7 的 3 个 ADC 时钟同步方法

    1. 引言STM32H7 系列中使用多个 ADC 时,存在 ADC 时钟不同步的风险,这可能导致一个 ADC模块干扰其他 ADC 模块的转换
    发表于 04-15 16:16 0次下载

    国产SPI NOR Flash接口闪存介绍

    的存储架构,内部阵列由多个256字节的可编程页面组成,支持页编程、扇区擦除、块擦除及整片擦除等多种操作模式,为用户带来高度灵活的存储管理体验。
    的头像 发表于 12-26 11:51 815次阅读

    idf.py --version` 提示“不是内部或外部命令”(ESP32S3小智调试中遇到

    idf.py --version` 提示“不是内部或外部命令”(ESP32S3小智调试中遇到
    的头像 发表于 11-28 07:22 1447次阅读

    使用J-Flash编程CW32 MCU

    。 确保连接正确,并且MCU处于可编程状态(例如,处于复位状态)。 3.启动J-Flash: 打开J-Flash应用程序。 在J-Flash中,选择正确的目标设备(即你的CW32 MC
    发表于 11-25 07:00

    studio有没有通过更改下载算法,同时下载到内部flash和外部flash

    我现在使用的stm32h750,内部flash很小,需要使用外部qspiflash来储存程序。 studio可以像mdk一样设置两个下载算法吗? 这样才能一个程序使用两个flash不用
    发表于 09-26 07:04

    STM32C011开发(3)----Flash操作

    STM32C011 系列微控制器内置 Flash 存储器,支持程序存储与数据保存,具备页面擦除、双字写入、读写保护等功能。本文将简要介绍 STM32C011 的 Flash 结构与特性
    的头像 发表于 09-18 16:48 5498次阅读
    <b class='flag-5'>STM32</b>C011开发(3)----<b class='flag-5'>Flash</b>操作

    STM32H743以太网驱动移植异常怎么解决?

    单片机:STM32H743II PHY:LAN8720 开发环境:Keil 移植以太网驱动时,遇到异常。 使用的drv_eth.c drv_eth.h的版本信息如下图所示, 编译运行之后,显示的
    发表于 09-10 07:52

    如何使用ADC内部参考电压?

    如何使用ADC内部参考电压?
    发表于 08-27 07:43

    如何在下载程序时保护flash中的用户数据不被覆盖?

    使用stm32cubeide或stm32cubeprogrammer烧写程序,stlink下载器,芯片stm32h743,芯片内部flash
    发表于 08-14 06:38

    请问STM32内部Flash操作是不是优先级最高?

    STM32内部Flash操作是不是优先级最高?目前在内部Flash的单独一页存储了数据,发现在进行页擦除的时候正常工作的定时器中断无法进入
    发表于 08-13 07:03

    FLASH烧写/编程白皮书

    白皮书:如何烧写Flash——不同场景不同需求下的选择认识Flash NAND vs. NOR如何烧写/编程不同方案比较
    发表于 07-28 16:05 0次下载

    STM32F103RET6 FLASH擦除失败的原因?怎么解决?

    芯片不掉电,再进行擦除会出现擦不掉的情况,但是FLASH->SR寄存器未起任何异常状态,只有一个EOP置位。如果只是擦除->写入->擦除,中间不进行读的操作
    发表于 07-10 06:40

    第二十九章 读写内部FLASH

    本文介绍了W55MH32内部FLASH,其含主存储、系统存储等,可存储代码及掉电保存数据。读写需解锁、擦除页等步骤,标准库提供相关函数。还展示了擦除编程测试及模拟EEPROM读写的实验。
    的头像 发表于 06-20 14:09 1492次阅读
    第二十九章 读写<b class='flag-5'>内部</b><b class='flag-5'>FLASH</b>

    STM32多通道FFT运算异常的原因?怎么解决?

    问题报告:STM32多通道FFT运算异常 报告人:XXX日期:2025年X月X日硬件平台:STM32F407VGT6开发环境:STM32CubeMX + KeilCMSIS-DSP库版
    发表于 06-19 06:27