打印

用了定时器中断DA 不好用

[复制链接]
2523|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
定时器2 定时中断 配置正确,不开定时中断的情况下,单独开DA好用(普通方式和DMA方式都好用),但是当开定时中断时,不论是普通方式还是DMA方式的DA都不好用
以下是代码:
定时中断:
void Tim2_Init(void)
{
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);        //TIM2 clock enable
       
        NVIC_InitTypeDef NVIC_InitStructure;
          //Enable the TIM3 gloabal Interrupt
          NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          NVIC_Init(&NVIC_InitStructure);
         
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_TimeBaseStructure.TIM_Period = 1200;//50MS
        TIM_TimeBaseStructure.TIM_Prescaler = 9999;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        //此函数的语句"TIMx->EGR = TIM_PSCReloadMode_Immediate;"以软件方式产生更新事件(注:当发生一个更新事件时,
        //所有的寄存器都被更新,硬件同时(依据URS位)设置更新标志位(TIMx_SR寄存器中的UIF位))
        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
       
        TIM_ClearFlag(TIM2, TIM_FLAG_Update);        //清除更新标志位
        TIM_ARRPreloadConfig(TIM2, DISABLE);        //预装载寄存器的内容被立即传送到影子寄存器
       
        TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
        TIM_Cmd(TIM2, ENABLE);
}
DA:
void DAC2_DMA(void)
{
        GPIO_InitTypeDef                 GPIO_InitStructure;
        DAC_InitTypeDef                    DAC_InitStructure;
        DMA_InitTypeDef                    DMA_InitStructure;
       
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
          /* GPIOA Periph clock enable */
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
          /* DAC Periph clock enable */
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
          /* TIM6 Periph clock enable */
          RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);
         
          /* Once the DAC channel is enabled, the corresponding GPIO pin is automatically
             connected to the DAC converter. In order to avoid parasitic consumption,
             the GPIO pin should be configured in analog */
          GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
          GPIO_Init(GPIOA, &GPIO_InitStructure);
         
        /* TIM6 Configuration */
        TIM_PrescalerConfig(TIM7, 0xF, TIM_PSCReloadMode_Update);
        TIM_SetAutoreload(TIM7, 0xFF);
        /* TIM6 TRGO selection */
        TIM_SelectOutputTrigger(TIM7, TIM_TRGOSource_Update);
       
        /* DAC channel1 Configuration */
        DAC_InitStructure.DAC_Trigger = DAC_Trigger_T7_TRGO;
        DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
        DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
        DAC_Init(DAC_Channel_2, &DAC_InitStructure);
       
        /* DMA2 channel3 configuration */
        DMA_DeInit(DMA2_Channel4);
        DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR8R2_Address;
        DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&Escalator8bit;
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
        DMA_InitStructure.DMA_BufferSize = 6;
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
        DMA_InitStructure.DMA_Priority = DMA_Priority_High;
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
        DMA_Init(DMA2_Channel4, &DMA_InitStructure);
       
        /* Enable DMA2 Channel3 */
        DMA_Cmd(DMA2_Channel4, ENABLE);
       
        /* Enable DAC Channel1: Once the DAC channel1 is enabled, PA.04 is
           automatically connected to the DAC converter. */
        DAC_Cmd(DAC_Channel_2, ENABLE);
       
        /* Enable DMA for DAC Channel1 */
        DAC_DMACmd(DAC_Channel_2, ENABLE);
       
        /* TIM6 enable counter */
        TIM_Cmd(TIM7, ENABLE);
       
}
沙发
03024003|  楼主 | 2010-2-5 13:06 | 只看该作者
改用软件触发  好了

未命名.jpg (46.68 KB )

未命名.jpg

使用特权

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

本版积分规则

个人签名:--->

21

主题

125

帖子

0

粉丝