ADC单通道采集
ADC工作原理:
ADC通过将模拟量转化为数字量,例如将连续的电压信号转化为离散的数字信号。
查阅原理图可知,蓝桥杯竞赛板有两个模拟电压输出:
R37与R37分别对应PB15与PB12
CubeMX配置:
配置PB15为ADC_IN15
开启ADC2的通道15,其余配置均可默认。
编写代码:
uint16_t Get_ADC(void)
{
uint16_t temp = 0;
HAL_ADC_Start(&hadc2); //启动ADC
temp = HAL_ADC_GetValue(&hadc2); //读取ADC采集值
HAL_ADC_Stop(&hadc2); //关闭ADC
return temp;
}
使用三个HAL库函数:
HAL_ADC_Start(); 功能:启动ADC
HAL_ADC_GetValue(); 功能:读取ADC采集值
HAL_ADC_Stop(); 功能:关闭ADC
ADC双通道采集
与ADC单通道类似
CubeMX配置需要开启多通道采集模式;
配置PA7和PB15
代码部分:
由于ADC多通道采集时,各个通道采集的数据使用同一个寄存器,所以上一个通道的计数值会被直接覆盖。
在单通道采集的基础上,添加数组保存两个通道的数据,同时由于采集速率过快,读出数组保存的数据可能不按顺序,所以添加了每次读取后1ms的延迟。
同时,在打开多通道后,ADC自动进行连续采集,手动关闭后将无法再次打开,所以无需HAL_ADC_Stop();
void ADC_Key_GET(unsigned int * temp)
{
HAL_ADC_Start(&hadc2);
for(int i = 0 ; i < 2; i++)
{
temp[i] = HAL_ADC_GetValue(&hadc2);
HAL_Delay(1);
}
//HAL_ADC_Stop(&hadc2);
}