找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2077|回復: 1
收起左側

STM8L151配置定時器2觸發(fā)AD采樣,DMA傳輸,但目前怎么也進不了DMA中斷

[復制鏈接]
ID:169891 發(fā)表于 2021-7-22 17:05 | 顯示全部樓層 |閱讀模式
void Timer2_Config_Init(void)
{
    CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE);  //時鐘配置
    TIM2_DeInit();
    TIM2_TimeBaseInit(TIM2_Prescaler_1, TIM2_CounterMode_Up,16*624); //1分頻,向上計數,每625us定時中斷一次     
    TIM2_ARRPreloadConfig(ENABLE);
//    TIM2_SelectOutputTrigger(TIM2_TRGOSource_Update);
//    TIM2_SelectOutputTrigger(TIM2_TRGOSource_Enable);
//   TIM2_ITConfig(TIM2_IT_Update , ENABLE);
    TIM2_ITConfig(TIM2_IT_Update , DISABLE);
}


void Ad_Config_Init(void)
{
    ADC_DeInit(ADC1);
    CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);//打開ADC1外設的時鐘
    GPIO_Init(GPIOA, GPIO_Pin_6, GPIO_Mode_In_FL_No_IT);//電源
    GPIO_Init(GPIOB, GPIO_Pin_0, GPIO_Mode_In_FL_No_IT);//電流采樣
    GPIO_Init(GPIOB, GPIO_Pin_1, GPIO_Mode_In_FL_No_IT);//參考電壓采樣
    delay_us(20);
    ADC_Init(ADC1, ADC_ConversionMode_Single, ADC_Resolution_12Bit, ADC_Prescaler_1);//初始化ADC1,模式,12位分辨率,ADC時鐘1分頻
    ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);//配置ADC采樣時間,384個時鐘周期
    ADC_VrefintCmd(DISABLE); //禁止內部電壓基準源
    ADC_ITConfig(ADC1, ADC_IT_EOC, DISABLE);

    ADC_DMACmd(ADC1, ENABLE);
    ADC_Cmd(ADC1,ENABLE); //使能ADC1     
    ADC_ChannelCmd(ADC1, ADC_Channel_0, ENABLE);//打開ADC1的0通道
    ADC_ChannelCmd(ADC1, ADC_Channel_17, ENABLE);//打開ADC1的17通道
    ADC_ChannelCmd(ADC1, ADC_Channel_18, ENABLE);//打開ADC1的18通道        
}


#define ADC1_DR_ADDRESS        ((uint16_t)0x5344)
#define BUFFER_SIZE            ((uint8_t) 0x03)
#define BUFFER_ADDRESS         ( (uint32_t)(&Buffer))
uint16_t Buffer[3];

void DMA1_Config_Init(void)
{
    CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);  
    DMA_DeInit(DMA1_Channel0);
    DMA_GlobalDeInit();
    SYSCFG_REMAPDMAChannelConfig(REMAP_DMA1Channel_ADC1ToChannel0);
    DMA_Init(DMA1_Channel0,
             BUFFER_ADDRESS,//緩沖區(qū)地址
             ADC1_DR_ADDRESS,//ADC數據寄存器地址
             BUFFER_SIZE,//緩沖區(qū)大小
             DMA_DIR_PeripheralToMemory,//外設到內存
             DMA_Mode_Circular,//循環(huán)轉換
             DMA_MemoryIncMode_Inc,//內存地址自增
             DMA_Priority_High,//優(yōu)先級為高
             DMA_MemoryDataSize_HalfWord );//內存數據是半字位寬

    DMA_SetCurrDataCounter(DMA1_Channel0,BUFFER_SIZE);//設置轉速的數據個數
    DMA_Cmd(DMA1_Channel0, ENABLE);                                   //DMA Channel0 enable
    DMA_ITConfig(DMA1_Channel0, DMA_ITx_TC, ENABLE);                  // Enable DMA1 channel0 Transfer complete interrupt
    DMA_GlobalCmd(ENABLE);                                            //DMA enable
}



INTERRUPT_HANDLER(DMA1_CHANNEL0_1_IRQHandler,2)
{
    unsigned char i=0;
//    ADC_Cmd(ADC1,DISABLE);
    if(DMA_GetFlagStatus(DMA1_FLAG_TC0)!= RESET)
    {
    }
    DMA_ClearITPendingBit(DMA1_IT_TC0);
}



INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_USART2_TX_IRQHandler,19)
{
    if(flg==0)
    {
        Vcc_Swich_On;
        flg=1;
    }
    else
    {
        Vcc_Swich_Off;
        flg=0;
    }
    TIM2_ClearITPendingBit(TIM2_IT_Update);
}

void Time_Adc_Dma_Init(void)
{
    Timer2_Config_Init();
    Ad_Config_Init();
    DMA1_Config_Init();

    ADC_ExternalTrigConfig(ADC1,ADC_ExtEventSelection_Trigger2,ADC_ExtTRGSensitivity_Falling);
    TIM2_SelectOutputTrigger(TIM2_TRGOSource_Update);
    TIM2_Cmd(ENABLE);
//    ADC_SoftwareStartConv(ADC1);
}


回復

使用道具 舉報

ID:169891 發(fā)表于 2021-7-26 16:32 | 顯示全部樓層
解決了,重點在這句ADC_ExternalTrigConfig(ADC1,ADC_ExtEventSelection_Trigger2,ADC_ExtTRGSensitivity_Falling);
用time2,ADC_ExtEventSelection_Trigger3,上升沿觸發(fā)AD
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表