HAL ADC连续转换模式 Continuous Conversion Mode

HAL ADC连续转换模式 Continuous Conversion Mode

在学习Continuous Conversion Mode时,根据网上的例程和配置,我发现Continuous Conversion Mode ENABLE 和DISABLE输出结果好像没有区别。后来自己验证下来的结果,做个笔记

Continuous Conversion Mode:使能后,相比于单次转换模式,连续转换模式在打开ADC后一直转换。假如你单通道,在完成一次ADC转换后就停止了,而连续转换模式会一直转换,当你是多通道AN1 ,AN2,AN3,单次转换模式在把三个通道转换完一次后停止,而连续转换模式在转换完AN3后,会从新再次去转换。下面用个例程比较

例程一:

while (1)

{

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

HAL_ADC_Start(&hadc);

HAL_ADC_PollForConversion(&hadc,50);//

if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc), HAL_ADC_STATE_REG_EOC))

{

value_adc=HAL_ADC_GetValue(&hadc);

voltage=(float)value_adc/4095*3.3*11;

printf("%f\r\n",voltage);

printf("%d\r\n",value_adc);

HAL_Delay(500);

}

输出结果

输出结果:

留意此时ADC的值是在变化的,看着好像在连续的采样,但是你看程序,ADC的开启和等待转换的函数都是放在while()里的,我在网上查好像都是这样的例程。这时候你发现Continuous Conversion Mode选择ENABLE 和DISABLE没有区别。但是当你把 HAL_ADC_Start(&hadc);放到while()上面去,连续转换模式还是DISABLE,你就会发现此时ADC的值不变了,只是进行了一次转换.

其实就是转换了一次,printf函数一直在输出那次的ADC转换而已

此时,你把连续扫描模式ENABLE ,程序不动。你会发现ADC再次连续转换

此时的输出结果是连续转换的,但是我发现此时ADC的值偏大,后来研究一下是采用周期太短的问题。之前Continuous Conversion Mode DISABLE,在while里连续转换,它的真正采用周期并不是你设置的ADC采用周期,而是你while()的循环周期,你多久 循环一次就进行一次采用。当你Continuous Conversion Mode DISABLE ENABLE时,就是上面ADC偏大的那种情况,此时你把周期调长,就可以了.(此时 HAL_ADC_Start(&hadc)放在while里和while外都一样)

相关推荐

为什么70的环最便宜?
o365邮箱

为什么70的环最便宜?

📅 07-25 👁️ 4276
【干货】坐标数据正确导入CASS的方法,收藏学习!
365bet亚洲官方网址

【干货】坐标数据正确导入CASS的方法,收藏学习!

📅 07-10 👁️ 6139
骍牺的解释
365bet扑克客户端

骍牺的解释

📅 07-08 👁️ 1722