基础初始化过程
- APB EnableClock, 查找定时器所在APB及分组(一般APB1 GRP1),开启时钟
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIMx);
- 填写 TIM_InitStruct
LL_TIM_InitTypeDef TIM_InitStruct = {0}; TIM_InitStruct.Prescaler = 71; TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP; TIM_InitStruct.Autoreload = 1000; TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVIDION_DIV1;
- 初始化TIM
LL_TIM_Init(TIMx, &TIM_InitStruct);
- 设置是否启用 ARRPreload,其作用类似影子寄存器(可选)。
LL_TIM_DisableARRPreload(TIMx);
- 设置时钟源(可选)。
LL_TIM_SetClockSource(TIMx, LL_TIM_CLOCKSOURCE_INTERNAL);
产生Update中断
用于定时产生一个固定时间间隔的中断
- 基础初始化。
- 启用Update中断。
LL_TIM_EnableIT_UPDATE(TIMx);
- 设置NVIC。
NVIC_SetPriority(TIMx_IRQn, 0); NVIC_EnableIRQ(TIMx_IRQn);
- 启用时钟。初始化完毕。
LL_TIM_EnableCounter(TIMx);
- 编写IRQHandler函数。在
stm32fxxx_it.c
文件中编写代码,注意必须有清除标志的动作,否则会导致一直进入中断。void TIMx_IRQHandler(void) { if (LL_TIM_IsActiveFlag_UPDATE(TIMx)) { LL_TIM_ClearFlag_UPDATE(TIMx); } }
- 检查启动文件中是否有相应的入口。
DCD TIMx_IRQHandler ; TIMx
作为ADC的触发源
这里使用UPDATE事件,同理可用CC一类事件。
- 基础初始化。
- 设置触发输出。
LL_TIM_SetTriggerOutput(TIMx, LL_TIM_TRGO_UPDATE);
- 启用时钟。
LL_TIM_EnableCounter(TIMx);
- 启用触发事件。
LL_TIM_EnableUpdateEvent(TIMx);
- ADC中设置TriggerSource。
ADC_REG_InitStruct.TriggerSource = LL_ADC_REG_TRIG_EXT_TIMx_TRGO;
- ADC应启用且开启转换。否则不会进行转换及产生EOC中断。
LL_ADC_Enable(ADCx); LL_ADC_REG_StartConversion(ADCx);