[STM32C0] 【STM32C092RC 测评】4、板载外设——PWM

[复制链接]
 楼主| 孤独的单行者 发表于 2025-5-10 08:49 | 显示全部楼层 |阅读模式
<
       本次测试PWM的输出准备使用外部的示波器进行查看,PWM是我们比较常用的功能之一,不管是步进电机的驱动还是咱们常见的呼吸还是咱们常见的呼吸灯,实际上都是通过PWM来实现的。还有一些驱动器件的基准也需要通过其提供。实际上PWM是定时器的一个高级功能,我们都知道定时器是通过预分频以及计数来实现的,而我们的pwm就是在达到百分比的一个计数的时候实现的一个状态的翻转,也可以理解为在定时器的周期内插入了一个状态的一个反转。和其他的高级功能一样,都要依托于定时器的基本定时计数功能。
       PWM这类的高级功能就不只是内部模块的使用了,还是需要配合着GPIO的引脚进行工作,PWM需要GPIO进行输出。
       我们开启一个高级定时看一下PWM的实际使用方法:
2b5c92382d895c71ec8f8f89655566a7
       打开定时器后我们可以看到通道的配置,这些通道最后就会连接到固定的一些引脚上,我们看一下CH1对应的默认引脚:
8006be5651e12d5ecc35b2744116eb13
       我们可以看到对应的PA0已经自动配置了:
8909e24618ad267febf0ebd5ea796796
       需要注意的事PWM的输出不需要中断的参与,也就是说不用开启中断,但是必要的定时器参数还是需要配置的和定时器的配置方法是一致的,比如配置为1kHz的频率,如下:
e166938a4cb7269e7e41c69db7ed89ec
       高级定时器还可以进行死区配置,不过咱们这里就不用了,对开始的输出状态也没有太大要求,就按照默认的来:
4a07f120ac44c3553f64fc7807227eea
       初始化阶段需要先开启PWM输出:
  1. <p>HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);</p><p>__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,0);</p>

       接下来我们在上面的三个模式中加入不同的PWM占比:
  1. <p>void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)</p><p>{</p><p>     if(GPIO_Pin == GPIO_PIN_13)</p><p>     {</p><p> LED_Mode++;</p><p> LED_Mode %= 3;</p><p> LED_TimeCnt = 0;</p><p>            HAL_GPIO_TogglePin(User_LED1_GPIO_Port, User_LED1_Pin);</p><p> if(LED_Mode == 0){</p><p>__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,250);</p><p> }</p><p> else if(LED_Mode == 1){</p><p>__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);</p><p> }</p><p> else if(LED_Mode == 2){</p><p>__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,750);</p><p> }</p><p>     }</p><p>}</p>

       三个按键对应三个状态,以下是对应的不同占空比,也是正确的:
80e1db80a512ef97642d542b7452cc1e
fb42cba41f1eabae88b426a6d503cf69
0a1383227d09af5b9dd8ca0d2c38a228

AdaMaYun 发表于 2025-6-8 20:26 | 显示全部楼层
pwm速率是多少?
yiyigirl2014 发表于 2025-6-10 17:39 | 显示全部楼层
最喜欢这个外设了,很多高级应用都是需要它。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

152

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

13

主题

152

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部