stm32在调试过程中常见问题及解决办法

发布者:幸福的老农最新更新时间:2017-10-25 来源: eefocus关键字:STM32  调试过程 手机看文章 扫描二维码
随时随地手机看文章

STM32调试过程中常见的问题及解决方法 一、 在“Debug选项卡”下设置好仿真器的类型后,下载程序时却提示“No ULINK Device found.”

解决办法: Keil MDK默认使用ULINK仿真器下载程序,在“Project --->Option for Target 'xxx' --->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全部添加到工程即可。

三、调试器不能连接到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);

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

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

六、用JLINK下载完程序后,程序开始运行并在“Build Output”栏多出如下信息:

* JLink Info: Found SWD-DP with ID 0x1BA01477
* JLink Info: TPIU fitted.
* JLink Info: ETM fitted.
* JLink Info: FPUnit: 6 code (BP) slots and 2 literal slots
Application running ...

在“Project --->Option for Target 'xxx' --->Utilities--->Settings”下,去掉“Reset and Run”复选框即可
STM32微控制器系列--常见问题
(1) 已经发表的有关STM32的技术资料有哪些?
(2) STM32的数据手册和技术参考手册有什么分别?
(3) STM32有几种封装形式?是否符合RoHS的要求?
(4) 有哪些开发工具可以用于STM32的开发?
(5) 是否有简易的方法下载程序代码到STM32的内部Flash?
(6) 哪里有STM32上各种外设的使用例程和编程资料?

STM32微控制器系列--常见问题解答
(1) 已经发表的有关STM32的技术资料有哪些?
已经发表的有关STM32的技术资料有以下一些:
STM32F103xx增强型系列数据手册 英文下载 中文下载
STM32F101xx基本型系列数据手册 英文下载 中文下载
STM32F10xxx技术参考手册 英文下载 中文下载
STM32F10x闪存编程手册 英文下载 中文下载
近20篇STM32应用笔记 STM32应用笔记汇总
STM32选型手册 英文下载
STM32的函数库和演示程序:包括函数库、USB开发套件、评估板程序和Flash Loader等 点击这里浏览下载


(2) STM32的数据手册和技术参考手册有什么分别?
有关STM32的性能参数和使用方式的技术资料主要有两类,一类称为数据手册,另一类称为技术参考手册或简称参考手册。
数据手册是有关产品技术特征的基本描述,包含产品的基本配置(如内置Flash和RAM的容量、外设的数量等),管脚的数量和分配,电气特性,封装信息,和定购代码等。
技术参考手册是有关如何使用该产品的具体信息,包含各个功能模块的内部结构、所有可能的功能描述、各种工作模式的使用和寄存器配置等详细信息。
通常在芯片选型的初期,首先要看数据手册以评估该产品是否能够满足设计上的功能需求; 在基本选定所需产品后,需要察看技术参考手册以确定各功能模块的工作模式是否符合要求;在确定选型进入编程设计阶段时,需要详细阅读技术参考手册获知各项功能的具体实现方式和寄存器的配置使用。 在设计硬件时还需参考数据手册以获得电压、电流、管脚分配、驱动能力等信息。
 
(3) STM32有几种封装形式?是否符合RoHS的要求?
STM32产品系列目前有5种封装形式,它们分别为:
封装名称 管脚数目 管脚间距(mm) 封装尺寸(mm)
LxWxH
VFQFPN36 36 0.5 6x6x0.9
LQFP48 48 0.5 9x9x1.5
LQFP64 64 0.5 12x12x1.5
LQFP100 100 0.5 16x16x1.5
LFBGA100 100 0.8 10x10x1.5
所有上述封装形式均为ECOPACK?封装并符合RoHS的要求。ECOPACK是ST的注册商标,详情请见ST的网站。
 
(4) 有哪些开发工具可以用于STM32的开发?
点击这里查看ST网站上有关STM32开发工具的中文介绍。
这篇简介文章--《STM32F10x开发调试工具一览》--包含了在中国获得STM32工具的信息。
 
(5) 是否有简易的方法下载程序代码到STM32的内部Flash?
所有STM32产品都内置一个系统存储区,用于放置一段程序,这段程序可以通过STM32的USART1接口接收命令,并执行对内部Flash的擦除和烧写等操作。这段程序可以通过设置芯片上相应管脚(BOOT1和BOOT0)的状态,在芯片复位后进入。
因为这段程序的功能是在芯片启动后通过USART加载程序到内置Flash存储器,所以称其为Flash Loader。所有STM32产品在出厂时都已预置了Flash Loader,用户只能通过设置BOOT1和BOOT0来使用它,而没有办法擦除或修改它。
使用Flash Loader的方法,请参考下述文件:
应用笔记: STM32F101xx 和 STM32F103xx系统存储器启动模式
Windows演示软件: STM32F101系列 和 STM32F103系列 Flash加载程序演示
演示软件使用手册: STM32F101系列 和 STM32F103系列 Flash加载程序演示
STM32中的Flash Loader使用USART1做为通信端口,它使用8个数据位、1个停止位和偶校验,具有自动波特率检测功能。
 
(6) 哪里有STM32上各种外设的使用例程和编程资料?
STM32的函数库中包含了许多例程,函数库和使用例程可以在ST的网站上免费下载。所有函数库和使用例程均提供C源程序,用户可以应用在任何的开发环境下。 说明文档 程序包
在ST的网站上可以免费下载“STM32 USB开发套件”。 说明文档 程序包
在ST的网站上可以免费下载“STM3210B-EVAL评估板软件”。 说明文档 程序包
在ST的网站上可以免费下载近20篇STM32应用笔记。 STM32应用笔记汇总
STM32F107系列http://www.y-ec.com/cpcp/class/?34.html
STM32F2系列http://www.y-ec.com/cpcp/class/?35.html
STM32F4系列http://www.y-ec.com/cpcp/class/?36.html

关键字:STM32  调试过程 引用地址:stm32在调试过程中常见问题及解决办法

上一篇:STM32启动文件简单分析
下一篇:stm32掉电前的数据存储到flash

推荐阅读最新更新时间:2024-03-16 15:41

一种电动栏杆机控制器的设计与实现
  1.引言   电动栏杆机是机电一体化设备,不仅应用于公路、桥梁和口岸,同时也广泛使用在各种场区的禁行管理场合。电动栏杆系统设计的技术水平对产品的功耗、寿命及可靠性影响很大。目前我国的高速公路收费站内每一条车道都配置一台电动栏杆机。电动栏杆的快速与稳定运行对车辆快速通过收费站有着非常重要的意义。   传统的电动栏杆机大多采用继电器控制带有大减速比减速异步电机的结构形式,大多数电动栏杆需要与上位机联网,由上位机发出控制指令,通过计算机内的接口卡控制栏杆机的起停,并检测安装在电动栏杆机上的行程开关来控制抬起与落下的行程。由于计算机的不稳定性与系统不可靠性,使得电动栏杆机的可靠性降低,电动栏杆机故障引起的高速公路车流不畅屡见不鲜。
[单片机]
一种电动栏杆机控制器的设计与实现
stm32成长记之滴答时钟
SysTick具体操作可参照: http://www.st.com/content/ccc/resource/technical/document/programming_manual/5b/ca/8d/83/56/7f/40/08/CD00228163.pdf/files/CD00228163.pdf/jcr:content/translations/en.CD00228163.pdf The system timer, SysTick, is a 24-bit count-down timer. Use this as a Real TimeOperating System (RTOS) tick timer or a
[单片机]
<font color='red'>stm32</font>成长记之滴答时钟
STM32库函数SystemInit()的理解
SystemInit()这个函数出现在main()函数的第一行,可以看出它的重要性。以前关于SystemInit()这个函数从来没有关心过,只知道这是进行 STM32 系统初始化的一个函数。今天决定仔细看看,重新开始STM32的学习。这个函数在system_stm32f10x.c中,此C文件主要就是干具体硬件配置相关的工作。 void SystemInit (void) { RCC- CR |= (uint32_t)0x00000001; #ifndef STM32F10X_CL RCC- CFGR &= (uint32_t)0xF8FF0000; #else RCC- CFGR &= (uint32_
[单片机]
基于STM32单片机的功能及特点
为什么要学STM32? STM32是32位的单片机却只要八位单片机的价格,速度也是八位的好几倍。 更重要的是它作为ARM入门级的芯片比较容易掌握,网上资料也很多,很多人都在用。 STM32的IO端口有7个寄存器来控制,但是我们常用的就4个CRL CRH IDR ODR 。 端口配置低寄存器(GPIOx_CRL) 端口配置高寄存器(GPIOx_CRH) 端口输入数据寄存器(GPIOx_IDR) 端口输出数据寄存器(GPIOx_ODR) 其中CRL 控制高8位的 IO CRH 低8这两个实质是一样的。 对照我们AVR来看GPIOx_CRL就相当于DDRx ,GPIOx_ODR就相当于PORTx,GPIOx_ODR就
[单片机]
基于<font color='red'>STM32</font>单片机的功能及特点
STM32串口发送数据第一个字节丢失问题
STM32串口发送必须先检测状态,否则第一个字节无法发出,发送完毕,必须检测发送状态是否完成,否则,发送不成功,使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01 0x02 0x03 0x04..接收端收到的数据为:0x02 0x03 0x04,第一个数据丢失。换成发送别的数值的数据,如0x06 0x0ff,则接收到0x0ff,0x06丢失。错误依旧。 故障排除过程: 1、刚开始怀疑是接收端的错误,我是使用电脑串口,运行串口辅助调试工具接收,换成其他软件后,发现故障依旧,而且电脑软件一直是开启状态,不像和电脑软件有关。 2、使用单步调试,单步运行各个发送指令,都正常。能收到0x01
[单片机]
初学STM32对AFIO的简单理解
在配置PC13引脚的外部线中断时,配置其外挂时钟时用到了复用功能: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE); 原因是PC13的第一功能引脚是GPIO,第二功能引脚是TAMER-RTC1,并没有EXTI的功能,要想用它产生外部线中断,必须配置AFIO复用功能,将EXTI功能映射到PC13引脚上。 PC13引脚功能图 又例: CAN总线用到了PB8、PB9,而这两个引脚本身没有CAN功能,需要重映射: RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIO
[单片机]
ADC模数转换+实验
ADC概述: Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。 典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。 STM32F10x ADC特点: 12位逐次逼近型的模拟数字转换器。 最多带3个ADC控制器 最多支持18个通道,可最多测量16个外部和2个内部信号源。 支持单次和连续转换模式 转换结束,注入转换结束,和发生模拟看门狗事件时产生中断。 通道0到通道n的自动扫描模式 自动校准 采样间隔可以按通道编程 规则通道和注入通道均有外部触发选项 转换结果支持左对齐或右对齐方式存储在16位数据寄存器 ADC转换
[单片机]
ADC模数转换+实验
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved