datasheet

一则STM32f103莫名反复复位的经验记录

2019-06-14来源: eefocus关键字:STM32f10  反复复位  经验记录

最近在调试STM32F103RBT6时,发现只要一打开AD就会反复复位,将断点设置到启动代码处,发现复位是非常有规律的,总是执行过断点后就又回到断点了。


找原理,查硬件,一切均没有问题。


最后怀疑到代码上来,因为AD采样是另外一个产品中正常使用移植过来的,分为三大部分:对AD涉及到的外设和存储等的初始化,对AD的采集与存储(主要是中断),对AD的数据进行计算分析。


将三大模块全部注释后再逐一开放,发现是对AD的初始化会导致复位。


对AD的初始化代码再全部注释后逐一开放,发现是启动定时器TIM4的代码会导致复位。


后来将与定时器有关的代码全部审查了一遍,也没有发现问题,同样的相似代码在TIM1上工作的很好。


查网上的相似问题,也没有改善这个结果。


这个问题弄了两天无结果,只能暂时搁置下来调试其它模块。


后来在调试其它函数的过程中,忽然想到原来的AD代码是用于103VET6的,移植到103RBT6上会不会是平台本身的特性导致的问题呢。仔细想了一下,AD中的C语言是平台无关的呀,那与平台有关的只有仿真器设置和启动文件了。


查看仿真器设置,均是103RBT6的正确设置,再查启动文件,哈,原来是把原来的startup_stm32f10x_hd.s错误地引用到这个工程中来了,感觉是因为启动文件中对各中断向量定义的不一致导致系统复位的,更换为正确的startup_stm32f10x_md.s文件后,再把原AD文件恢复为原版本,编译后启动调试过程,完美运行。


困扰了三天的问题解决了,怎一个爽字了得!


关键字:STM32f10  反复复位  经验记录

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/ic464657.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32-点灯程序
下一篇:STM32软件复位的实现方法

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32F030R8-Nucleo使用PA2、PA3 UART2不能使用的问题

1. 开发环境开发平台:官方开发板STM32F030R8-Nucleo开发软件:Keil uVision5.24开发库:STM32Cube_FW_F0_V1.9.02. 实验现象根据官方例程,将UART1的配置更改为UART2,然后使用杜邦线接到PA2、PA3引脚,可串口就是无法收发数据。之后查看原理图发现,官方的Demo板,默认就没有将PA2、PA3扩展到外部引脚上,而是将这个USART2串口连接到了ST-Link的串口上,这样,ST-Link既可以下载程序,也可以当做开发板的USART2使用。截取部分具体电路图如下:其中SB14、SB13、SB63和SB62都是零欧姆电阻,问题就在这里了,SB14、SB13焊接了,但是SB63
发表于 2019-06-14
STM32F030R8-Nucleo使用PA2、PA3 UART2不能使用的问题

基于Ymodem协议的STM32F407的串口IAP

发送数据。成功接收的不会被确认。有错误的块被确认(NAK),并重发。Ymodem类似于Xmodem-1K,不同之处是提供批处理模式(batch mode)。在批处理模式下,可以使用一个命令发送一些文件。Ymodem使用循环冗余码校验作为错误校验方式。——摘自百度百科基于Ymodem协议的IAP引导程序硬件平台原子探索者STM32F407开发板通信接口串口实现流程按住复位键时按下KEY1键,在松开复位键之前按住KEY1不放,松开复位键,红色LED灯常亮,这时便进入固件升级程序,不断向上位机发送字符’C’请求上位机发送应用程序固件。这时打开上位机查询请求,上位机接收到请求后,通过串口发送第一个数据包,这个数据包主要包含了传输的文件的文件名和文
发表于 2019-06-14
基于Ymodem协议的STM32F407的串口IAP

STM32F10xxx支持三种复位

STM32F10xxx支持三种复位形式,分别为系统复位、上电复位和备份区域复位。一、系统复位除了时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器(见图4)以外,系统复位将复位所有寄存器至它们的复位状态。当发生以下任一事件时,产生一个系统复位:1. NRST引脚上的低电平(外部复位) 2.  窗口看门狗计数终止(WWDG复位) 3.  独立看门狗计数终止(IWDG复位) 4.  软件复位(SW复位) 5.  低功耗管理复位可通过查看RCC_CSR控制状态寄存器中的复位状态标志位识别复位事件来源。软件复位通过将Cortex™-M3中断应用
发表于 2019-06-14
STM32F10xxx支持三种复位

STM32F4的CCM内存之一

我们知道STM32F4当中有个CCM内存,如图所示,这个内存是挂在D总线上直接和内核相连,因此除了内核之外谁都不能访问,那么我们怎么将其利用起来呢? 首先,我们可以使用Keil的设置选项,将IRAM2打勾,让编译器选择什么时候使用这个内存。显然,我们还可以将这两个地址修改一下,将IRAM1改为0x10000000,这样,编译器就会优先分配CCM内存。 我们来看看结果,在MAP文件中,表明确实使用了这段内存,但是因为我们使用的内存较少, 还没有用到CCM。 这种自动分配的方式有什么问题呢?这段内存是内核专有的,除了内核任何其它总线都不能访问,这就意味着,一旦编译器将数据分配到CCM中,而同时使用了DMA
发表于 2019-06-14
STM32F4的CCM内存之一

STM32F4的CCM之二

前言有客户用STM32F427芯片,程序将CSTACK放在CCM RAM中,结果测试过一段时间的板子都出现了不能正常运行的情况。这个现象一度让我们怀疑是否是CCM RAM在测试过程中遭到了破坏,导致我们在解决问题的道路上浪费了不少时间。事实证明STM32的CCM RAM并没有那么脆弱,而解决问题时尽力从多个角度进行验证,不放过所有可能出问题的环节之心态更为重要。在具体讨论问题的原因之前,不妨先介绍一下STM32F4/STM32F3系列芯片上的CCM RAM。CCM RAM介绍ST的STM32F303, STM32F358, STM32F328, STM32F334系列和STM32F4的Advanced line系列芯片里都有CCM
发表于 2019-06-13
STM32F4的CCM之二

Proteus环境下Avr I/O电平反复变化(看门狗复位)

;…可惜没人回答 终于,搜索中找到了以下是原文: 这个问题主要会出现在用CVAVR来编译的程序中。 之前学AVR有用到proteus仿真,我用的是proteus7.4,拿一个ATMega16出来,用AVR编译出来的一些简单的程序,根本不能正常的运行,这把我搞的相当的郁闷,后 来在仿真日志中发现原来是看门狗一直都开着,我又没喂狗,因此一直都把处理器复位了,这回我更郁闷,我又没开看门狗,又没配置fuse,为什么自己会开呢,搞了N久后,发 现有这个可能,一个CVAVR本身编译之后在proteus仿真中,默认开了看门狗(实际上我并没有开啊!!!而且在实物中,要配置fuse才能开的吧?)经过考究后发现,原来真的 是CVAVR
发表于 2015-08-10

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved