基础初始化过程
- APB EnableClock, 查找定时器所在APB及分组(一般APB1 GRP2),开启时钟
LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_TIMx); - 如果有相应的GPIO,初始化GPIO时钟、端口等。
 - 填写 
ADC_InitStruct及ADC_REG_InitStructLL_ADC_InitTypeDef ADC_InitStruct = {0}; LL_ADC_REG_InitTypeDef ADC_REG_InitStruct = {0}; ADC_InitStruct.Clock = LL_ADC_CLOCK_ASYNC; ADC_InitStruct.Resolution = LL_ADC_RESOLUTION_12B; ADC_InitStruct.DataAlignment = LL_ADC_DATA_ALIGN_RIGHT; ADC_InitStruct.LowPowerMode = LL_ADC_LP_MODE_NONE; ADC_REG_InitStruct.SequencerDiscont = LL_ADC_REG_SEQ_DISCONT_DISABLE; ADC_REG_InitStruct.ContinuousMode = LL_ADC_REG_CONV_SINGLE; ADC_REG_InitStruct.DMATransfer = LL_ADC_REG_DMA_TRANSFER_NONE; ADC_REG_InitStruct.Overrun = LL_ADC_REG_OVR_DATA_OVERWRITTEM; - 初始化ADC及ADC_REG。
LL_ADC_Init(ADCx, &ADC_InitStruct); LL_ADC_REG_Init(ADCx, &ADC_REG_InitStruct); - 其它ADC设置。
LL_ADC_REG_SetSequencerScanDirection(ADCx, LL_ADC_REG_SEQ_SCAN_DIR_FORWARD); LL_ADC_SetSamplingTimeCommonChannels(ADCx, LL_ADC_SAMPLINGTIME_1CYCLE_5); 
软件触发一次转换并等待转换完毕
- ADC已完成基础初始化。
 - 启动校准,并等待校准完成。
LL_mDelay(1); LL_ADC_StartCalibration(ADCx); while (LL_ADC_IsCalibrationOnGoing(ADCx)); - 启用ADC,并等待ADC启动完毕。
LL_ADC_Enable(ADCx); while (LL_ADC_IsActiveFlag_ADRDY(ADCx) == 0); - 清除EOC标志,确保转换被执行。
if (LL_ADC_IsActiveFlag_EOC(ADCx)) LL_ADC_ClearFlag_EOC(ADCx); - 设置转换通道。
LL_ADC_REG_SetSequencerChannels(ADCx, LL_ADC_CHANNEL_0); - 启动转换。
LL_ADC_StartConversion(ADCx); - 检查EOC标志。
while (LL_ADC_IsActiveFlag_EOC(ADCx) == 0); LL_ADC_ClearFlag_EOC(ADCx); - 读取转换结果。
LL_ADC_REG_ReadConversionData12(ADCx); 
使用EOC中断
- ADC已完成基础初始化。
 - 启用ADC,并等待ADC启动完毕。
LL_ADC_Enable(ADCx); while (LL_ADC_IsActiveFlag_ADRDY(ADCx) == 0); - 清除EOC标志,确保转换被执行。
if (LL_ADC_IsActiveFlag_EOC(ADCx)) LL_ADC_ClearFlag_EOC(ADCx); - 设置转换通道。
LL_ADC_REG_SetSequencerChannels(ADCx, LL_ADC_CHANNEL_0); - 启用EOC中断。
LL_ADC_EnableIT_EOC(ADCx); - 设置NVIC。
NVIC_SetPriority(ADCx_IRQn, 0); NVIC_EnableIRQ(ADCx_IRQn); - 启动转换。
LL_ADC_StartConversion(ADCx); - 在中断服务函数中读取转换结果。
void ADCx_IRQHandler(void) { LL_ADC_REG_ReadConversionData12(ADCx); } 
使用触发源
参考时钟配置部分 https://zhujinliang.com/stm32-checklist-tim/
- ADC已完成基础初始化。
 - 在
ADC_REG_InitStruct中指定触发源。ADC_REG_InitStruct.TriggerSource = LL_ADC_REG_TRIG_EXT_TIMx_TRGO; - 设置
TriggerEdge。LL_ADC_REG_SetTriggerEdge(ADCx, LL_ADC_REG_TRIG_EXT_RISING); - 启用ADC。
LL_ADC_Enable(ADCx); - 设置转换通道。
LL_ADC_REG_SetSequencerChannels(ADCx, LL_ADC_CHANNEL_0); - 启用EOC中断。
LL_ADC_EnableIT_EOC(ADCx); - 设置NVIC。
NVIC_SetPriority(ADCx_IRQn, 0); NVIC_EnableIRQ(ADCx_IRQn); - 启动转换。
LL_ADC_StartConversion(ADCx); - 在中断服务函数中读取转换结果。
void ADC_IRQHandler(void) { LL_ADC_REG_ReadConversionData12(ADCx); }