解决STM32调试,无法进入main函数的问题

发布者:science56最新更新时间:2015-10-21 来源: eefocus关键字:STM32调试  main函数 手机看文章 扫描二维码
随时随地手机看文章
昨天调试STM32程序,以前使用的是MDK3.40的版本,把版本升了下级,升到了MDK4.10,装好后,一运行,哈哈,新版本给人的感觉就是不一样啊,很爽,较之前有很多改进,把自己以前的程序打开,编译运行发现程序调试时无法进入Main函数,弄了很久,很是郁闷啊,最后还是在ourdev的坛子里,找到了同样问题的解决方法,多谢ourdev,以下是坛子里面的帖子,我把他贴出来了.
 
sdc666 :
请问高手,我在调试我的STM32F101c8t6时,遇到一个问题,因为我要调试串口,我在main.c中添加了#include  ,编译可以通过,但是当我用jlink硬件调试时,一开始就停在了 0x08001460 BEAB      BKPT     0xAB";并且无法向下运行.  请问高手,这个问题的原因是什么?怎么解决? 谢谢!      
          _sys_open: 
0x08001450 B50E      PUSH     {r1-r3,lr} 
0x08001452 E9CD0100  STRD     r0,r1,[sp,#0] 
0x08001456 F000FAF9  BL.W     strlen (0x08001A4C) 
0x0800145A 9002      STR      r0,[sp,#0x08] 
0x0800145C 4669      MOV      r1,sp 
0x0800145E 2001      MOVS     r0,#0x01 
0x08001460 BEAB      BKPT     0xAB 
0x08001462 BD0E      POP      {r1-r3,pc}
 
pldjn :
应该是项目设置的问题,检查一下你的设置.
 
sdc666:
pldjn 你好,能详细指点以下么?应该怎样设置?  这个程序是我该的,本来是没有#include ,我添加串口后因为需要标准库函数,所以才加上的. 是不是还要设置编译环境?  谢谢.
 
pldjn :
你用J-Flash打开你的HEX文件看看编译的是否是对的.不用自动下载使用J-flash烧进去调一下试试.
 
dragonwww:
我也遇到同样问题,我是调用printf时出现的这个错误,我已经把putchar重定位了,不知道为何还是出错,求解,THX!
 
yugen:
那是因为你使用了printf之类的库函数,需要编写_sys_exit()之类底层函数。照你的提示看,也许是_sys_open()没写。_sys_xxx之类的的只要写个空函数就行了。
 
dragonwww:
to yugen: 
    能否说的再仔细些,如果自己编写个空函数应该放在哪里?函数定义格式是什么样的呢? 
    纳闷的是以前也用过printf,没出现这个提示啊。
 
PZLPDY:
5楼的应该不是这样吧? 
应该是你没有选中微库造成的。这个问题昨天我遇到过。在工程的设置选项里把微库勾上就OK了
 
dragonwww:
to PZLPDY: 
   苍天啊,果然如你所说,把微库勾上就OK了,奇怪了为什么以前用的的时候没报错呢?以前也没选微库啊!
 
yugen:
因printf()之类的函数,使用了半主机模式。使用微库的话,不会使用半主机模式,所以就没有问题。 
添加下面代码,就可以使用标准库了: 
#pragma import(__use_no_semihosting) 
_sys_exit(int x) 

x; 

struct __FILE 

int handle; 
 
 
 
}; 
 
FILE __stdout;
 
dragonwww:
yugen是高手啊,再请教一下: 
1.何为“半主机模式”?与 非半主机模式有何区别? 
2.你的这段代码需要放在那个文件里?自己的main函数所在的文件吗? 
3.看到代码实现了_sys_exit,那我提示错误的_sys_open()不用实现吗? 
请指教,多谢!
 
yugen:
你说的问题都可以在"RealView? 编译工具库和浮点支持指南"书中找到,网上有下,我就不复制了。书有中文的。realview编译器有好几本书,都有中文。
关键字:STM32调试  main函数 引用地址:解决STM32调试,无法进入main函数的问题

上一篇:STM32出现HardFault_Handler故障
下一篇:STM23模拟I2C读写

推荐阅读最新更新时间:2024-03-16 14:36

STM32开发板JLINK调试步骤
STM32调试步骤 调试前,首先跳线J9的2-3脚短接,跳线J4的右边两个脚短接,跳线J5短接,J8短接,J2的1-2短接,3-4短接。 将Jlink与学习板,USB延长线与学习板,串口延长线与学习板(或者USB转串口线与学习板)连接起来, 这时LED灯LED5,LED6都应该点亮,如果不亮,说明板子有问题。 打开串口助手,按照如下设置: 1、从桌面打开J-Flash ARM V4.02如图所示。 也可以按照如下顺序打开J-Flash ARM 。 “开始à程序àSEGGERàJ-Link ARM V4.02àJ-Flash ARM”,如下图所示。 2、打开J-Flash ARM后,先进行芯片选项设置,打开Optio
[单片机]
STM32小问题-复用调试接口JTAG/SWD为普通GPIO
这几天做毕业设计,按键模块用到了PA14和PA15这两个IO口(由于IO是引出到拓展板上,所以刚开始并不知道PA14和PA15是被调试接口占用了)。设置好相应的寄存器后发现只有PA15正常按下能被拉低,而PA14用万用表检测始终处于低电平状态。刚开始我以为这个管脚坏了,就想着设置成输出高电平试试,结果可想而知,查看手册后发现在在复位后JTAG接口的PA14被设置为下拉了,所以按键读回来的永远是低电平。 后来发现核心板上PA15引脚连接到了JTAG接口就想能不能通过复用把这几个口解放出来,毕竟在正常应用中调试接口是不工作的,还不如利用起来(其实是我懒得再改板子PCB了),后来查看手册发现真的可以复用起来。 手册描述如下 手册
[单片机]
STM32 SPI调试之HAL库的调试
uint8_t aTxBuffer __attribute__((at(0x20000200))) = {0xaa, 0x00, 0x00}; 在没有上面的__attribute__((at(0x20000200))的时候,程序会进入Hardfault,进入的原因是程序不能从奇地址读取数据。 这个原因非常难找,我也是无语。对其的原因 API在中断里和应用程序里不同同时使用,否则会陷入死机。 中断和应用程序不能用同一资源。 void SPI_RF_WriteByte(uint8_t *WriteBuff, uint16_t Size) { HAL_StatusTypeDef status = HAL_ERROR; //
[单片机]
stm32怎么用keil软件进行调试
在做开发的前几年,基本上都没用仿真,有bug就尝试改程序,一边改一边调试。 甚至都还不知道硬件仿真存在的价值,因为一直都没用过,而且很多芯片也不支持。 直到有一次在做行车记录仪项目的时候,接触到了GRAIN公司的一款单片机。 本来我打算是直接开干的,但是老大非要我把这个芯片的仿真环境搭好。 于是我就开始网上搜集资料,不得不说这块的资料真少,那时又刚接触仿真这块的。 搞了将近半个月都搞不定,然后我鼓起勇气跟老大说,仿真搞不出来,要不我就直接开始写程序烧录进去调试算了。 但是老大的意思还是希望我把仿真的环境搭建出来,我又试了2个星期,还是不行,于是就不理他了,直接开始写程序调试。 如果没浪费时间研究怎么搭建仿环境,估计我程序都完成40
[单片机]
浅析STM32调试过程中的几个相关问题
总的来讲,单片机调试是单片机开发工作必不可少的环节。不管你愿不愿意,调试过程中总会有各种不期而遇的问题出现在我们面前来磨砺我们。这里分享几点STM32调试过程中与开发工具及IDE有关的几个常见问题,以供参考。 1、做低功耗调试时连接不上目标板 默认情况下,当MCU进入低功耗模式后,内核时钟停止工作,调试连接将中断。不过,通过设置DBGMCU寄存器控制位,即使进入低功耗模式,还是可以进行一定程度的调试。 在保证DGBMCU控制位正确配置前提下,还需注意SWD调试脚没有被配置为【analog state】模拟输入状态。我们在具体应用时为了降低功耗可能会将芯片的包括SWD调试脚在内的GPIO配置为模拟功能,这样会到导致调试器连接不上
[单片机]
浅析<font color='red'>STM32</font><font color='red'>调试</font>过程中的几个相关问题
STM32 jtag调试程序时程序跑飞
开发环境:keil MDK V5.10 操作系统:windows 7(32位) 目标硬件:STM32F103C8 问题描述:在使用jtag对某软件进行调试的时候,KEIL可以正常的进行软件下载,一旦使用F5全速运行时,立即发现程序跑飞了,暂停后汇编代码显示“MOVS R0 R0”。程序跑飞的时候可以看到目标设备程序执行过程正常(灯正常闪烁,串口调试信息正常输出)。 问题原因:芯片的JTAG引脚被复用,在程序初始化阶段将JTAG引脚remap为了普通的IO引脚导致。 PS:在使用JTAG进行程序调试的时候,如果程序中开了看门狗,调试程序进行了单步调试的情况也可能导致JTAG无法正常使用,因为目标设备的看门狗不能因为单步执行
[单片机]
stm32的串口调试卡死问题
且看这次出现的bug是一直等待, while(USART_GetFlagStatus(USE_Usart,USART_FLAG_TC)==RESET); 这个有很多说法 不过本人处理的方法是加入了一个一行代码就好了 NVIC_SetVectorTable(NVIC_VectTab_FLASH,0);
[单片机]
MCU 是如何从上电复位运行到 main 函数的?
前言 在笔者的上一篇文章中《中断服务子程序是如何被执行的》,详细阐述了中断响应以及执行的整个过程,其中涉及到关于中断向量表的相关知识,本篇文章再次以中断向量表为出发点阐述上电复位的整个过程。 复位的相关概念 复位就类似于我们的个人 PC 重启一样,又比 PC 的重启要简单一些。引起复位的原因也是多种多样,笔者在这里大致列出以下几种: 上电复位,也就是我们给我们的 MCU 通电后,其实也是一次复位的过程。 外部产生的手动复位信号,这个也比较常见,我们在平时学习所使用的开发板中就存在一个复位的按键,来实现手动的复位信号。 执行复位指令引发的复位 看门狗复位 。。。。。。 上述所示的复位虽然引起复位的原因各不相同,但是其复位的过
[单片机]
MCU 是如何从上电复位运行到 <font color='red'>main</font> <font color='red'>函数</font>的?
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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