使用的v2库配置的adc,用20M时钟,配置7.5采样周期,定时器tmr3溢出触发,不知道为啥速度不达1M,下面是代码,有没有大佬帮我看看,我的配置哪里的错误,{:cry:}
void tmr3_init(void)
{
crm_clocks_freq_type crm_clocks_freq_struct = {0};
crm_periph_clock_enable(CRM_TMR3_PERIPH_CLOCK, TRUE); //开启tmr3时钟
/* get system clock */
crm_clocks_freq_get(&crm_clocks_freq_struct);
/* (systemclock/(systemclock/10000))/1000 = 10Hz(100ms) */
tmr_base_init(TMR3, 9, (crm_clocks_freq_struct.sclk_freq/10000000 - 1));
tmr_cnt_dir_set(TMR3, TMR_COUNT_UP); //向上计数
tmr_primary_mode_select(TMR3,TMR_PRIMARY_SEL_OVERFLOW); //设置TMR的主模式,输出溢出触发源
}
void adc_collect_init(void)
{
tmr3_init();
gpio_init_type gpio_initstructure;
adc_base_config_type adc_base_struct;
dma_init_type dma_init_struct;
crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_ADC1_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_DMA1_PERIPH_CLOCK, TRUE); //开启dma1时钟
crm_adc_clock_div_set(CRM_ADC_DIV_6); //ADC时钟6分频
gpio_default_para_init(&gpio_initstructure);
gpio_initstructure.gpio_mode = GPIO_MODE_ANALOG;
gpio_initstructure.gpio_pins = GPIO_PINS_0;
gpio_init(GPIOB, &gpio_initstructure);
dma_reset(DMA1_CHANNEL1);
dma_default_para_init(&dma_init_struct);
dma_init_struct.buffer_size = 1; //内存大小为1
dma_init_struct.direction = DMA_DIR_PERIPHERAL_TO_MEMORY; //传输方向为外设到内存
dma_init_struct.memory_base_addr = (uint32_t)adc1_ordinary_valuetab; //内存地址
dma_init_struct.memory_data_width = DMA_MEMORY_DATA_WIDTH_HALFWORD; //内存数据的宽度,16位
dma_init_struct.memory_inc_enable = FALSE; //内存地址递增打开
dma_init_struct.peripheral_base_addr = (uint32_t)&(ADC1->odt); //外设地址为adc数据寄存器地址`
dma_init_struct.peripheral_data_width = DMA_PERIPHERAL_DATA_WIDTH_HALFWORD; //外设数据的宽度,16位
dma_init_struct.peripheral_inc_enable = FALSE; //外设地址递增关闭
dma_init_struct.priority = DMA_PRIORITY_MEDIUM; //中等优先级
dma_init_struct.loop_mode_enable = TRUE; //循环传输,传输完1个后重新开始
dma_init(DMA1_CHANNEL1, &dma_init_struct);
/* select combine mode */
adc_combine_mode_select(ADC_INDEPENDENT_MODE); //设置adc工作模式,独立模式
adc_base_default_para_init(&adc_base_struct);
adc_base_struct.sequence_mode = FALSE; //关闭序列模式
adc_base_struct.repeat_mode = TRUE; //关闭重复模式
adc_base_struct.data_align = ADC_RIGHT_ALIGNMENT; //数据右对齐
adc_base_struct.ordinary_channel_length = 1; //通道数为1
adc_base_config(ADC1, &adc_base_struct); //初始化参数
adc_ordinary_channel_set(ADC1, ADC_CHANNEL_8, 1, ADC_SAMPLETIME_7_5); //ADC1,ADC通道,序列号1,采样时间为7.5周期
adc_ordinary_conversion_trigger_set(ADC1, ADC12_ORDINARY_TRIG_TMR3TRGOUT, TRUE); //普通通道触发设置为软件触发
adc_dma_mode_enable(ADC1, TRUE); //使能adc dma功能
dma_channel_enable(DMA1_CHANNEL1, TRUE); //使能通道1
adc_enable(ADC1, TRUE); //使能ADC1
adc_calibration_init(ADC1); //初始化校准
while(adc_calibration_init_status_get(ADC1)); //初始化校准完毕
adc_calibration_start(ADC1); //开始校准
while(adc_calibration_status_get(ADC1)); //校准完毕
tmr_counter_enable(TMR3, FALSE);
}
主频是240M |
|