[STM8] STM8S的AD开启后再关闭就开不了

[复制链接]
5328|5
 楼主| figo20042005 发表于 2013-6-17 10:20 | 显示全部楼层 |阅读模式
MCU是STM8S105S4,现在我在PWM定时器1中断里采集AD值,只有开关信号开了才采集和开启下一次转换,如果开关关了就不进行下次开启,AD中断里关AD清标志。结果开关关了后再开,结果AD就不会启动了,求高手指点下。以下是程序:
void init_AD(void)
{
   ADC1_DeInit();
   ADC1_ClearITPendingBit(ADC1_IT_EOC);
   ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_4, ADC1_PRESSEL_FCPU_D18, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL0, DISABLE);
   //单次转换,通道4,18分频,右对齐,施密特关闭,外部触发关闭
   ADC1_ScanModeCmd(DISABLE);
   ADC1_DataBufferCmd(DISABLE);
   ADC1_ITConfig(ADC1_IT_EOCIE, ENABLE);    //转换完成中断
}

#pragma vector=0xD
__interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void)
{
    u8 k;
    TIM1_ClearITPendingBit(TIM1_IT_UPDATE);
  //  GPIO_WriteHigh(PC_PORT,LED_RED_PIN);
    if(powerflag==2)
    {
       get_AD();
      accspeed_control();
      speed_deal();
      current_deal();
      DUTY_change();
     ADC1_StartConversion();
     for(k=40;k>0;k--);
     ADC1_StartConversion();   
    }  
}

#pragma vector=0x18
__interrupt void ADC1_IRQHandler(void)
{   
   //GPIO_WriteHigh(PC_PORT,LED_RED_PIN);
   ADC1_Cmd(DISABLE);
   ADC1_ClearITPendingBit(ADC1_IT_EOC);
   finishflag=1;
}
金融小数 发表于 2013-6-17 16:16 | 显示全部楼层
结果开关关了后再开,结果AD就不会启动了?

你在哪里再打开的?
你在Timer里面
ADC1_StartConversion();
      for(k=40;k>0;k--);
ADC1_StartConversion();   
连续两次转换?第一次转换完了,你就关了AD,第二次算怎么回事?
sun1238898 发表于 2013-6-17 17:28 | 显示全部楼层
那我推荐你用触发的方式,你可以先不用定时器的方式进行ADC采集。你可以先用一般的方法测试单次转换。
确保自己的代码无误。一般单片机支持触发的方式进行采集,这样子你就可以不用软件去开启,直接硬件搞定,即可。
hkcj 发表于 2013-6-17 20:37 | 显示全部楼层
中断标志位没有及时清除吧   楼主   有可能是这个问题
abbywang 发表于 2013-6-17 21:57 | 显示全部楼层
用DMA处理是很方便的!!
 楼主| figo20042005 发表于 2013-6-18 09:22 | 显示全部楼层
我这是电机控制的,最好是在PWM中断里进行,TIMER1就是配置的PWM中断,我最后直接在关机信号里关掉了全局中断结果是正确的,这样AD也不会再开启了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:need to study

16

主题

1576

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部