Showing results for 
Search instead for 
Did you mean: 

Find STM32 with 5 encoders input timers,

Associate II

For a project, I need to find a stm32 that has a minimum of 5 timers that can read encoders, and it has to have a CAN-bus peripheral.

Is there a way to do this in the part selectors? I can select the minimum number of 16bit timers, but not all 16bit counters seem to support encoder input. Any way to do this without manually reading all the datasheets?

I did try to automate this using the XML files in the data folder of stm32cube, but I did not really find a way to detect if a 16bit counter support encoder input.


@Vidicon wrote:

Mostly yes,
but it does not mention encoder mode for the Advanced-control timers TIM1, TIM8.


AN4013 suggests that 'Advanced' Timers can do everything that 'General-Purpose' Timers can do, and it says that includes the Encoder mode.

But, indeed, the Datasheet says that only some 'General-Purpose' Timers (TIM2-5) have the Encoder mode:


and the description of 'Advanced' timers is unhelpful:




Another 'Documentation Clarification' request for @STOne-32 and @Imen.D


I don't know where cube gets this information from,

In the timer xmls in IP subdirectory you'll find something like:

<Mode Name="Encoder_Interface" UserName="Encoder Mode" RemoveCondition="($IpNumber=6)|($IpNumber=7)|($IpNumber=18)|($IpNumber=9)|($IpNumber=10)|($IpNumber=11)|($IpNumber=12)|($IpNumber=13)|($IpNumber=14)|($IpNumber=15)|($IpNumber=16)|($IpNumber=17)">

note the RemoveCondition tag, i.e. this is list of timers (timers' numbers) which don't have encoder mode. Others do.


otherwise I could write a script to list all devices with 5 or more timers with the encoder mode.

If you do, please publish.


RM0090 17.2 TIM1 and TIM8 main feature:

• Supports incremental (quadrature) encoder and hall-sensor circuitry for positioning


You should also have a look at AN4013

@Uwe Bonnes wrote:

You should also have a look at AN4013

That's the one I've been citing - it seems not entirely helpful:

AN4013 suggests that 'Advanced' Timers can do everything that 'General-Purpose' Timers can do, and it says that includes the Encoder mode.
But, indeed, the Datasheet says that only some 'General-Purpose' Timers (TIM2-5) have the Encoder mode


Ow this is useful to know, I don't have time to write a full script to parse this today, but definitely something i want to do that in the future. 

Associate II

I did create this simple script:


import os
import xml.etree.ElementTree as ET
from pprint import pprint

def list_timers_in_mcu_files(directory):
    instance_names = {}
    for filename in os.listdir(directory):
        if filename.endswith('.xml') and filename.startswith('STM32'):
            tree = ET.parse(os.path.join(directory, filename))
            root = tree.getroot()
            instance_names.update({filename: []})
            timers = []
            for element in root:
                instance_name = element.attrib.get('InstanceName')
                if instance_name is not None and 'TIM' in instance_name:
            instance_names[filename] = timers

    return instance_names

directory = 'mcu'
instance_names = list_timers_in_mcu_files(directory)


 It lists the timers per MCU (file), Now I have to look for an MCU that has the Timers that I need. 
There are some nice tables in AN4013.

Uwe Bonnes
Principal III

Nice script! IRTIM should get excluded. As suspected, U5 devices offer a lot of possible usefull devices.

Some LPTIM in some STM32 have encoder mode, too, IIRC. I have no personal experience.