OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6875|回复: 4

adc 采样 时间 采样周期 相关的问题

[复制链接]

4

主题

11

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-3-21
在线时间
8 小时
发表于 2017-4-19 18:02:42 | 显示全部楼层 |阅读模式
1金钱
void  DMA_config( u16 Size){
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 , ENABLE);
  DMA_InitTypeDef       DMA_InitStructure;
  DMA_InitStructure.DMA_BufferSize= 25000;      //要传输的数据量
        DMA_InitStructure.DMA_Channel=DMA_Channel_0  ;//配置传输的通道0
       
        DMA_InitStructure.DMA_FIFOMode=DMA_FIFOMode_Disable;
        DMA_InitStructure.DMA_FIFOThreshold=DMA_FIFOThreshold_HalfFull;

        DMA_InitStructure.DMA_MemoryBurst=DMA_MemoryBurst_Single;//存储器突发传输配置  可选择增量
        DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;//用来设置内存的数据长度(半字)
        DMA_InitStructure.DMA_MemoryInc= DMA_MemoryInc_Enable;//存储器增量模式
        DMA_InitStructure.DMA_Mode= DMA_Mode_Normal;//采集模式设置(单次采集)
         
        DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralToMemory;//传输的方向,从外设到存储器
        DMA_InitStructure.DMA_PeripheralBaseAddr=(uint32_t)ADC1_DR_ADDRESS;//DMA外设地址
        DMA_InitStructure.DMA_Memory0BaseAddr=(uint32_t)&ADC1_ConvertedValue;//存储器地址
         
         
        DMA_InitStructure.DMA_PeripheralBurst= DMA_PeripheralBurst_Single;//外设突发单次传输
        DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;//外设数据长度 和 内存数据长度相同
        DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//DMA_PeripheralInc 设置传输数据的时候外设地址是不变还是递增
        DMA_InitStructure.DMA_Priority=DMA_Priority_High;//中等优先高
        DMA_Init(DMA2_Stream0, &DMA_InitStructure);
        //DMA_Cmd(DMA2_Stream0, ENABLE);   
  DMA_Cmd( DMA2_Stream0 , DISABLE );
        DMA_ClearITPendingBit( DMA2_Stream0 ,DMA_IT_TCIF0 );
        //DMA_ClearITPendingBit( DMA2_Stream0 ,DMA_IT_TCIF0|DMA_IT_DMEIF0|DMA_IT_TEIF0|DMA_IT_HTIF0|DMA_IT_TCIF0 );
        DMA_ITConfig( DMA2_Stream0 , DMA_IT_TC , ENABLE );

}
DMA配置如上 。 从外设到内存传输,,,外设基地址是 adc的寄存器地址(不变),内存的基地址 是一个数组的首地址(增量模式)。然后我想问的是,是不是一次采样就采回来一个数据,然后 依次保存到我的数组(假设A[0],A[1],A[2]....这样 )。。
然后还有个问题就是 关于时钟周期的,,,

        u32 MaxData;
        u16 div=1;
       
        while( (SystemCoreClock/2/Fre/div)>65535 )//168M/2/200000/div和  65535 比较
        {
                 div++;
        }
        MaxData =  SystemCoreClock/2/Fre/div - 1;   
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2 , ENABLE );                        //开启时钟
       
        /* Time base configuration */
        TIM_TimeBaseStructure.TIM_Period = MaxData ;//设置溢出的数的大小
        TIM_TimeBaseStructure.TIM_Prescaler = div-1;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit( TIM2 , &TIM_TimeBaseStructure );
       
                /* PWM1 Mode configuration: Channel2 */
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse = MaxData/2;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        TIM_OC2Init( TIM2 , &TIM_OCInitStructure);
       
        TIM_OC2PreloadConfig( TIM2 , TIM_OCPreload_Enable );

        TIM_ARRPreloadConfig( TIM2 , DISABLE );
        TIM_Cmd( TIM2 , DISABLE );                                                        /* TIM2 enable counter */
        TIM_CtrlPWMOutputs( TIM2, ENABLE );
}

上面那段代码 ,我怎么觉得div 只能是1,然后分频系数就是0,,,

/* ADC Common Init **********************************************************/
        ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
        ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
        ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
        ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
        ADC_CommonInit( &ADC_CommonInitStructure );

        /* ADC1 Init ****************************************************************/
        ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
        ADC_InitStructure.ADC_ScanConvMode = DISABLE;
        ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
        ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO;
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
        ADC_InitStructure.ADC_NbrOfConversion = 1;
        ADC_Init( ADC1, &ADC_InitStructure );

        /* ADC3 regular channel7 configuration **************************************/
        ADC_RegularChannelConfig( ADC1 , ADC_Channel_2 , 1, ADC_SampleTime_3Cycles);  //PA2
        ADC_DMARequestAfterLastTransferCmd( ADC1 , ENABLE );
       
        ADC_DMACmd(ADC1, ENABLE);
        ADC_Cmd(ADC1, ENABLE);
        ADC_SoftwareStartConv( ADC1 );
        ADC配置是上面这样的,分频系数是2 分频 (168M/2  频率就是 84M),然后采样时间是  12.5+ (ADC_SampleTime_3Cycles)) 3 个周期,

       他说 采样周期 是5us 采样频率是 200k     这个是怎么计算,还是在哪设置了....  我始终 计算不出来


最佳答案

查看完整内容[请看2#楼]

首先ADC的采样周期是可以设置的,有1.5 7.5 13.5 28.5 41.5 55.5 71.5 139.5几个。 还有一个公式:ADC采样频率=ADC CLOCK / (12.5+ADC配置的采样周期)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2017-4-19
在线时间
3 小时
发表于 2017-4-19 18:02:43 | 显示全部楼层
首先ADC的采样周期是可以设置的,有1.5 7.5 13.5 28.5 41.5 55.5 71.5 139.5几个。
还有一个公式:ADC采样频率=ADC CLOCK / (12.5+ADC配置的采样周期)
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-3-21
在线时间
8 小时
 楼主| 发表于 2017-4-20 17:12:37 | 显示全部楼层
join 发表于 2017-4-19 18:02
首先ADC的采样周期是可以设置的,有1.5 7.5 13.5 28.5 41.5 55.5 71.5 139.5几个。
还有一个公式:ADC采样 ...

S虽然你说得对 ,但是 没有 解决我的问题 。。
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-3-21
在线时间
8 小时
 楼主| 发表于 2017-4-20 17:14:27 | 显示全部楼层
@正点原子 ,,,,,他这样也是最佳答案??  他好像连题目都没有看清楚、。。
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2021-11-28
在线时间
26 小时
发表于 2023-7-26 09:54:41 | 显示全部楼层
join 发表于 2017-4-19 18:02
首先ADC的采样周期是可以设置的,有1.5 7.5 13.5 28.5 41.5 55.5 71.5 139.5几个。
还有一个公式:ADC采样 ...

这样的话,假如按照最快采样周期1.5和ADC时钟设置12M,那么32最大的采样频率是12M/14=857khz的采样率,是这样吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 08:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表