首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请大神赐教:stm32单片机编程采样数据,主函数中while等待采样结束,但是采样结束后在while处执行不下去,是什么原因呢

2013-08-09 
请大神指教:stm32单片机编程采样数据,主函数中while等待采样结束,但是采样结束后在while处执行不下去,是什

请大神指教:stm32单片机编程采样数据,主函数中while等待采样结束,但是采样结束后在while处执行不下去,是什么原因呢?
请大神指教:
ADC_SoftwareStartConvCmd(ADC1, ENABLE);         //ADC1转换启动
TIM_Cmd(TIM2, ENABLE);                          //开启定时器

while(!STOP);
for(i=0;i<2000;i++)   //数据平滑

利用stm32开发板(单片机型号为stm32f103vet6)新做了一个AD采样程序,开发环境为MDK5.4;主要是通过定时器定时每隔一段时间进入一次中断,读取一次采样的数据并计数,当进入一定次数中断后,STOP指令置1;关闭定时器。为什么明明通过观察变量STOP变为1了,但是while循环还是执行不下去呢?可能原因有哪些?下面是中断函数:
ADC设置为单次转换。
void TIM2_IRQHandler(void)
{
  if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )  
  { 
      TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);   //清除中断标志位 

      /*等待ADC转换结束*/ 
      while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)== RESET);    
      ADC_Data[Sample_Count]=ADC_GetConversionValue(ADC1);
             
      ADC_ClearFlag(ADC1, ADC_FLAG_EOC);        
      ADC_SoftwareStartConvCmd(ADC1, ENABLE);

      Sample_Count++;  
      if (Sample_Count >= 2000)
      {
         Sample_Count=0;
         TIM_Cmd(TIM2,DISABLE);   //关闭定时器  
         STOP = 1 ; 
      }             
  }
} while死循环 stm32单片机编程 AD采样
[解决办法]
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)== RESET);    
change to
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)== RESET)


{
..........
}
[解决办法]
我想会不会是开编译优化了,令编译器为了编译出优化度更高的程序,就会把一些常用变量放到寄存器中,下次使用该变量的时候就直接从寄存器中取,而不再访问内存

热点排行