21ic问答首页 - CIU32F003J5S6的ADC怎么达不到1M的速度?才133k呢?
CIU32F003J5S6的ADC怎么达不到1M的速度?才133k呢?
配置主频16M,AHB,APB1分频,ADC时钟为PCLK的1分频,采样3周期,只做1个通道的转换,软件触发,查询等待转换结束,
void system_clock_config(void)
{
/* 设置Flash读访问等待时间 */
std_flash_set_latency(FLASH_LATENCY_0CLK); //16M
/* 使能RCH */
std_rcc_rch_enable();
while(std_rcc_get_rch_ready() != RCC_CSR1_RCHRDY);
/* 设置系统时钟源为RCH */
std_rcc_set_sysclk_source(RCC_SYSCLK_SRC_RCHDIV3); //16M
while(std_rcc_get_sysclk_source() != RCC_SYSCLK_SRC_STATUS_RCHDIV3);
/* 设置AHB分频因子 */
std_rcc_set_ahbdiv(RCC_HCLK_DIV1);
/* 设置APB分频因子 */
std_rcc_set_apbdiv(RCC_PCLK_DIV1);
/* 配置系统时钟全局变量 */
SystemCoreClock = RCH_VALUE/3;
}
void adc_init(void)
{
/* 使能ADC时钟 */
std_rcc_apb2_clk_enable(RCC_PERIPH_CLK_ADC);
/* ADC_CK时钟为PCLK的1分频 */
std_adc_clock_config(ADC_CK_DIV1);
/* 软件触发ADC */
std_adc_trig_sw();
/* 单次转换模式 */
std_adc_conversion_mode_config(ADC_SINGLE_CONVER_MODE);
/* 采样时间配置,3个周期*/
std_adc_sampt_time_config(ADC_SAMPTIME_3CYCLES);
/* 选择通道0 */
std_adc_fix_sequence_channel_enable(ADC_CHANNEL_0);
/* 配置wait模式,避免数据未及时读取,转换溢出 */
std_adc_wait_mode_enable();
std_adc_internal_channel_vbgr_enable();
/* 使能ADC */
std_adc_enable();
/* 等待ADC使能状态稳定 */
delayus(ADC_EN_DELAY);
}
利用一个IO口指示转换时间,在IO口高电平时间约为7.5us,相当于转换速度133k
DEBUGIO_HIGH();
std_adc_fix_sequence_channel_disable(ADC_CHANNEL_VBGR);
std_adc_fix_sequence_channel_enable(ADC_CHANNEL_0);
std_adc_start_conversion();
while(std_adc_get_flag(ADC_FLAG_EOC) == 0U);
std_adc_clear_flag(ADC_FLAG_EOC);
adc_buff[adc_counts] = std_adc_get_conversion_value();
adc_counts++;
DEBUGIO_LOW();
void system_clock_config(void)
{
/* 设置Flash读访问等待时间 */
std_flash_set_latency(FLASH_LATENCY_0CLK); //16M
/* 使能RCH */
std_rcc_rch_enable();
while(std_rcc_get_rch_ready() != RCC_CSR1_RCHRDY);
/* 设置系统时钟源为RCH */
std_rcc_set_sysclk_source(RCC_SYSCLK_SRC_RCHDIV3); //16M
while(std_rcc_get_sysclk_source() != RCC_SYSCLK_SRC_STATUS_RCHDIV3);
/* 设置AHB分频因子 */
std_rcc_set_ahbdiv(RCC_HCLK_DIV1);
/* 设置APB分频因子 */
std_rcc_set_apbdiv(RCC_PCLK_DIV1);
/* 配置系统时钟全局变量 */
SystemCoreClock = RCH_VALUE/3;
}
void adc_init(void)
{
/* 使能ADC时钟 */
std_rcc_apb2_clk_enable(RCC_PERIPH_CLK_ADC);
/* ADC_CK时钟为PCLK的1分频 */
std_adc_clock_config(ADC_CK_DIV1);
/* 软件触发ADC */
std_adc_trig_sw();
/* 单次转换模式 */
std_adc_conversion_mode_config(ADC_SINGLE_CONVER_MODE);
/* 采样时间配置,3个周期*/
std_adc_sampt_time_config(ADC_SAMPTIME_3CYCLES);
/* 选择通道0 */
std_adc_fix_sequence_channel_enable(ADC_CHANNEL_0);
/* 配置wait模式,避免数据未及时读取,转换溢出 */
std_adc_wait_mode_enable();
std_adc_internal_channel_vbgr_enable();
/* 使能ADC */
std_adc_enable();
/* 等待ADC使能状态稳定 */
delayus(ADC_EN_DELAY);
}
利用一个IO口指示转换时间,在IO口高电平时间约为7.5us,相当于转换速度133k
DEBUGIO_HIGH();
std_adc_fix_sequence_channel_disable(ADC_CHANNEL_VBGR);
std_adc_fix_sequence_channel_enable(ADC_CHANNEL_0);
std_adc_start_conversion();
while(std_adc_get_flag(ADC_FLAG_EOC) == 0U);
std_adc_clear_flag(ADC_FLAG_EOC);
adc_buff[adc_counts] = std_adc_get_conversion_value();
adc_counts++;
DEBUGIO_LOW();
您需要登录后才可以回复 登录 | 注册