请大神指教: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)
{
..........
}
[解决办法]
我想会不会是开编译优化了,令编译器为了编译出优化度更高的程序,就会把一些常用变量放到寄存器中,下次使用该变量的时候就直接从寄存器中取,而不再访问内存