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

2019-08-17 01:11发布

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

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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
正点原子
1楼-- · 2019-08-17 06:02
 精彩回答 2  元偷偷看……
fanghaoxu
2楼-- · 2019-08-17 06:17
可能是有中断过来,但是你把中断屏蔽的,所以会卡在哪里。
1547674987
3楼-- · 2019-08-17 11:17
我之前遇到这个问题,是因为程序发生中断,中断向量表找不到对应的中断服务函数。你看下是不是有其他中断产生却没有相应的中断服务函数或则名字写错了(我之前就是某个串口中断服务函数名字写错了)。

一周热门 更多>