標(biāo)題: STM32單片機(jī)ADC使用TIM3 TRGO轉(zhuǎn)換 [打印本頁(yè)]

作者: 下一站過(guò)后    時(shí)間: 2024-5-13 21:22
標(biāo)題: STM32單片機(jī)ADC使用TIM3 TRGO轉(zhuǎn)換
STM32 ADC使用TIM3 TRGO 轉(zhuǎn)換模式時(shí)為什么配置好了定時(shí)器和觸發(fā)通道ADC無(wú)法正常啟用,在程序中加一個(gè)軟件觸發(fā)就可以正常使用(ADC配置為單次轉(zhuǎn)換),關(guān)閉定時(shí)器后ADC轉(zhuǎn)換無(wú)法啟用,可以看出觸發(fā)的來(lái)源來(lái)自定時(shí)器的TRGO  ,為什么必須要加一個(gè)軟件觸發(fā) ,麻煩大佬幫忙看下


#include "stm32f10x.h"                  // Device header


void ADCdma_Init( )
{
        RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM3,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE );
        RCC_ADCCLKConfig (RCC_PCLK2_Div6);
        
        
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 ;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
        
        
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
        TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
        TIM_TimeBaseInitStructure.TIM_Period=2-1;
        TIM_TimeBaseInitStructure.TIM_Prescaler=72-1;
        TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
        
        TIM_SelectOutputTrigger(TIM3,TIM_TRGOSource_Update);
        
        
        ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);
        ADC_InitTypeDef ADC_InitStructure;
        ADC_InitStructure.ADC_ContinuousConvMode=DISABLE ;
        ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
        ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T3_TRGO;
        ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
        ADC_InitStructure.ADC_NbrOfChannel=1;
        ADC_InitStructure.ADC_ScanConvMode=DISABLE ;
        ADC_Init(ADC1,&ADC_InitStructure);
        

        ADC_Cmd(ADC1,ENABLE );
        TIM_Cmd(TIM3,ENABLE );
        ADC_ResetCalibration(ADC1);
        while(ADC_GetResetCalibrationStatus(ADC1)==SET );
        ADC_StartCalibration(ADC1);
        while(ADC_GetCalibrationStatus(ADC1)==RESET);
        
        
}



#include "stm32f10x.h"                  // Device header
#include "ADCdma.h"
#include "OLED.h"

int main(void)
{
        uint16_t ADC_Date1[4]={0};
        OLED_Init();
        ADCdma_Init();
        ADC_SoftwareStartConvCmd(ADC1,ENABLE );//  必須加這條才可以正常使用
        while(1)
        {

                OLED_ShowNum(1,1,ADC_GetConversionValue(ADC1),5);
               
        }
      
}

作者: szqinyi    時(shí)間: 2024-5-14 08:04
ADC_SoftwareStartConvCmd(ADC1,ENABLE );//使能指定的ADC通道。

作者: szqinyi    時(shí)間: 2024-5-14 08:07
使能指定的ADC的軟件轉(zhuǎn)換啟動(dòng)功能
作者: 下一站過(guò)后    時(shí)間: 2024-5-14 16:30
szqinyi 發(fā)表于 2024-5-14 08:04
ADC_SoftwareStartConvCmd(ADC1,ENABLE );//使能指定的ADC通道。

這個(gè)函數(shù)不是使能軟件開(kāi)始的嗎?跟硬件有什么關(guān)系
作者: 下一站過(guò)后    時(shí)間: 2024-5-14 16:32
szqinyi 發(fā)表于 2024-5-14 08:07
使能指定的ADC的軟件轉(zhuǎn)換啟動(dòng)功能

是的,可以不使用這句,需要用函數(shù)開(kāi)啟ADC外部觸發(fā)就可以不使用開(kāi)始軟件轉(zhuǎn)換函數(shù)。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1