STM32L011D3 IR led

问题描述 投票:0回答:1

我用STM32L011D3和一个LED搭建了一个小板。我想使用38kHz的LED,占空比为50%。现在,我将LED连接到MCU的错误引脚,因此无法直接将定时器用作PWM发生器。所以我试图在主循环中手动生成PWM信号。我以为这样会行得通,因为实际上我没有在MCU上做任何其他事情。

我配置了我的时钟,如下图所示:clock configuration

我配置的计时器TIM2如下图所示:timer configuration

所以这意味着我应该有4MHz / 4/26 = 38.461kHz

主循环当前看起来像这样:main loop

通过这种设置,我得到了大约37us / 37us的折扣。时间不太稳定。

可能是,我启用/禁用led的指令太长而无法在25us内全部执行,以获得稳定的pwm输出?

embedded stm32 pwm
1个回答
1
投票

您正在浪费时间阅读输出-对其进行设置,所以您已经知道它是什么了:

for(;;)
{
    int out = (timer2Value >= 13) ? GPIO_PIN_SET : GPIO_PIN_RESET ;
    HAL_GPIO_WritePin( GPIOA, GPIO_PIN_7, out ) ;
}

如果时间没有改变,那么问题很可能是您的时钟未以您认为的频率运行。

更具确定性的解决方案(缺少纠正硬件设计的方法是,设置计时器以38000 -1的间隔生成中断,并在中断处理程序中切换输出:]]

void TIM2_IRQHandler()
{
    static int out = 0 ;
    out = out ? 0 : 1 ;
    HAL_GPIO_WritePin( GPIOA, GPIO_PIN_7, out ) ;
}

甚至只是:

void TIM2_IRQHandler()
{
    HAL_GPIO_TogglePin( GPIOA, GPIO_PIN_7 ) ;
}
© www.soinside.com 2019 - 2024. All rights reserved.