在CubeMX中配置:
配置解释:
synchronous clock mode divided by 同步时钟模式分频
asynchronous clock mode divided 异步时钟模式分频
resolution分辨率
data alignment 数据对齐(右)
Sequencer 扫描顺序
Sequencer fully configurable 描通道的顺序与通道号channel number无关
Sequencer not fully configurable 通道扫描的顺序由通道编号定义
scan conversion mode 扫描转换模式(需要选择Sequencer not fully configurable,且扫描通道数number of conversion 要大于1)
continuous conversion mode 自动连续扫描模式(需要选择Sequencer not fully configurable,且开启MDA循环模式)
Discontinuous Conversion Mode 非连续转换模式
MDA continuous Requests DMA连续请求
(在开启DMA连续请求前 需先开启DMA配置)
End of conversion selection 转换结束选择
End of single conversion 单次转换结束
End of sequence of conversion 转换序列结束
overrun behaviour 侵占行为
overrun data preserved 溢出的数据保存
overrun data overwritten 溢出的数据覆盖
external trigger conversion edge 外部触发机制
配置完成,生成代码后,只需要调用这两个函数即可:
HAL_ADC_Start(&hadc1);
printf("\r\n %d",HAL_ADC_GetValue(&hadc1));
需要注意的是 ADC开始一次只产生一个值,如果开始一次读取多次,那么读取的ADC值为重复的值。
也就是说需要一直循环 HAL_ADC_Start()和 HAL_ADC_GetValue()这两个函数,才能读取最新的值。
如果以使用DMA方式
uint32_t ADC_DMA_buffer[10]={0};//定于一个全局变量
HAL_ADC_Start_DMA(&hadc1, ADC_DMA_buffer, 10);
去读取这个数组的数即可。