Keil IAR - Cortex M3 调试问题及解决方法(1)

2023-11-01

看到一篇文章,转载如下。 其实不光是STM32, 其它芯片甚至其它的IDE 都可参考。

STM32调试过程中常见的问题及解决方法

一、 在“Debug选项卡”下设置好仿真器的类型后,下载程序时却提示“No ULINK Device found.”

   解决办法: Keil MDK默认使用ULINK仿真器下载程序,在“Utilities选项卡”下把编程所使用的仿真器改为相应的类型即可。

二、 编译工程时提示如下信息:

main.axf: Error: L6218E: Undefined symbol __BASEPRICONFIG (referred from stm32f10x_nvic.o).

main.axf: Error: L6218E: Undefined symbol __GetBASEPRI (referred from stm32f10x_nvic.o).

main.axf: Error: L6218E: Undefined symbol __RESETFAULTMASK (referred from stm32f10x_nvic.o).

main.axf: Error: L6218E: Undefined symbol __RESETPRIMASK (referred from stm32f10x_nvic.o).

main.axf: Error: L6218E: Undefined symbol __SETFAULTMASK (referred from stm32f10x_nvic.o).

main.axf: Error: L6218E: Undefined symbol __SETPRIMASK (referred from stm32f10x_nvic.o).

    解决办法:工程缺少“cortexm3_macro.s”文件,把cortexm3_macro.s和STM3210x.s全部添加到工程即可。

Jacob注:注意官方提供的那几个.s,主要是一些内核文件。

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

    很多人都碰到过调试器不能连接到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的通信。

--------------------------------------------------------------------------------

    有人说“我停止调试的时候,这些模块已经停止了运行,应该不会干扰到后续的调试”,这个问题要从几方面看:

    1. 调试器是通过停止CPU核心的时钟来停止被调试程序的运行,实际上被调试芯片的硬件模块并没有被复位,它们还处于使能状态,那些能够自动运行的模块只是处于暂停状态,一旦恢复了时钟之后,它们仍会继续运行。

    2. 目前常用的调试软件,不管是IAR EWARM还是Keil MDK,调试软件界面上的"复位"按钮都不能对芯片执行硬件的复位,这个"复位"按钮只能对芯片内的程序执行软件复位,即把运行指针重新指向复位地址。

    3. 使用板上的复位按钮可以手动地进行硬件复位,使所有模块(包括那些能够自动运行的模块)停止工作并恢复到复位状态。但是当调试器需要控制CPU之前,它需要先为CPU核心提供时钟,然后需要较长的一段时间做一些初始化的动作,然后才能接管CPU核心的控制权。在调试器为CPU核心提供时钟之后,用户程序就已经开始运行起来,如果用户程序在调试器接管CPU核心的控制权之前,就初始化好硬件模块并启动运行,则仍然会产生与调试器的冲突。

--------------------------------------------------------------------------------

    根据以上的分析,解决这个问题的关键是,在调试器接管CPU核心的控制权之前,必须停止所有能够自动运行模块的操作,使它们处于关闭状态,要做到这一点,可以有以下几种方案:

    1. 每次退出调试状态时,先停止所有模块的运行,比如执行该模块的DeInit()操作。

    2. 在main()函数开始时,不管各模块处于什么状态,先执行该模块的DeInit()操作,然后在程序中较晚的时间或真正需要时再开启相应的模块。这样保证在刚进入调试状态时,调试器能够有充足的时间完成初始化和下载程序的操作。先执行该模块的DeInit()操作的目的是为了关闭哪些上一次操作开启的模块。

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

四、调试STM32程序时,某些标志位被调试软件意外清除的问题

    在调试的过程中,使用调试软件的寄存器或存储器显示窗口,可以很方便地查看外设寄存器的状态。

    很多朋友都碰到过这样的问题:在单步调试时始终不能在显示窗口看到某些标志位的变化,应该设置这些标志位的时候,窗口中却显示为0,不少人都错误地认为这是芯片的问题。

    我们知道,不少STM32外设的状态寄存器位,可以通过对某些寄存器的读操作而清除(例如I2C的I2C_SR1中的很多标志位),在调试过程中,每当程序停止在设置的断点或单步停止时,调试软件都会自动地读出所有指定的寄存器和存储器中的内容,并刷新窗口的显示,调试软件的这个读操作恰好清除了那些标志位,造成了上面描述的现象。

    有几个简单的办法解决这个问题:

  1. 关闭寄存器或存储器显示窗口。 
  2. 在寄存器或存储器显示窗口中不显示这些敏感的寄存器。 
  3. 不要把断点放在对这些敏感的寄存器位操作的前面,以保证这些寄存器位不被调试软件意外地操作。 
  4. 看官自己添加~~~~~

五、在使用STM32的外设时,由于IO口被用作复用功能,但是外设的初始化正确,GPIO口初始化正确,外设的时钟也已开启,但是外设无法正常运行

    其中最关键的一项,大多数使用者多没有设置,就是某个IO口被用作外设的接口时,需要开启IO口的复用功能的时钟,即进行外设、IO的时钟使能时,需要如下代码:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx | RCC_APB2Periph_AFIO, ENABLE);    /* GPIOx and AFIO clock enable */

x --- 为对应的GPIO口,如:A、B、C、D、E。

    在使用时,一定要注意该要点!




http://www.cnblogs.com/hnrainll/archive/2011/01/11/1933166.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keil IAR - Cortex M3 调试问题及解决方法(1) 的相关文章

  • 如何在 PhantomJS 中使用 JavaScript 检测网页上的声音?

    我需要检测带有横幅的网页中的所有声音 我怎样才能做到这一点 我查看 PhantomJS 但找不到浏览器声音的 API PhantomJS 1 x 和 2 不支持 Flash
  • 安全沙箱违规

    运行我的 Flash 应用程序时出现以下错误 违反安全沙箱 与 rtmp system ip live 的连接已停止 不允许从 file F Flash 工作 RTS RT vlab BIOTECH NEO 简单神经元的被动属性 vi 特征
  • 使用 Java 删除文件时出现问题 (apache commons io)

    我通过 JNI 调用 C 方法 该方法创建两个文件 给定目录中的文本日志文件和 pdf 文件 我想在执行 JNI 方法之前删除这些文件 如果存在 我正在使用 Apache commons io FileUtils forceDelete F
  • iPhone 上的 Flash(或 Silverlight)

    我对在 iPhone 上开发应用程序感兴趣 并且作为一名 NET 和 ActionScript 开发人员 我对 Objective C Cocoa Touch 编程的学习曲线有点害怕 我知道 Adob e 已经为 iPhone 准备好了 F
  • 求反射角的弧度

    我正在编写一个简单的 Flash 游戏 只是为了学习 Flash 并提高我的数学能力 但我对弧度感到非常困惑 因为这对我来说是新的 到目前为止 我所做的是使用鼠标 单击并释放 使用弧度向该方向射出一个球 现在我想要发生的是 当球撞到墙壁时
  • Adobe Flash 项目的版本控制

    我正在处理一个非常复杂的 Flash 项目 该项目是我们为客户使用而部署的全套服务的一部分 对于我们的大多数软件源 Java PHP Javascript HTML 和一些其他语言的支持脚本 我们使用 subversion 进行版本控制和管
  • 是否可以将 SpaCy 安装到 Raspberry Pi 4 Raspbian Buster

    我一整天都在安装 SpaCy sudo pip install U spacy Looking in indexes https pypi org simple https www piwheels org simple Collectin
  • java中filewriter的flush和close函数之间的区别

    我需要知道Java中的flush和close函数之间的确切区别是什么 当在写入文件期间将数据转储到文件中时 请提供一个例子 flush just确保所有缓冲数据都写入磁盘 在这种情况下 更一般地说 通过您正在使用的任何 IO 通道刷新 之后
  • Flex 与 ActionScript

    我正在尝试构建 实现一个 Flash 视频播放器来播放视频 我研究了 Flex 并仅使用 VideoElement 构建了一个基本应用程序 它在没有静态链接库的情况下编译为 41k 在链接库时编译为 300k 我生成了报告 但仍然不确定为什
  • 如何通过pthreads管理两个或多个消费者?

    我有一个正在寻求解决的通用问题 即从标准输入或常规文件流发送到应用程序的二进制数据块 应用程序又将二进制数据转换为文本 使用线程 我想在将文本传输到下一个应用程序之前对其进行处理 该应用程序会进一步修改该文本 依此类推 作为一个简单的测试用
  • Facebook 聊天在打开时隐藏 Flash 应用程序

    运行 Flash 应用程序时 如果我打开新的或现有的 Facebook 聊天窗口 我的 Flash 内容就会消失 我可以继续听到应用程序中播放的音乐 并且当我关闭 最小化 Facebook 聊天窗口时 我的 Flash 内容会重新出现 这是
  • java IO将一个文件复制到另一个文件

    我有两个 Java io File 对象 file1 和 file2 我想将 file1 的内容复制到 file2 有没有一种标准方法可以做到这一点 而无需我创建一个读取 file1 并写入 file2 的方法 不 没有内置方法可以做到这一
  • 在 Intel 机器上构建 Apple Silicon 二进制文件

    如何在 macOS 11 Intel 上编译 C 项目以在 Silicon 上运行 我当前的构建脚本很简单 configure make sudo make install 我尝试过使用 host and target标志与aarch64
  • Flash 未在调试播放器中显示错误/堆栈跟踪(firefox/chrome/whatnot)

    我正在尝试调试在线默默地失败的应用程序 我 100 确定我正在运行 Flash 调试播放器 为了确保我不会丢失它 我故意抛出一个错误 但 Flash 在浏览器中没有显示任何 stracktrace 我快要失去它了 有什么线索吗 我正在 ch
  • DS-5:什么是 FVP、RTSM、基础模型、AEM 模型、快速模型、CADI?

    DS 5 模拟器使用了很多术语 如 FVP RTSM 快速模型 基础模型 AEM 模型 CADI Arm的文档中提供的解释不是很清楚 这些术语的含义是什么 作为 DS 5 的最终用户我应该关心哪些术语 Model 软件模拟的行业术语 就 A
  • 正确地将 flash.utils.Dictionary 序列化为 SharedObject

    我的 Flex 项目中有一个名为 HashMap 的便利集合类 它本质上是 flash utils Dictionary 的包装器 带有一堆便利方法和添加的 同步的 ArrayCollection 以便我可以将 HashMap 传递给需要的
  • 了解 U-Boot 内存占用

    我不明白加载 U Boot 时 RAM 中发生了什么 我正在开发 Xilinx Zynq ZC702 评估套件 并尝试使用 U Boot 在其上加载 Linux 内核 于是我使用Xilinx工具Vivado和SDK生成了一个BOOT bin
  • Qemu flash 启动不起作用

    我有一本相当旧的 2009 年出版 嵌入式 ARM Linux 书 其中使用u boot and qemu 的用法qemu与u boot书中对二进制的解释如下 qemu system arm M connex pflash u boot b
  • 如何从标准输入读取一行,阻塞直到找到换行符?

    我试图从命令行的标准输入一次读取任意长度的一行 我不确定是否能够包含 GNU readline 并且更喜欢使用库函数 我读过的文档表明getline应该可以工作 但在我的实验中它不会阻塞 我的示例程序 include
  • Microsoft Surface 支持 Flash 网站吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我搜索过谷歌但没有找到明确的答案 我或我工作的 Flash 网站 应用程序可以在 Microsoft Surface 平板电脑上运行吗 看来微软 Su

随机推荐

  • 调试最长的一帧(第22天)

    先看看全流程 先抄一抄节点访问器NodeVisitor的工作原理 当我们执行节点的accept NodeVisitor nv 函数时 当前节点自动调哟个NodeVisitor apply方法 将自身的信息传递给节点访问器nv 由它负责执行相
  • python matplotlib.pyplot画图设置刻度

    https jingyan baidu com article 7e44095324e4062fc1e2ef76 html
  • Scheme 介绍

    最近一直在看 sicp 这本书 准备写点读书笔记 这篇当作是对 Scheme 语言的介绍 毕竟全书是用这门语言写的 下面是我对书中使用的 mit scheme 的一些理解 我没有正统学习过函数式或类 Lisp 语言 只有一些我自己在做这本书
  • Vision Transformer综述 总篇

    Vision Transformer综述 1 Transformer简介 2 Transformer组成 2 1 Self Attention Multi Head Attention 多头注意力 2 2 Transformer的其他关键概
  • Python时间序列统计模型自回归预测网络流量

    预测过程包括预测时间序列的未来值 或者通过仅基于其过去行为 自回归 对序列进行建模 或者通过使用其他外部变量来进行建模 本文档描述了如何使用机器学习和统计模型来预测访问网站的流量 使用自 2020 年 7 月 1 日起 查看网站的每日访问历
  • 五子棋AI算法简易实现(一)

    基础篇 1 胜负判定 五子棋的胜负判定的条件是其中一方下棋以后 横线 竖线 右上斜线或者右下斜线任一方向出现五子相连 即可判定获胜 此处用递归方法即可实现 var is win false var ModuleWinnerCheck che
  • 单链表的插入操作(全)

    1 在指定位序插入数据第一步 主要执行操作 查找 先查找所要插入位置的前一个元素 具体方法 根据链表的特点 每一个节点都需要一个数据域和指针域 所以只需从头节点遍历到所要插入数据的的前一个节点即可 后面的showList函数也用的这种方法第
  • SqlServer2019—解决SQL Server 无法连接127.0.0.1的问题

    1 打开SQL Server 2019配置管理器 2 SQL Servere 网络配置 启用 Named Pipes 和 TCP IP 3 修改TCP IP协议 右键选择属性 IP地址 具体如下图所示 4 重启SQL Server服务
  • C语言输出菱形

    C语言输出菱形 菱形 include
  • 栈的顺序表示

    栈底是表头 栈顶是表尾 只能在表尾插入和删除 栈的第一个元素放在下标为0的位置 虽然top指向栈顶元素 但为了方便 指向栈顶元素之上 即下一个元素的位置 stacksize栈的大小 用来表示我们当前分配的数组 我们用数组来存储栈 能存储多少
  • 聊聊什么是架构,你理解对了吗?

    什么是架构 软件有架构 建筑也有架构 它们有什么相同点和不同点 下面咱们就介绍一下 容易混淆的几个概念 一 系统与子系统 系统 泛指由一群有关联的个体组成 根据某种规则运作 能完成个别元件不能单独完成的工作的群体 它的意思是 总体 整体 或
  • C++中的单例模式

    单例模式也称为单件模式 单子模式 可能是使用最广泛的设计模式 其意图是保证一个类仅有一个实例 并提供一个访问它的全局访问点 该实例被所有程序模块共享 有很多地方需要这样的功能模块 如系统的日志输出 GUI应用必须是单鼠标 MODEM的联接需
  • 转载 ---kafka集群消费之ConsumerRecord类

    java lang Object继承 org apache kafka clients consumer ConsumerRecord
  • 次表面散射

    技术博客 https github com Li ZhuoHang Subsurface scattering 基于屏幕空间模糊的次表面散射 SSSSS 效果展示 原模型 开启镜面表面反射 float PHBeckmann float nd
  • Qt中定义全局变量方法

    在使用qt编程时经常要使用到全局变量 全局变量该如何去定义和初始化呢 有两种方式 第一种使用extern 关键字 global h extern int a global cpp static int a 1 myfile cpp incl
  • ..\OBJ\Template.axf: Error: L6218E: Undefined symbol FSMC_NORSRAMCmd (referred from lcd.o).

    面对这个问题 假如环境配置和一般代码上不出错出现的问题的话 那就是缺了下面这两个文件 剩下的我就继续一步一步操作 进行 下去 步骤1 步骤2 用直接右击FWLIB 中第三个选项Add Existing Files 步骤3 在FWLIB中找s
  • Web服务器群集:使用Haproxy搭建Web集群

    目录 一 理论 1 Haproxy集群 2 常见的web集群调度器 3 三种web集群调度器的区别 4 下载安装 二 部署Haproxy集群 1 部署 2 重新定义Haproxy集群的日志 三 实验 1 部署Haproxy集群 四 问题 1
  • 新手linux安装vasp_史上最简单的VASP安装教程-非虚拟机

    本文是针对vasp初学者的安装教程编译器以及VASP都已编译号直接解压到系统中即可用 故不用配置其它的库文件以及环境 本教程适用于任意平台安装centos7的服务器以及pc机 若在其它linux发行版本中安装请咨询小编 一 VASP安装需要
  • SecureCRT 5.0菜单栏消失

    今天遇到一个怪问题 SecureCRT的菜单栏突然没了 郁闷了很长时间 回头想想好像是在最小化的时候选了个什么 顺着这个思路 终于发现最小化窗口 在任务栏上的最小化的程序上点右键 呵呵 看到了 Always On Top Save Sett
  • Keil IAR - Cortex M3 调试问题及解决方法(1)

    看到一篇文章 转载如下 其实不光是STM32 其它芯片甚至其它的IDE 都可参考 STM32调试过程中常见的问题及解决方法 一 在 Debug选项卡 下设置好仿真器的类型后 下载程序时却提示 No ULINK Device found 解决