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

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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。