您的位置 首页 电源

调试器不能连接到STM32的问题与解决办法

很多人都碰到过调试器不能连接到STM32的问题,不管是IAR的J-Link还是Keil的ULink,或者是ST的ST-Link。出现这个问题时,调试软件会提示不能

很多人都碰到过调试器不能衔接到STM32的问题,不论是IAR的J-Link仍是Keil的ULink,或者是ST的ST-Link。呈现这个问题时,调试软件会提示不能树立与Cortex-M3的衔接,或提示不能下载程序,或提示找不到要调试的设备等。

这样的问题都是发生在调试那些可以在CPU不干涉的时分主动运转的模块、或在调试低功耗形式的程序的时分。

所谓“可以在CPU不干涉的时分主动运转的模块”包含:DMA、定时器、接连转化形式下的ADC、看门狗等模块。

这个问题的本源是:

1)调试器需求在RAM内履行一段程序,对Flash进行擦写操作,假如不中止这些主动运转的模块,它们会搅扰程序在RAM中的履行,致使下载失利。比方DMA模块被装备为不停地复制一段数据区,而调试器刚好需求运用DMA数据传输的方针区域,这时DMA的操作将会与调试器的操作发生抵触。再比方,假如发动了看门狗而没有履行硬件复位,则在下次调试器需求下载程序时,看门狗超时将触发芯片复位,导致下载操作失利。

2)低功耗是经过中止CPU的时钟而完结,JTAG调试是经过与CPU的通讯完结,中止了CPU的时钟致使调试器会失掉与CPU的通讯。

有人说“我中止调试的时分,这些模块现已中止了运转,应该不会搅扰到后续的调试”,这个问题要从几方面看:

一、调试器是经过中止CPU中心的时钟来中止被调试程序的运转,实际上被调试芯片的硬件模块并没有被复位,它们还处于使能状况,那些可以主动运转的模块仅仅处于暂停状况,一旦康复了时钟之后,它们仍会持续运转。

二、现在常用的调试软件,不论是IAR EWARM仍是Keil MDK,调试软件界面上的”复位”按钮都不能对芯片履行硬件的复位,这个”复位”按钮只能对芯片内的程序履行软件复位,即把运转指针从头指向复位地址。

三、运用板上的复位按钮可以手动地进行硬件复位,使一切模块(包含那些可以主动运转的模块)中止工作并康复到复位状况。可是当调试器需求操控CPU之前,它需求先为CPU中心供给时钟,然后需求较长的一段时刻做一些初始化的动作,然后才干接收CPU中心的操控权。在调试器为CPU中心供给时钟之后,用户程序就现已开端运转起来,假如用户程序在调试器接收CPU中心的操控权之前,就初始化好硬件模块并发动运转,则仍然会发生与调试器的抵触。

依据以上的剖析,处理这个问题的关键是,在调试器接收CPU中心的操控权之前,有必要中止一切可以主动运转模块的操作,使它们处于封闭状况,要做到这一点,可以有以下几种计划;

1)每次退出调试状况时,先中止一切模块的运转,比方履行该模块的DeInit()操作。

2)在main()函数开端时,不论各模块处于什么状况,先履行该模块的DeInit()操作,然后在程序中较晚的时刻或真实需求时再敞开相应的模块。这样确保在刚进入调试状况时,调试器可以有足够的时刻完结初始化和下载程序的操作。先履行该模块的DeInit()操作的意图是为了封闭哪些上一次操作敞开的模块。

3)调整BOOT0/BOOT1的设置,把发动形式改变为从内部SRAM发动,再结合手艺硬件复位。因为BOOT0/BOOT1的状况只在硬件复位时是有意义的,而调试器不做硬件复位,所以这样的设置不会影响调试器下载程序到Flash中,也不会影响在Flash中调试程序。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/257422.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部