我是STM32初学者,无奈公司要一个月内改一个老的项目!
以下是程序中关于有关ADC的配置,右边的注释都是我添加的(参照的固件库使用手册):
void Set_System(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/
/* RCC system reset(for debug purpose) */
RCC_DeInit(); /*将外设 RCC 寄存器重设为缺省值 */
RCC_HSICmd(ENABLE); /*使能内部高速晶振(HSI) */
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); /*设置 HSI 作为系统时钟 */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* 使能预取指缓存 */
FLASH_SetLatency(FLASH_Latency_0); /* 设置代码延时值 FLASH_Latency_0=0延时周期*/
RCC_HCLKConfig(RCC_SYSCLK_Div2); /* HCLK = SYSCLK/2 */
//RCC_PCLK1Config(RCC_HCLK_Div1);/* PCLK1 = HCLK */
//RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK2 = HCLK */
RCC_ADCCLKConfig(RCC_PCLK2_Div4); /* ADCCLK = PCLK2/4 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
}
void adciniti(void)
{
ADC_InitTypeDef ADC_InitStruct;
ADC_InitStruct.ADC_Mode=ADC_Mode_Independent; //ADC1 和 ADC2 工作在独立模式
ADC_InitStruct.ADC_ScanConvMode=DISABLE; //规定了模数转换工作在扫描还是单次(单通道)模式
ADC_InitStruct.ADC_ContinuousConvMode=DISABLE; //规定了模数转换工作在连续还是单次模式
ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动
ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right; //ADC 数据右对齐
ADC_InitStruct.ADC_NbrOfChannel=0X01; //规定了顺序进行规则转换的 ADC 通道的数目,取值1-16
ADC_Init(ADC1,&ADC_InitStruct); // 根据 ADC_InitStruct 中指定的参数初始化外设 ADC1 的寄存器
ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5); //设置指定 ADC 的规则组通道,设置它们的转化顺序和采样时间
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1); //重置 ADC1 的校准寄存器
while (ADC_GetResetCalibrationStatus(ADC1)); //ADC校准寄存器选择完毕
ADC_StartCalibration(ADC1); //开始 ADC1 的校准状态
while (ADC_GetCalibrationStatus(ADC1));
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能 ADC1 的软件转换启动功能
}
我想问下,采样的周期是怎么算的
按照我个人的理解是:ADCCLK=PCLK2/4=HCLK/4=SYSCLK/2 /4=8M/2/4=1M
再根据STM32参考手册里:
16.7 可编程的通道采样时间
ADC 使用若干个 ADC_CLK 周期对输入电压采样,采样周期数目可以通过
ADC_SMPR1 和 ADC_SMPR2 寄存器中的 SMP[2:0]位而更改。每个通道可以以
不同的时间采样。总转换时间如下计算:
T CONV = 采样时间+ 12.5 个周期
例如:
当 ADCCLK=14MHz 和 1.5 周期的采样时间
T CONV = 1.5 + 12.5 = 14 周期 = 1μs
采样时间即:55.5*1us=55.5us
总转换时间为:(55.5+12.5)*1us=68us
请各位高手不吝赐教!谢谢 |