STM32产生PWM

在笔者的上一个博客《STM32F103C8T6编写简单的程序并烧录到板卡上》中,简单介绍了如何产生一个PWM波,但读者可能对设置PWM过程中修改的参数不是很理解。本篇博客将重点讲述如何设置PWM波的频率和初始占空比,以及如何实现占空比可调的PWM。本文中笔者使用的STM32型号仍然是F103C8T6,如果你的STM32型号与之不同也没关系,具体的操作方法是一样的,只是使用的具体引脚需要改变。

1.设置频率和占空比

首先按照《STM32F103C8T6编写简单的程序并烧录到板卡上》将PA8引脚设置为PWM输出引脚。

在Pinout & Configuration -> Timers -> TIMX 的Parameter Settings一栏中:

Prescaler代表分频数,首先参照《STM32F103C8T6编写简单的程序并烧录到板卡上》将时钟频率设置为8MHz,然后将Prescaler的值设置为128,代表PWM所用时钟频率为8MHz的128分频,即8M÷128=62500Hz。

Counter Mode代表计数模式,设置为up表示向上计数。

Counter Period代表一个PWM脉冲所占的时钟周期,将Counter Period的值设置为12500,代表一个PWM脉冲的频率为62500÷12500=5Hz。

在Parameter Settings一栏中向下翻页找到Pulse,它代表PWM中高电平所占的时钟周期,将Pulse的值设置为6250,代表PWM的占空比为6250÷12500=50%。

参照上述过程修改参数之后,PA8口就配置好了频率为5Hz,占空比为50%的PWM波。

2.实现占空比可调的PWM

首先参照1中过程配置好PWM初始化参数,随后在main.c函数中通过以下代码调节占空比:

HAL_TIM_PWM_Start(&htimX, TIM_CHANNEL_Y);
TIMX -> CCRY = 6250;

上述代码中,HAL_TIM_PWM_Start()函数用于启动PWM波的产生,其传入参数中的X代表选用的时钟源编号,Y代表选用的通道编号,如我们选择的PA8则是Timer1中的Channel1,即将上述代码改为:

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
TIM1 -> CCR1 = 6250;

其中“TIM1 -> CCR1 = 6250;”一句代表将PWM中高电平所占的时钟周期设置为6250,这一句等同于在PWM初始化过程中设置Pulse参数为6250。在main.c函数中,将TIM1 -> CCR1值进行改变,即可实现占空比可调的PWM。

3.实战演习-按键控制PWM波的占空比

本次实战演习中,会运用按键控制PWM波的占空比,即初始状态下,PA8引脚输出频率为5Hz,占空比为50%的PWM,每当用户按下一次按键,PWM波的占空比会按照0% -> 25% -> 50% -> 75% -> 100% -> 0% -> …的顺序进行一次改变。

首先按照1中过程在PA8引脚处配置5Hz,初始占空比为50%的PWM波形。参照《STM32F103C8T6编写简单的程序并烧录到板卡上》将按键引脚设置为输入状态。

找到如下代码段:

/* USER CODE BEGIN WHILE */
while(1)
{/* USER CODE END WHILE */
}

将其改为:

/* USER CODE BEGIN WHILE */
int state = 0;
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);while (1)
{if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == 0){HAL_Delay(100);// 消抖if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == 0){state = (state + 1) % 5;switch(state){case 0:TIM1 -> CCR1 = 0;break;case 1:TIM1 -> CCR1 = 3125;break;case 2:TIM1 -> CCR1 = 6250;break;case 3:TIM1 -> CCR1 = 9375;break;default:TIM1 -> CCR1 = 12500;break;}}}/* USER CODE END WHILE */
}

修改完成后,将程序下载到板子上,即可通过点击按键来控制PWM波的占空比了。读者可以通过示波器观察到PWM波占空比的变化。

STM32产生固定频率和占空比可变的PWM相关推荐

  1. 十三届蓝桥杯嵌入式输出比较(频率和占空比可变)

    目录 原理说明: CUBMAX初始化: 代码实现: 问题和注意事项: 引用的文章: 原理说明:​​​​​​​ 输出比较模式下: CCR = CNT 时,翻转输出电平. PWM模式下: CNT < ...

  2. Stm32(寄存器)通道一--输出占空比50%的PWM

    1:目的:用STM32f10x的TIM3产生占空比50%,频率10Khz的方波: 2:操作步骤: (1)开启TIM3时钟: (2)设置自动重装载值和预分频系数: (3)设置通道和PWM模式: (4)使 ...

  3. STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)

    本篇文章包含的内容 一.输入捕获 1.1 输入捕获简介 1.2 输入捕获通道的工作原理 1.3 输入捕获的主从触发模式 1.4 输入捕获和PWMI结构 二.频率的测量方法 2.1 测频法 2.2 测周 ...

  4. STM32用一个定时器输出多路不同频率及占空比的PWM(输出比较模式)

    我们使用STM32输出PWM时会使用定时器的PWM输出模式来进行生成,但是这样子生成PWM是有局限的,它只能生成四路频率相同的PWM,当你设定了TIMx_PSC(预分频寄存器)和TIMx_ARR(自动 ...

  5. STM32的频率和占空比计算

    STM32的PWM应用广泛,最重要的就是调节占空比来达到PWM的控制应用. STM32的一个定时器能同时输出4路PWM分别占据一个通道,而定时器的频率确定了,四个通道的频率也就随之确定,所以同一个定时 ...

  6. STM32中的PWM的频率和占空比的设置

    网上看到一篇文章,不是很完整,但是有助于我理解,个人觉得还可以,具体的代码,网上有很多,大家可以参考参考计算一下. 下面的这个是stm32的定时器逻辑图,上来有助于理解: TIM3的ARR寄存器和PS ...

  7. 使用STM32测量PWM方波频率和占空比的方法

    简介 使用STM32中TIMER的输入捕获功能可以测量PWM方波的频率和占空比.测量通常有两种方法:中断法和DMA传输法.根据我的经验,中断法最多能测量到150KHz的方波,而DMA方法最多可达1MH ...

  8. STM32笔记之PWM输出,调节频率及占空比

    以STM32F103C8T6使用TIM1的CH1,CH4同时输出两路PWM为例: 引脚 定时器 通道 PA8 TIM1 CH1 PA11 TIM1 CH4 步骤: GPIO_InitTypeDef G ...

  9. STM32笔记——定时器输入捕获功能(测量PWM的频率和占空比)

    目录 一.概述 二.输入捕获功能 2.1 输入捕获简介 2.2 输入捕获通道 三.输入捕获功能测量PWM波的频率和占空比 3.1 测量频率的方法 3.2 测量过程 一.概述 主要介绍通用定时器的输入捕 ...

最新文章

  1. 99%的项目经理都不了解项目群管理!
  2. Blink Coordinate Spaces
  3. 生成Gif动画缩略图-Gif动画水印的改进
  4. CSS三栏布局的四种方法
  5. C#中的is和as操作符
  6. 【最详细的分析】1061 Dating (20 分)
  7. Linux6.8 ssh开启,CentOS 6.8升级 ssh到最新版SSH-8.2p1
  8. 机器学习火热,SQL 开发人员有何用?
  9. 波特率、发送/接收时钟、波特率因子、传输距离
  10. JavaScript 和 React,React用了大量语法糖,让JS编写更方便。
  11. 联想智能农业移动应用开发系统用户手册
  12. 快捷键布线报错_Altium Designer 常用快捷键总结(PCB布线)
  13. 微信小程序的开发需要什么费用
  14. 怎么用Goldwave剪辑音乐?GoldWave绿色汉化版使用教程分享
  15. 自己写的uvc摄像头驱动程序
  16. 编写第一个操作WORD文档的应用程序
  17. Win10+NVIDIA TITAN Xp | RTX 2060+Python3.6+TensorFlow_gpu2.1.0+keras2.3.1+cuda10.1+cudnn7.6.5.32记录
  18. 【微信小程序】用户授权及getUserProfile接口使用
  19. MQTT在线公共的MQTT服务器
  20. 为Word文档加水印使其更加美观(转)

热门文章

  1. 怎么把计算机里的文件放到桌面上,ipad怎么把文件放到桌面
  2. 【温故而知新】JavaWEB回顾(八)
  3. 截取某个字符串之前的字符
  4. Android计算标准BMI值
  5. linux7/centos7下源码安装nginx-1.16.1详解
  6. Java 已知三边求三角形求面积
  7. 再不复工,公司就要发现没有我们也能正常运转了
  8. 浅谈域名分级及域名解析过程
  9. mymps蚂蚁分类信息模板二次开发调用标签
  10. 简谈几种ddos防御方法