STM32
直播中

xiangwangzihui

11年用户 511经验值
擅长:模拟技术
私信 关注
[问答]

怎么实现STM32 HAL库定时器PWM输出?

怎么实现STM32 HAL库定时器PWM输出?

回帖(1)

陈涛

2021-11-26 09:45:50
    环境:
1、STM32CubeMX 5.3
2、Atollic TrueSTUDIO for STM32 9.3.0
3、战舰迷你板(stm32f103rb)

  本章效果为LED灯由PWM控制,由暗到亮,再由亮到暗,反复循环。
    (一)配置LED灯引脚为输入模式

  
  

  

  (二)配置定时器

  频率的计算方法:

  

  

定时器配置频率为10KHZ,所以ARR=99,PSC=71,占空比范围就是ARR的范围:0-100,100就是全为高:

  

  


初始化定时器后要使能PWM输出:


HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
1
改变捕获比较值,也就是改变占空比:


__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, val);
1
正点原子mini板的PA8是led灯,定时器3的PWM输出通道2是PA7,所以在板子上用跳线帽将PA8和PA7连接起来即可:


int main(void)
{
        uint8_t mode = 1;
        uint32_t led0pwmval = 0;
        int i = 0;


        HAL_Init();
        SystemClock_Config();


        MX_GPIO_Init();
        MX_TIM3_Init();
        MX_USART1_UART_Init();
        HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);                // 使能PWM输出


        while (1)
        {
                if (mode)
                        led0pwmval++;
                else
                        led0pwmval--;


                if (led0pwmval >= 100)
                        mode = 0;
                if (led0pwmval == 0)
                        mode = 1;


                __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, led0pwmval);                // 改变占空比
                HAL_Delay(10);


                i++;
                if (i >= 100)
                {
                        i = 0;
                        HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
                }
        }
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分