目录
1、ADC转换时间
1.1、实测结果
1.2、测试代码
2、定时器触发ADC采样
?
1、ADC转换时间
计算方法可以参考?STM32F4 ADC采样转换时间计算方法
单次转换所需要的时间就如文档所说的。
1.1、实测结果
通过DMA连续采样30000个数据,定时器2(32位计时器)作为us计时器。
经过测试,转换的时间是很精确的,基本等于理论值 15/21=0.71428us
1.2、测试代码
#define ADC_CON_NUM 30000
uint16_t adc_value[ADC_CON_NUM];
// PCLK2 84MHZ/4 4分屏
// 12位 单次:0.714300us
// 10位 单次:0.619067us
// 6 位 单次:0.428600us
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_TIM2_Init();
MX_USART1_UART_Init();
Printf("开始执行\r\n");
HAL_TIM_Base_Start(&htim2);
while (1)
{
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&adc_value,ADC_CON_NUM);
uint32_t tick_us = TIM2->CNT;
while(1)
{
if(hadc1.DMA_Handle->Instance->NDTR == 0)//转换结束
{
uint32_t tick2_us = TIM2->CNT;
Printf("转换结束 用时%dus,单次:%fus\r\n",tick2_us- tick_us, (float)(tick2_us- tick_us)/ADC_CON_NUM);
break;
}
}
GPIOB->ODR ^= GPIO_PIN_0;
HAL_Delay(100);
}
/* USER CODE END 3 */
}
2、定时器触发ADC采样
上文确定ADC软件触发采样的时间是连续固定的,只能通过ADC时钟来调节。
需要精准调节ADC采样时间,可以通过定时器来触发。
注意:如果用定时器来触发ADC采样,则需要禁用连续转换功能,否则转换间隔时间是乱的。?
?测试结果:
?
?
|