2025-03-13 6:38 AM - last edited on 2025-03-26 1:46 AM by mƎALLEm
Hi all,
I was able to make the qdec on timer1 run and read pulses from an external encoder. Now I wanna generate an interrupt after let's say 100 pulses. That interrupt should toggle a led
I mean the timer has interrupts, but i don't know how to use them in Zephyr.
That is my timerconfig in the devicetree:
tim: &timers1 {
compatible = "st,stm32-timers";
reg = <0x40012c00 0x400>;
clocks = <&rcc STM32_CLOCK(APB2, 11U)>;
resets = <&rctl STM32_RESET(APB2, 11U)>;
interrupts = <44 0>;
interrupt-names = "cc";
st,prescaler = <0>;
status = "okay";
qdec: qdec {
compatible = "st,stm32-qdec";
status = "okay";
pinctrl-0 = <&tim1_ch1_pe9 &tim1_ch2_pe11>;
pinctrl-names = "default";
st,input-polarity-inverted;
st,input-filter-level = <15>; // FDIV32_N8-->15: Fs = F_clk/32, N=8
st,counts-per-revolution = <700>;
st,encoder-mode = <1>; //???????
};
};
const struct device *const dev = DEVICE_DT_GET(DT_ALIAS(qdec0));
const struct qdec_stm32_dev_cfg *dev_cfg = (const struct qdec_stm32_dev_cfg *)dev->config;
position = LL_TIM_GetCounter(dev_cfg->timer_inst);
printk("Number of pulses: %" PRIi32 "\n", position);
2025-03-26 1:44 AM
Hello @Lukas4,
The update interrupt is triggered when the counter reaches the ARR value, which you can set to the number of pulses you want to count before the interrupt occurs.
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.