打印
[STM8]

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

[复制链接]
4960|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 | 只看该作者
中断标志位没有及时清除吧   楼主   有可能是这个问题

使用特权

评论回复
5
abbywang| | 2013-6-17 21:57 | 只看该作者
用DMA处理是很方便的!!

使用特权

评论回复
6
figo20042005|  楼主 | 2013-6-18 09:22 | 只看该作者
我这是电机控制的,最好是在PWM中断里进行,TIMER1就是配置的PWM中断,我最后直接在关机信号里关掉了全局中断结果是正确的,这样AD也不会再开启了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:need to study

16

主题

1576

帖子

3

粉丝