OpenEdv-开源电子网

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

STM32 运行死机, 程序停止在 启动文件 B ENDP ALIGN,固定驱动波形怎么才不受影响,

[复制链接]

32

主题

284

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1343
金钱
1343
注册时间
2014-3-27
在线时间
354 小时
发表于 2016-5-13 11:01:21 | 显示全部楼层 |阅读模式
3金钱
MCU 是STM32F103CBT6  用了两个定时器3和4中断,
        部分主函数:
        TIM4_Int_Init(499,7199);//50MS
        TIM3_Int_Init(4999,7199);//500MS       
        NVIC_Configuration();//定时器3优先级高于定时器4
        Timersys.TIM4RespFlag=0;
        while(1)
        {
        HEF4053_CTRL();                //固定的脉冲波形 周期为1S ,为器件驱动波形,不能更改。
//但HEF4053_CTRL()函数放在哪里都会受影响,放主函数中受代码执行时间影响,导致波形高低电平时间变化,或导致周期发生变化。
//放定时器中断内部,也会受影响,不知怎么解决。是不是有专门的系统定时器可以来做这项工作。
        if(Timersys.TIM4RespFlag)//定时器4 标志位
                {       
                        //TIM_ITConfig(TIM4,TIM_IT_Update,DISABLE );                                                                       
                        USART3_Send_Str(PMdata, 61);//485发送    PMdata为传感器数据,   而传感器数据获取  均放置在  定时器中断3或4中了。不知是否可靠。
                        Timersys.TIM4RespFlag=0;
                        //TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE );
                       
                }
        }

}

//定时器3中断
void TIM3_IRQHandler(void)   //TIM3    溢出时间, 50MS
{
       
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //
                {
                        TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );                
                        Timersys.TIM3systick++;
                        if(Timersys.TIM3systick>2)//
                        {       
                                TransPMDatatoStr(PMdata);                //传感器数据转为ASCII                                
                                Timersys.TIM3systick=0;       
                                //return;       
                        }
                }
}

void TIM4_IRQHandler(void)   
{
        static float TempDOval;
        uint8_t i;
        if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)  //
                {
                        TIM_ClearITPendingBit(TIM4, TIM_IT_Update  );  //
                        Timersys.TIM4systick++;
                        if(Timersys.TIM4systick==10)
                        {
                                Timersys.TIM4systick=0;
                                ADS_DATA.TMdataVal=Get_DO_Average(2);//获取传感器数据
                                TemperatureData=DS18B20_Get_Temp();//获取传感器数据
                                Timersys.TIM4RespFlag=1;//标志置1
                        }
       
                }
}



整个程序的流程是,主函数中HEF4053_CTRL()为器件驱动波形,

定时器4  中断内获取 传感器数据,   定时器3 把传感器数据转为ASCII,  再在主函数中发送出去。
但有时串口发送一段时间后,会中止发送。
发现程序停止在 启动文件 startup_stm32f10x_md.s的

                B       .//这个位置

                ENDP

                ALIGN

暂时没有解决,请各位大神分享经验。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165359
金钱
165359
注册时间
2010-12-1
在线时间
2110 小时
发表于 2016-5-13 21:08:32 | 显示全部楼层
实现一下hard fault的中断服务函数,看看是不是跑到hard fault里面去了
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2017-1-11
在线时间
11 小时
发表于 2017-1-11 17:31:20 | 显示全部楼层
可能是有中断过来,但是你把中断屏蔽的,所以会卡在哪里。
回复

使用道具 举报

23

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2305
金钱
2305
注册时间
2017-7-6
在线时间
280 小时
发表于 2017-7-13 10:32:46 | 显示全部楼层
我之前遇到这个问题,是因为程序发生中断,中断向量表找不到对应的中断服务函数。你看下是不是有其他中断产生却没有相应的中断服务函数或则名字写错了(我之前就是某个串口中断服务函数名字写错了)。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-12-18 16:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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