打印
[其他ST产品]

STM32-HAL库04-PWM输出

[复制链接]
362|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
STM32-HAL库04-PWM输出
所用材料:
STM32F103C6T6(最小系统板)
STM32cubemx(HAL库软件)
MD5(编程软件)
示波器(DS100)

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

第一步-新建工程
1.选择MCU-F103C6Tx

使用特权

评论回复
沙发
caoyunhj2301|  楼主 | 2023-10-28 23:00 | 只看该作者
第二步-SYS设置
将DEBUG选线设置为Serial Wire

使用特权

评论回复
板凳
caoyunhj2301|  楼主 | 2023-10-28 23:00 | 只看该作者
第三步-RCC设置
选择高速外部时钟

使用特权

评论回复
地板
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)

使用特权

评论回复
5
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.
--------------------------------------------------*/

使用特权

评论回复
6
caoyunhj2301|  楼主 | 2023-10-28 23:01 | 只看该作者

使用特权

评论回复
7
caoyunhj2301|  楼主 | 2023-10-28 23:01 | 只看该作者
第五步-时钟配置

使用特权

评论回复
8
caoyunhj2301|  楼主 | 2023-10-28 23:02 | 只看该作者
第六步-文件配置

使用特权

评论回复
9
caoyunhj2301|  楼主 | 2023-10-28 23:03 | 只看该作者

使用特权

评论回复
10
caoyunhj2301|  楼主 | 2023-10-28 23:03 | 只看该作者
第七步-程序编写

打开MDK5
烧录程序设置:魔术棒-DEBUG(选择STlink)-Settings-Flash Download-勾选Reset and run

使用特权

评论回复
11
caoyunhj2301|  楼主 | 2023-10-28 23:03 | 只看该作者

使用特权

评论回复
12
caoyunhj2301|  楼主 | 2023-10-28 23:03 | 只看该作者
实现输出500HZ的PWM波
在main.c中添加如下程序:
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);

使用特权

评论回复
13
caoyunhj2301|  楼主 | 2023-10-28 23:03 | 只看该作者
其中主函数具体如下:
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
        HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
  /* USER CODE END 2 */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
               
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

使用特权

评论回复
14
caoyunhj2301|  楼主 | 2023-10-28 23:04 | 只看该作者
实现修改参数输出目标频率的PWM波
通过修改参数PSC或ARR可以改变PWM波的频率:目标5000HZ,改ARR,PSC不变

__HAL_TIM_SET_AUTORELOAD(&htim2, 199);                                                //可以改变arr以改变频率

使用特权

评论回复
15
caoyunhj2301|  楼主 | 2023-10-28 23:04 | 只看该作者
通过修改参数Pluse可以改变PWM波的占空比:目标为40%

__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, 80); //修改占空比比较值,一直保持占空比50%        

使用特权

评论回复
16
caoyunhj2301|  楼主 | 2023-10-28 23:04 | 只看该作者
其中主函数如下:

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

  /* USER CODE END 1 */
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
        HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
        HAL_Delay(500);
        __HAL_TIM_SET_AUTORELOAD(&htim2, 199);                                                //可以改变arr以改变频率
        __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, 80); //修改占空比比较值,一直保持占空比50%       
  /* USER CODE END 2 */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
               
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

使用特权

评论回复
17
帛灿灿| | 2024-2-9 07:11 | 只看该作者

JUnit(用于 Java)、SUnit(用于 Smalltalk)和 CppUnit(用于 C++)等框架提供了丰富的功能集

使用特权

评论回复
18
Bblythe| | 2024-2-9 08:14 | 只看该作者

通过输入和输出电流环“逃逸”到外面环境中

使用特权

评论回复
19
周半梅| | 2024-2-9 10:10 | 只看该作者

一种了解状态变化的简单方法

使用特权

评论回复
20
Pulitzer| | 2024-2-9 11:13 | 只看该作者

输入环路通过近似直流的电流对输入电容充电

使用特权

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

本版积分规则

30

主题

267

帖子

1

粉丝