[其他ST产品] STM32-HAL库04-PWM输出

[复制链接]
919|15
 楼主| caoyunhj2301 发表于 2023-10-28 22:59 | 显示全部楼层 |阅读模式
STM32-HAL库04-PWM输出
所用材料:
STM32F103C6T6(最小系统板)
STM32cubemx(HAL库软件)
MD5(编程软件)
示波器(DS100)

本节所学内容:
通过TIM2定时器输出500HZ频率的PWM波;
修改部分参数实现PWM波频率的改变;

第一步-新建工程
1.选择MCU-F103C6Tx
29135653d21de7c0f6.png
 楼主| caoyunhj2301 发表于 2023-10-28 23:00 | 显示全部楼层
第二步-SYS设置
将DEBUG选线设置为Serial Wire
97740653d21f8008b2.png
 楼主| caoyunhj2301 发表于 2023-10-28 23:00 | 显示全部楼层
第三步-RCC设置
选择高速外部时钟

92131653d2214ae4ce.png
 楼主| caoyunhj2301 发表于 2023-10-28 23:00 | 显示全部楼层
第四步-PWM配置

Timers-TIM2-Channel1-(PWM Generation CH1)
Parameter Settings-Counter Settings-Prescale-(71)
Parameter Settings-Counter Settings-Counter Period-(1999)
Parameter Settings-Counter Settings-auto reload preload-Enable
Parameter Settings-PWM Generation CH1-Pluse-(1000)
 楼主| caoyunhj2301 发表于 2023-10-28 23:01 | 显示全部楼层
其中Prescale为预分频值,Counter Period为计数值,两者共同决定PWM波的频率,而Pluse用于确定PWM波的占空比,具体公式如下:

/*--------------------------------------------------
PWM波频率:F=72M/[(ARR+1)*(PSC+1)]
占空比:          Q=Pluse/(ARR+1)
本文中为输出500HZ频率的占空比为50%的PWM波,故PSC取值为71,
ARR取值为1999,Pluse取值为1000.
--------------------------------------------------*/
 楼主| caoyunhj2301 发表于 2023-10-28 23:01 | 显示全部楼层
 楼主| caoyunhj2301 发表于 2023-10-28 23:01 | 显示全部楼层
第五步-时钟配置
43087653d22463a82b.png
 楼主| caoyunhj2301 发表于 2023-10-28 23:02 | 显示全部楼层
第六步-文件配置

54933653d2298be3c1.png
 楼主| caoyunhj2301 发表于 2023-10-28 23:03 | 显示全部楼层
 楼主| caoyunhj2301 发表于 2023-10-28 23:03 | 显示全部楼层
第七步-程序编写

打开MDK5
烧录程序设置:魔术棒-DEBUG(选择STlink)-Settings-Flash Download-勾选Reset and run
 楼主| caoyunhj2301 发表于 2023-10-28 23:03 | 显示全部楼层
 楼主| caoyunhj2301 发表于 2023-10-28 23:03 | 显示全部楼层
实现输出500HZ的PWM波
在main.c中添加如下程序:
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
 楼主| caoyunhj2301 发表于 2023-10-28 23:03 | 显示全部楼层
其中主函数具体如下:
  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */

  4.   /* USER CODE END 1 */
  5.   HAL_Init();
  6.   SystemClock_Config();
  7.   MX_GPIO_Init();
  8.   MX_TIM2_Init();
  9.   /* USER CODE BEGIN 2 */
  10.         HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
  11.   /* USER CODE END 2 */
  12.   /* USER CODE BEGIN WHILE */
  13.   while (1)
  14.   {
  15.                
  16.     /* USER CODE END WHILE */

  17.     /* USER CODE BEGIN 3 */
  18.   }
  19.   /* USER CODE END 3 */
  20. }
 楼主| caoyunhj2301 发表于 2023-10-28 23:04 | 显示全部楼层
实现修改参数输出目标频率的PWM波
通过修改参数PSC或ARR可以改变PWM波的频率:目标5000HZ,改ARR,PSC不变

  1. __HAL_TIM_SET_AUTORELOAD(&htim2, 199);                                                //可以改变arr以改变频率
 楼主| caoyunhj2301 发表于 2023-10-28 23:04 | 显示全部楼层
通过修改参数Pluse可以改变PWM波的占空比:目标为40%

  1. __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, 80); //修改占空比比较值,一直保持占空比50%       
 楼主| caoyunhj2301 发表于 2023-10-28 23:04 | 显示全部楼层
其中主函数如下:

  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */

  4.   /* USER CODE END 1 */
  5.   HAL_Init();
  6.   SystemClock_Config();
  7.   MX_GPIO_Init();
  8.   MX_TIM2_Init();
  9.   /* USER CODE BEGIN 2 */
  10.         HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
  11.         HAL_Delay(500);
  12.         __HAL_TIM_SET_AUTORELOAD(&htim2, 199);                                                //可以改变arr以改变频率
  13.         __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, 80); //修改占空比比较值,一直保持占空比50%       
  14.   /* USER CODE END 2 */
  15.   /* USER CODE BEGIN WHILE */
  16.   while (1)
  17.   {
  18.                
  19.     /* USER CODE END WHILE */

  20.     /* USER CODE BEGIN 3 */
  21.   }
  22.   /* USER CODE END 3 */
  23. }
帛灿灿 发表于 2024-2-9 07:11 | 显示全部楼层

JUnit(用于 Java)、SUnit(用于 Smalltalk)和 CppUnit(用于 C++)等框架提供了丰富的功能集
Bblythe 发表于 2024-2-9 08:14 | 显示全部楼层

通过输入和输出电流环“逃逸”到外面环境中
周半梅 发表于 2024-2-9 10:10 | 显示全部楼层

一种了解状态变化的简单方法
Pulitzer 发表于 2024-2-9 11:13 | 显示全部楼层

输入环路通过近似直流的电流对输入电容充电
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

298

帖子

2

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