打印
[STM32L5]

【STM32L562 DK试用】4、定时器的妙用

[复制链接]
354|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
      STM32L5系列定时器功能丰富,主要包括基本定时功能、PWM生成与信号捕获等。
      基本定时功能是其最基础的应用,能够设置时间延迟或进行周期性定时操作,适用于各种简单的定时任务。
      PWM(脉冲宽度调制)功能使得STM32L5定时器能够生成具有特定占空比和频率的波形,广泛应用于电机控制、LED调光及电源管理等场景。通过配置预分频器、自动重装载值和占空比等参数,可以精确控制PWM信号的输出。
      STM32L5定时器还支持输入捕获功能,能够检测外部信号的边沿变化,并记录当前定时器的值。该功能主要用于测量信号的脉宽或频率,通过配置滤波器、捕获极性和映射通道等参数,可以实现对外部信号的精确捕获和处理。
      我们本此时根据外设的基本情况实现基本定时功能,以及拟通过LED进行PWM输出的展示。
      这个时候我们需要看看外设情况:
      之前用的两个LED居然不支持定时器的通道输出,那我们就没法使用板载的LED了吗?不用担心,板子的外设资源是很丰富的,我们又找到了一个LED:
      这个LED对应的引脚是PG9:
      这个引脚支持定时器的通道输出,不过有一点特殊的是这是一个互补的通道,一般会用在一些电机控制的引脚。
      接下来开始我们定时器的相关控制:
      普通定时器选择的是TIM6,并定时10ms;
      PWM输出需要配置时钟源、通道、定时基准等信息,这里我们实现配置的频率为1KHz。
      接下来我们就要进行一些初始化的操作,要开启相关的定时器:
<p>HAL_TIM_Base_Start_IT(&htim6);</p><p>HAL_TIM_PWM_Start(&htim15,TIM_CHANNEL_1);</p><p>HAL_TIMEx_PWMN_Start(&htim15, TIM_CHANNEL_1);</p><p>__HAL_TIM_SET_COMPARE(&htim15,TIM_CHANNEL_1,500);</p>

      然后就是在定时器的回调函数中进行呼吸灯的变化控制:
<p>void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)</p><p>{</p><p>    if (htim->Instance == TIM6) {</p><p>        HAL_IncTick();</p><p>        Tim_cnt++;</p><p>        if(Tim_cnt <= 100){</p><p>            __HAL_TIM_SET_COMPARE(&htim15,TIM_CHANNEL_1,Tim_cnt*10);</p><p>            if(Tim_cnt == 100)</p><p>                HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);</p><p>        }</p><p>        else if(Tim_cnt > 100 && Tim_cnt <= 200){</p><p>            __HAL_TIM_SET_COMPARE(&htim15,TIM_CHANNEL_1,(200-Tim_cnt)*10);</p><p>            if(Tim_cnt == 200)</p><p>            HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);</p><p>        }</p><p>        else</p><p>        Tim_cnt = 0;</p><p>    }</p><p>}</p>

      效果如下:

使用特权

评论回复
沙发
qintian0303| | 2025-3-17 12:14 | 只看该作者
PWM的输出控制正常吗?我在配置的是后一直无输出,可能是什么原因导致的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

215

帖子

0

粉丝