【MCU】ULINK/JLINK下载程序后看门狗不复位

问题概要

使用下载器烧录程序到单片机(Cortex-M0),第一次运行正常

  • 但重新上电后,运行异常,重新烧录才能正常运行
  • 重新烧录后,再次重新上电,运行异常
  • 先下载,再重新上电,再keil DEBUG(不重新下载程序),运行正常

详细说明

单片机ADC采集数据,DMA将采样数据搬运到程序缓冲区中。
在DMA的半满中断和全满中断中,使用UART将数据发送到上位机。

(1)正常运行的状态

在这里插入图片描述

  • 红色为高电平:程序处在DMA半满中断中
  • 蓝色为高电平:程序处在DMA全满中断中
  • 黄色高低变换:UART在发送数据

这个波形图展示了当程序正常运行时,DMA半满中断和全满中断应该是交替的,串口在中断中发送数据

(2)异常运行:单片机下载后重新上电

在这里插入图片描述
从图中可以看出以下几点:

  1. 每一次完整传输后,DMA都无法进入全满中断,循环往复
  2. 在第二次半满中断后,看起来像是同时进入了半满和全满中断,串口看起来像是有数据传输
  3. 出问题的部分,其高电平是3.3V,而非正常的5V

(3)DEBUG过程

  1. 串口:由于在问题部分,串口有数据发出,故先检查串口。在问题部分,上位机没有接收到串口数据。将中断中的串口用延时代替,问题仍然存在。检查正常部分的数据,数据无误。基本排除是串口的问题。
  2. DMA中断:第一次下载程序时,DMA中断时序正确,在重新上电时,看起来是同时进入全满和半满中断,有可能是在中断中串口传输时间过长,在这个时间内采集了过多的数据导致同时触发全满和半满中断,故先排查ADC问题。
  3. ADC:重新根据采样率计算了缓冲区半满和全满的时间,并根据串口的波特率计算了串口的传输时间,确定中断时间足够串口发送。

由于无法定位问题,故采集了从重新上电开始的波形

在这里插入图片描述
发现在上电初期,就有代表着“DMA中断”的引脚电平拉高,与此同时,串口TX引脚也有数据发送

到这里,基本可以定位问题在于发生了周期性的复位

原因总结

又从头到尾过了一遍芯片手册,尤其是复位部分,
发现芯片在上电时自动开启独立看门狗(IWDT),且无法关闭。
在程序中误以为看门狗没有打开,故没有执行请狗操作,
而单片机在DEBUG模式下是默认关闭看门狗的。
当在程序中配置看门狗并执行清狗操作后,问题解决。

总结问题,看门狗导致的复位,但第一次烧录时,猜测单片机处于debug模式,看门狗在debug模式下没有运行

但是,总结一下,为什么一开始没有怀疑是复位的问题呢?

  1. 在“误以为进入DMA中断”的时间内,串口看起来是有数据发送的,因此误以为没有复位
  2. 下载程序后,拔掉烧录器,并使用RST引脚硬件复位
    程序正常运行而没有复位(此时程序没有清狗)
    也就是说硬件复位没有使芯片退出DEBUG模式(猜测)

本次DEBUG仍有如下问题需要定位和解决:

剩余问题(求大佬解答)

  1. 只是使用下载器下载程序,而没有进入keil的DEBUG模式,为什么单片机还是进入了DEBUG模式,从而导致看门狗没有启动?
  2. 下载程序后不断电、拔掉调试器并手动RST引脚复位,程序没有执行清狗操作,程序仍能正常运行,为什么还没有退出DEBUG模式?
  3. 复位后配置了LED引脚,使其输出高低点平,为什么是3.3V而非后面的5V?(推测可能是复位后电压不稳)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值