STM32通过TIM,ADC,DMA的配合使用实现双通道数据采样

本文介绍了如何在STM32F205VCT6芯片上,通过57.6kHz定时器触发ADC采样,并使用DMA将采样数据存入缓冲区,以实现双通道数据的高速采集。配置过程包括设置定时器、ADC以及采用乒乓缓冲的DMA。
摘要由CSDN通过智能技术生成

第一次写博客,奉献给STM32了,一直以来都是潜水看博客,希望能够自己也能写一点东西,对自己学习和工作的一个总结,希望能够坚持下去。

项目背景:以57.6kbps的速率采集两个通道的数据
芯片:STM32F205VCT6
总体的思路通过57.6kHz的定时器去触发ADC采样,采样后的数据在通过DMA存放于缓冲区定时产生中断。
由于需要产生57.6KHz的频率,晶振选择9.6MKHz,CPU主频为115.2MHz。
STEP1:配置定时器
通过TIM2去触发两路ADC,详见配置如下

void TIM2_Configuration(void)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_OCInitTypeDef TIM_OCInitStructure;

    RCC_APB1PeriphClockCmd ( RCC_APB1Periph_TIM2 , ENABLE );

    TIM_DeInit ( TIM2 );

    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_Period        = (57600000/(ADC_SAMPLING_MUL*AIS_MODUL_RATE) - 1 );    //28.8M*2/100/10 = 57.6kHz
    TIM_TimeBaseStructure.TIM_Prescaler     = ( 1 - 1 );//28.8M*2 = 57.6MHz
    TIM_TimeBaseStructure.TIM_CounterMode   = TIM_CounterMode_Up;
    TIM_TimeBaseInit ( TIM2, &TIM_TimeBaseStructure );

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 1;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
    TIM_OC2Init(TIM2, &TIM_OCInitStructure);
    //TIM_ITConfig(TIM2,TIM_IT_CC2,ENABLE); //开定时器中断测试使用

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 1;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
    TIM_OC3Init(TIM2, &TIM_OCInitStructure);
   // TIM_ITConfig(TIM2,TIM_IT_CC3,ENABLE); //开定时器中断测试使用

    TIM_Cmd ( TIM2, ENABLE );
    TIM_InternalClockConfig(TIM2);
    TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
    TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
    TIM_UpdateDisableConfig(TIM2, DISABLE);
}

STEP2:配置ADC
首先需要配置GPIO复用

//GPIO -PB0 PB1 -ADC1 ADC2
    GPIO_InitStructure.GPIO_Pin     = GPIO_Pin_0 | GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_AN;
    GPIO_InitStructure.GPIO_PuPd    = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_50MHz;
    GPIO_Init ( GPIOB, &GPIO_InitStructure );

然后配置ADC

void ADC_Configuration(void)
{                                       
    ADC_InitTypeDef       ADC_InitStructure;
    ADC_CommonInitTypeDef ADC_CommonInitSt
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值