OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9902|回复: 10

输入捕获进入仿真停止在Default_Handler,特来请教!

[复制链接]

22

主题

181

帖子

0

精华

高级会员

Rank: 4

积分
878
金钱
878
注册时间
2014-7-7
在线时间
311 小时
发表于 2015-7-21 02:03:12 | 显示全部楼层 |阅读模式
5金钱
问题1:在做原子战舰V3的TIM5输入捕获实验,使用原子例程运行正常,就是板子接上串口,打开串口调试助手总会
进入booloader,需要关闭了串口工具,复位才能运行!
问题2:然而,学会了原子的思想,我就想自己来试验一下自己的写出代码,系统却无限进入Default_Handler,实在无语!
            已经辛苦跟原子的代码用beyond compare对比过,初始化,中断服务程序均无不同!下面贴出代码:

[mw_shl_code=c,true]static void tim5_cap_config( uint16_t hwARR, uint16_t hwPSC) { RCC->APB1ENR|=1<<3; //TIM5 时钟使能 RCC->APB2ENR|=1<<2; //使能PORTA时钟 GPIOA->CRL&=0XFFFFFFF0; //PA0 清除之前设置 GPIOA->CRL|=0X00000008; //PA0 输入 GPIOA->BRR|=1<<0; //PA0 下拉 TIM5->ARR=hwARR; //设定计数器自动重装值 TIM5->SC=hwPSC; //预分频器 TIM5->CCMR1|=1<<0; //CC1S=01 选择输入端 IC1映射到TI1上 TIM5->CCMR1|=0<<4; //IC1F=0000 配置输入滤波器 不滤波 TIM5->CCMR1|=0<<2; //IC2PS=00 配置输入分频,不分频 TIM5->CCER|=0<<1; //CC1P=0 上升沿捕获 TIM5->CCER|=1<<0; //CC1E=1 允许捕获计数器的值到捕获寄存器中 TIM5->DIER|=1<<1; //允许捕获中断 TIM5->DIER|=1<<0; //允许更新中断 TIM5->CR1|=0x01; //使能定时器2 }[/mw_shl_code]
一下是中断服务程序:
[mw_shl_code=c,true]//定时器5中断服务程序 void TIM5_ISRHandler(void) { u16 tsr; tsr=TIM5->SR; if((TIM5CH1_CAPTURE_STA&0X80)==0)//还未成功捕获 { if(tsr&0X01)//溢出 { if(TIM5CH1_CAPTURE_STA&0X40)//已经捕获到高电平了 { if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了 { TIM5CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次 TIM5CH1_CAPTURE_VAL=0XFFFF; }else TIM5CH1_CAPTURE_STA++; } } if(tsr&0x02)//捕获1发生捕获事件 { if(TIM5CH1_CAPTURE_STA&0X40) //捕获到一个下降沿 { TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次高电平脉宽 TIM5CH1_CAPTURE_VAL=TIM5->CCR1; //获取当前的捕获值. TIM5->CCER&=~(1<<1); //CC1P=0 设置为上升沿捕获 }else //还未开始,第一次捕获上升沿 { TIM5CH1_CAPTURE_STA=0; //清空 TIM5CH1_CAPTURE_VAL=0; TIM5CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿 TIM5->CNT=0; //计数器清空 TIM5->CCER|=1<<1; //CC1P=1 设置为下降沿捕获 } } } TIM5->SR=0;//清除中断标志位 }[/mw_shl_code]
已经检查过20遍以上,除了纠正了原子教程中的TIM5->CCMR1 |= 0《《10 《==》 TIM5->CCMR1 |= 0《《2;之外,无他异样,
程序中,有tim6(用作定时),tim3,使用通道PA7作PWM输出,tim5用作捕获。

个人是认为这种错误应该是指针指错地方而导致的,但是我这两个代码横竖看不出来问题!
故此,在此问下原子和各位伙伴!我该如何排查!下面传上我的代码工程:

CODE_V3.rar

198.58 KB, 下载次数: 689

最佳答案

查看完整内容[请看2#楼]

1,是串口助手的问题,用我们的XCOM即可。 2,应该还有哪里没设置好,仿真器跟踪代码,看看到哪里开始出问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-21 02:03:13 | 显示全部楼层
1,是串口助手的问题,用我们的XCOM即可。
2,应该还有哪里没设置好,仿真器跟踪代码,看看到哪里开始出问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-7-21 10:24:24 | 显示全部楼层



......
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

22

主题

181

帖子

0

精华

高级会员

Rank: 4

积分
878
金钱
878
注册时间
2014-7-7
在线时间
311 小时
 楼主| 发表于 2015-7-21 10:25:49 | 显示全部楼层
回复【2楼】龙之谷:
---------------------------------
语文差,别介意,我是一直当做:谦卑来请教的意思!!!
回复

使用道具 举报

22

主题

181

帖子

0

精华

高级会员

Rank: 4

积分
878
金钱
878
注册时间
2014-7-7
在线时间
311 小时
 楼主| 发表于 2015-7-22 03:26:03 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
串口助手好解决,主要是输入捕获,我怀疑到硬件上了,原因是:第二天继续调试这个捕获,但是却发现,用原子提供的例程,stm32也会进入default_handler
,软件上,IO口设置为输入下拉,NIVC设置TIM5_IRQn为0组,0抢占,0优先,溢出中断+捕获中断,这几处已经检查多次,所以在此恳请原子能给我拍几砖。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-22 23:05:34 | 显示全部楼层
回复【5楼】our单片机:
---------------------------------
default_handler 
是不是hardfault??
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

22

主题

181

帖子

0

精华

高级会员

Rank: 4

积分
878
金钱
878
注册时间
2014-7-7
在线时间
311 小时
 楼主| 发表于 2015-7-23 00:35:10 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
仿真的汇编里面是:default_handler,谢谢原子,我已经找到答案了,是低级问题,然后还有printf有问题
重定向的那个,函数前,没有类型,需要加个void
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle;
/* Whatever you require here. If the only file you are using is */
/* standard output using printf() for debugging, no file handling */
/* is required. */
};
/* FILE is typedef’ d in stdio.h. */
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x)
{
x = x;
}
回复

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-7-22
在线时间
5 小时
发表于 2015-7-23 08:44:05 | 显示全部楼层
http://www.openedv.com/posts/list/0/56096.htm#319033
学海无涯!沧海一粟!
回复

使用道具 举报

22

主题

181

帖子

0

精华

高级会员

Rank: 4

积分
878
金钱
878
注册时间
2014-7-7
在线时间
311 小时
 楼主| 发表于 2015-7-23 12:59:58 | 显示全部楼层
回复【8楼】一生永随wxg:
---------------------------------
谢谢,已经解决了!
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-4-26
在线时间
1 小时
发表于 2016-4-26 14:10:14 | 显示全部楼层
our单片机 发表于 2015-7-23 00:35
回复【6楼】正点原子:
---------------------------------
仿真的汇编里面是:default_handler,谢谢原子, ...

求问是如何解决的,我仿真一个自己的程序的时候,在一个很普通的赋值语句后面,跳到了启动文件里的default_handler死循环了

DMA1_Channel1_IRQHandler  
DMA1_Channel2_IRQHandler  
DMA1_Channel3_IRQHandler  
DMA1_Channel4_IRQHandler  
DMA1_Channel5_IRQHandler  
DMA1_Channel6_IRQHandler  
DMA1_Channel7_IRQHandler  
ADC1_2_IRQHandler         
USB_HP_CAN1_TX_IRQHandler
USB_LP_CAN1_RX0_IRQHandler
CAN1_RX1_IRQHandler      
CAN1_SCE_IRQHandler      
EXTI9_5_IRQHandler        
TIM1_BRK_IRQHandler      
TIM1_UP_IRQHandler        
TIM1_TRG_COM_IRQHandler   
TIM1_CC_IRQHandler        
TIM2_IRQHandler           
TIM3_IRQHandler           
TIM4_IRQHandler           
I2C1_EV_IRQHandler        
I2C1_ER_IRQHandler        
I2C2_EV_IRQHandler        
I2C2_ER_IRQHandler        
SPI1_IRQHandler           
SPI2_IRQHandler           
USART1_IRQHandler         
USART2_IRQHandler         
USART3_IRQHandler         
EXTI15_10_IRQHandler      
RTCAlarm_IRQHandler      
USBWakeUp_IRQHandler      
Default_Handler
        B Default_Handler

        END


跳到了     B Default_Handler处死循环了
回复

使用道具 举报

张大威2009 该用户已被删除
发表于 2017-2-24 14:19:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 16:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表