Skip to main content
Visitor II
March 20, 2025
Question

Qdec with STM32H563

  • March 20, 2025
  • 0 replies
  • 326 views

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>; //???????
 };
};
 
Code to read the pulses:
 
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);
 
Is cc interrupt the correct one or should I use the "update interrupt"?
 
Do I have to use the counter-module? Zephyr API Documentation: Counter Interface
 
Thank you for your help

Best regards and greetings from Austria
Lukas
    This topic has been closed for replies.