Overview
This port of RRF uses a combination of Hardware and Software PWM control.
Hardware PWM
Each hardware timer can handle up to four pins. If more than one pin maps to a timer then the 2nd,3rd.4th can only use hardware PWM if the frequency matches. The hardware PWM is only allocated the first time that PWM is actually needed (so essentially the first time that an output is set to something that is not full on/off).
Software PWM
If it doesn’t use the same frequecy, it will instead be controlled as a software PWM. There are a maximum of 16 software PWM channels.
Software PWM uses a single 1MHz timer. Software PWM uses MCU resources and does not work well for higher PWM frequencies. Anything above about 4KHz will have a reduction in the resolution and there is a minium delta (which is complicated, but basically means that any pulse that has an on time or off time of less than 20uS will be set to just full off/on). This mainly impacts higher frequencies.
Current Limitations
The hardware of the STM32 MCU limits which pins can be used with which timers. At the moment, this port has a limitation that means we have to pre-allocate the pins to a timer, so basically there is only one timer for each pin. It is planned for the future that we will be able to remove that restriction, but it is there at the moment.
Pin Timer Classification
Pin Number | Timer |
---|---|
PA_0 | Timer 2 |
PA_1 | Timer 2 |
PA_15 | Timer 2 |
PA_2 | Timer 2 |
PA_3 | Timer 2 |
PA_5 | Timer 8 |
PA_6 | Timer 13 |
PA_7 | Timer 14 |
PB_0 | Timer 3 |
PB_1 | Timer 3 |
PB_10 | Timer 2 |
PB_11 | Timer 2 |
PB_14 | Timer 12 |
PB_15 | Timer 8 |
PB_3 | Timer 2 |
PB_4 | Timer 3 |
PB_5 | Timer 3 |
PB_6 | Timer 4 |
PB_7 | Timer 4 |
PB_8 | Timer 10 |
PB_9 | Timer 11 |
PC_6 | Timer 8 |
PC_7 | Timer 3 |
PC_8 | Timer 8 |
PC_9 | Timer 8 |
PD_12 | Timer 4 |
PD_13 | Timer 4 |
PD_14 | Timer 4 |
PD_15 | Timer 4 |
PE_5 | Timer 9 |
PE_6 | Timer 9 |
PF_6 | Timer 10 |
PF_7 | Timer 11 |
PF_8 | Timer 13 |
PF_9 | Timer 14 |
PH_6 | Timer 12 |
PI_5 | Timer 8 |
PI_6 | Timer 8 |