找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1182|回復(fù): 4
收起左側(cè)

STM32單片機ADC使用TIM3 TRGO轉(zhuǎn)換

[復(fù)制鏈接]
ID:1114858 發(fā)表于 2024-5-13 21:22 | 顯示全部樓層 |閱讀模式
STM32 ADC使用TIM3 TRGO 轉(zhuǎn)換模式時為什么配置好了定時器和觸發(fā)通道ADC無法正常啟用,在程序中加一個軟件觸發(fā)就可以正常使用(ADC配置為單次轉(zhuǎn)換),關(guān)閉定時器后ADC轉(zhuǎn)換無法啟用,可以看出觸發(fā)的來源來自定時器的TRGO  ,為什么必須要加一個軟件觸發(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);
               
        }
      
}
回復(fù)

使用道具 舉報

ID:421260 發(fā)表于 2024-5-14 08:04 | 顯示全部樓層
ADC_SoftwareStartConvCmd(ADC1,ENABLE );//使能指定的ADC通道。
回復(fù)

使用道具 舉報

ID:421260 發(fā)表于 2024-5-14 08:07 | 顯示全部樓層
使能指定的ADC的軟件轉(zhuǎn)換啟動功能
回復(fù)

使用道具 舉報

ID:1114858 發(fā)表于 2024-5-14 16:30 來自手機 | 顯示全部樓層
szqinyi 發(fā)表于 2024-5-14 08:04
ADC_SoftwareStartConvCmd(ADC1,ENABLE );//使能指定的ADC通道。

這個函數(shù)不是使能軟件開始的嗎?跟硬件有什么關(guān)系
回復(fù)

使用道具 舉報

ID:1114858 發(fā)表于 2024-5-14 16:32 來自手機 | 顯示全部樓層
szqinyi 發(fā)表于 2024-5-14 08:07
使能指定的ADC的軟件轉(zhuǎn)換啟動功能

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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表