你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
哀歌与世无争 发表于 2019-9-3 10:02 切换到内部HSI后,adc有没有重新初始化
木桩上的跛脚人 发表于 2019-9-3 15:14 内部没有倍频,直接用了8M的测试
mylovemcu 发表于 2019-9-3 18:41 那就是说使用内部时钟和外部时钟的时候 ADC的采样频率是不一样的吧 采样频率不一样会导致采样的精度发 ...
Your UAT Feedback is needed within today.
5.18活动板子会不会是STM32L4呢
STM32隐藏
STM32 CUBE软件中找不到STM32L4系列单片机
应用
AAA
tiwen
BBBB
aaa
2222
切换完之后,最初没有初始化,后来加上了,但效果一样。。。。
{
ADC_InitTypeDef ADC_InitStructure;
DMA_InitTypeDef DMA_InitStructure;
//DMA channel1 configuration
ADC_Cmd(ADC1, DISABLE);
DMA_Cmd(DMA1_Channel1, DISABLE);
DMA_InitStructure.DMA_PeripheralBaseAddr = DR_ADDRESS;
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&g_u32PowerADCValue;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 3;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /* É趨ÄÚ´æµØÖ·µÝ¼Ó ÿ´ÎDMA¶¼Êǽ«ÍâÉè¼Ä´æÆ÷ÖеÄÖµ´«µ½Á½¸öÄÚ´æ¿Õ¼äÖÐ */
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_DeInit(DMA1_Channel1);
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
// ADC1 configuration
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 3;
ADC_Init(ADC1, &ADC_InitStructure);
// ADC1 regular channel1 PA1 configuration
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_1Cycles5);//
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_1Cycles5); //
//
ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 3, ADC_SampleTime_1Cycles5 ); //ADC1,ADC??3,?????,?????239.5??
ADC_TempSensorVrefintCmd(ENABLE);
// Enable ADC1 DMA
ADC_DMACmd(ADC1, ENABLE);
// Enable ADC1
ADC_Cmd(ADC1, ENABLE);
// Enable ADC1 reset calibaration register
ADC_ResetCalibration(ADC1);
// Check the end of ADC1 reset calibration register
while(ADC_GetResetCalibrationStatus(ADC1));
// Start ADC1 calibaration
ADC_StartCalibration(ADC1);
// Check the end of ADC1 calibration
while(ADC_GetCalibrationStatus(ADC1));
// Start ADC1 Software Conversion
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
// Enable DMA channel1
DMA_Cmd(DMA1_Channel1, ENABLE);
}
RCC_DeInit();
RCC_HSICmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)
{
}
RCC_HCLKConfig(RCC_SYSCLK_Div1); //AHBʱÖÓΪϵͳʱÖÓSYSCLK
RCC_PCLK2Config(RCC_HCLK_Div2); //APB1ʱÖÓΪHCLK/2£¬ÆäÖÐHCLKΪAHBʱÖÓ
RCC_PCLK1Config(RCC_HCLK_Div1); //APB2ʱÖÓΪHCLK
//ÉèÖà PLL ʱÖÓÔ´¼°±¶ÆµÏµÊý
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_2);
//ʹÄÜ»òÕßʧÄÜ PLL,Õâ¸ö²ÎÊý¿ÉÒÔÈ¡£ºENABLE»òÕßDISABLE
RCC_PLLCmd(ENABLE);//Èç¹ûPLL±»ÓÃÓÚϵͳʱÖÓ,ÄÇôËü²»Äܱ»Ê§ÄÜ
//µÈ´ýÖ¸¶¨µÄ RCC ±ê־λÉèÖóɹ¦ µÈ´ýPLL³õʼ»¯³É¹¦
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
//ÉèÖÃϵͳʱÖÓ£¨SYSCLK£© ÉèÖÃPLLΪϵͳʱÖÓÔ´
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//µÈ´ýPLL³É¹¦ÓÃ×÷ÓÚϵͳʱÖÓµÄʱÖÓÔ´
// 0x00£ºHSI ×÷ΪϵͳʱÖÓ
// 0x04£ºHSE×÷ΪϵͳʱÖÓ
// 0x08£ºPLL×÷ΪϵͳʱÖÓ
while(RCC_GetSYSCLKSource() != 0x08)
{
}
// RCC_ADCCLKConfig(RCC_PCLK2_Div2);
}
那就是说使用内部时钟和外部时钟的时候 ADC的采样频率是不一样的吧 采样频率不一样会导致采样的精度发生变化
只要保证在相同频率下测试的重复误差达到要求就可以了
采样频率都有修改过,但目前发现这个ADCCLK对这个精度影响很大,当ADC时钟为4MHZ或以下,精度比较准确,用9M(72/8),,误差很大