How to set OUTPUT_OPEN_DRAIN with HardwareTimer?

Post here first, or if you can't find a relevant section!
Post Reply
leonzhao101
Posts: 1
Joined: Fri Jul 07, 2023 11:31 am

How to set OUTPUT_OPEN_DRAIN with HardwareTimer?

Post by leonzhao101 »

Hi, I have searched for hours but could not find a solution to this issue.

I am using a STM32F103 board (blue pill) and I need to output a few channels of 5V PWM signals. I have learned to use the HardwareTimer library to output PWM signals, but they are only 3.3V. I have read on other posts that this can be achieved by setting the pinmode to OUTPUT_OPEN_DRAIN and using additional pull-up resistors. But since the pin configuration is handled by the HardwareTimer library, I could not find a way to set pinmode myself.

The only walkaround I can find so far is to use "software PWM" instead of hardware PWM, as shown in this example:
https://github.com/stm32duino/STM32Exam ... ration.ino

But it does not seem to be the best solution...

Any suggestions? Many thanks!!
User avatar
fpiSTM
Posts: 1738
Joined: Wed Dec 11, 2019 7:11 pm
Answers: 91
Location: Le Mans
Contact:

Re: How to set OUTPUT_OPEN_DRAIN with HardwareTimer?

Post by fpiSTM »

Hi @leonzhao101
Right, we set by default to PP with PULLUP
https://github.com/stm32duino/Arduino_C ... Pins.c#L87

You can simply redefine this array at sketch level to change the default behavior:
https://github.com/stm32duino/Arduino_C ... nmap-array

Code: Select all

const PinMap PinMap_TIM[] = {
  {PA_0,       TIM2, STM_PIN_DATA_EXT(STM_MODE_AF_OD, GPIO_NOPULL, AFIO_NONE, 1, 0)}, // TIM2_CH1
...
  {NC,         NP,   0}
};
Post Reply

Return to “General discussion”