前期准备:

  1. STM32CubeMX
  2. STM32RCT6核心板
  3. IDE Keil(MDK-ARM)

STM32CubeMX部分

1. 配置时钟

选择STM32F103RCTx系列芯片,配置时钟的同时会自动配置IO口引脚

将HCLK设置为最大频率72MHz

2.配置PWM

脉冲宽度调试(PWM):脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

STM32F1系列中:
高级定时器:TIM1、TIM8
通用定时器:TIM2、TIM3、TIM4、TIM5
基本定时器:TIM6、TIM7

STM32的每个通用定时器都有独立的4个通道可以用来作为:输入捕获、输出比较、PWM输出、单脉冲模式输出等

STM32的定时器除了TIM6和TIM7(基本定时器)之外,其他的定时器都可以产生PWM输出。其中,高级定时器TIM1、TIM8可以同时产生7路PWM输出

原理讲解

向上计数模式:

  • 当CNT<CCRx时,TIMx_CHx通道输出低电平
  • 当CNT>CCRx时,TIMx_CHx通道输出高电平

一个PWM周期:

0~t1:CNT<CCRx,输出低电平
t1~t2:CNT>CCRx,输出高电平
t2:当CNT到达ARR时,定时器溢出,CNT归0,一个PWM周期结束

每个定时器有4个通道,每个通道都有一个捕获比较寄存器(即获取CNT的值,与CCRx进行比较),通过比较输出高低电平,以此来实现对脉宽的调制(PWM)
TIMx_ARR寄存器确定PWM频率
TIMx_CCRx寄存器确定占空比

PWM工作模式:

  • PWM模式1(向上计数): 计数器从0加到ARR(自动重装载值),计数器溢出,然后计数器归为0,继续加循环
  • PWM模式1(向下计数): 计数器从ARR(自动重装载值) 减到0,计数器溢出。然后计数器归为ARR,继续减循环

PWM输出模式:

  • PWM模式1:向上计数时,当CNT<CCRx时通道x为有效电平,当CNT>CCRx时通道x为无效电平; 在向下计数时,当CNT>CCRx时通道x为无效电平,当CNT<CCRx时通道x为有效电平
  • PWM模式2:向上计数时,当CNT<CCRx时通道x为无效电平,当CNT>CCRx时通道x为有效电平; 在向下计数时,当CNT>CCRx时通道x为有效电平,当CNT<CCRx时通道x为无效电平
  • 有效电平可以是高电平也可以是低电平,具体得看CCER寄存器的CC1P位的值来确定。
    CC1P=0 : 有效电平为
    CC1P=1 : 有效电平为
    CC1P=0,向上模式时,当CNT<CCRx时,输出电平为高
    CC1P=1,向上模式时,当CNT<CCRx时,输出电平为低

这里以TIM1_CH1 PA8举例


点击PA8,选择TIM1_CH 1

  • Internal Clock(内部时钟)
  • 通道1选择:PWM Generation CH1(PWM输出通道1)
  • Prtscaler (定时器分频系数) : 71
  • Counter Mode(计数模式):Up(向上计数模式)
  • Counter Period(自动重装载值) : 999
  • CKD(时钟分频因子) :No Division (不分频 )
  • auto-reload-preload(自动重装载) : Enable (使能)
  • Mode :PWM模式1
  • Pulse(占空比值) :0
  • Fast Mode PWM脉冲快速模式(没啥用) :不使能
  • PWM 极性(有效电平): 设置为高电平

PWM频率:
ω =Tclk / ((arr+1)*(psc+1)) (单位Hz)

  • arr计数器值
  • psc预分频值
  • Tclk时钟频率

例:Tclk=72Mhz,arr=71,psc=499.
ω=72000000/3600 = 2000Hz = 2KHz

占空比:
占空比 = CCRx / arr (单位%)
CCRx是可以预设的值

例:CCRx=100,arr=499
占空比≈20%

3. 工程生成


工程管理依旧是这几个选项,然后GENERATE CODE,STM32CubeMX部分完成。

MDK 5部分

在main.c文件添加变量

 /* USER CODE BEGIN 1 */
uint16_t pwm=0;   //占空比/* USER CODE END 1 */

然后开启PWM的通道1

 /* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);  //开启PWM通道1/* USER CODE END 2 */

接着在while(1)写入代码

    /* USER CODE BEGIN 3 */while (pwm< 499){pwm++;__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, pwm);    //通过修改比较值来改变占空比
//        TIM3->CCR1 = pwmVal;    可通过操作寄存器来控制CCR1的值}while (pwm){pwm--;__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, pwm);    //通过修改比较值来改变占空比
//        TIM3->CCR1 = pwmVal;    可通过操作寄存器来控制CCR1的值HAL_Delay(1);}HAL_Delay(200);}/* USER CODE END 3 */

编译下载时需要选择相对应的下载器,勾选以下

运行即可

本期工程文档——>Gitee

【STM32】HAL库——定时器PWM输出相关推荐

  1. 【春节歌曲回味 | STM32小音乐盒 】PWM+定时器驱动无源蜂鸣器(STM32 HAL库)

    l  STM32通过PWM与定时器方式控制无源蜂鸣器鸣响 l  STM32小音乐盒,歌曲进度条图形显示与百分比显示,歌曲切换 l  编程使用STM32 HAL库 l  IIC OLED界面编程,动画实 ...

  2. STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数

    STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数 一.步进电机闭环驱动器 二.CubeMx配置 1.Clock Configuration 2.脉冲端 定时器配置 3. ...

  3. STM32定时器—PWM 输出

    26.1 关于 PWM 26.1.1 PWM 介绍 PWM(Pulse Width Modulation,脉冲宽度调制).是一种利用微处理器的数字输出来对模拟电路进行控制的技术,广泛应用在测量.通信. ...

  4. STM32 HAL库PID控制电机 第二章 TB6612FNG芯片驱动GB37-520电机

    STM32 HAL库PID控制电机 第二章 TB6612FNG芯片驱动GB37-520电机(HAL库) 1 电路图 2 TB6612简介 TB6612是双驱动,可同时驱动两个电机 STBY:接单片机的 ...

  5. STM32 HAL库PID控制电机 第三章 PID控制双电机

    STM32 HAL库PID控制电机 第三章 PID控制双电机 注:本文含全部PID控制代码,保证可以运行,如不能运行可以留言回复 1 基础配置 1.1 编码器电路图及配置 引脚 定时器通道 PA0 T ...

  6. STM32 HAL库 CUBEMX配置 ADC采集

    文章目录 STM32 HAL库 CUBEMX配置 ADC采集 软硬件型号 1.单通道不定时任意时刻采集信号 CUBEMX配置 代码添加 2.单通道ADC采集+DMA传输 CUBEMX添加配置 代码添加 ...

  7. STM32CubeMX之定时器PWM输出

    STM32CubeMX之定时器PWM输出 知识百科 – PWM简介   PWM是一种对模拟信号电平进行​​ ​​数字编码​​​​​的方法.通过高​​ ​​分辨率​​​​计数器的使用,方波的占空比被调制 ...

  8. STM32 HAL库

    STM32 HAL库 第三章 MDK5 软件入门 bug解决 关键文件介绍 程序仿真 User Keywords 语法提示 代码编辑/查看技巧 第四章 STM32F1 基础知识入门 MDK 下 C 语 ...

  9. 基于STM32 HAL库的遥控小车

    目录 前言 一.材料清单 二.系统概述 三.硬件设计 1.HC-SR04超声波模块 2.HC-05/06蓝牙模块 3.L298n电机驱动模块 四.代码 1.引脚设置 2.遥控部分 3.超声波报警部分 ...

最新文章

  1. scrapy 分布式爬虫- RedisSpider
  2. python导入本地文件-Python使用import导入本地脚本及导入模块的技巧总结
  3. Access-Control-Allow-Origin跨域问题的报错以及解决
  4. 又一次寻找bug的经历...这次是 openlayers + chrome + win7
  5. PureFtp的安装与配置
  6. 计算机基础-计算机系统的安装
  7. 英语词根与说文解字词典读书笔记,并总结输出思维导图
  8. css td中画斜线,css 模拟表格斜线
  9. 关于虚拟机非正常关机的解决方案
  10. Jmeter监控之PerfMon Metrics Collector
  11. J.Serval and Essay(tarjan求拓扑序)
  12. wp下载吧主题模板_内含newzhan2.60无授权版本
  13. 看到它,让我想起了帅出天际的精灵王子……
  14. 城市大脑与超级智能城市建设规范研究
  15. 使用命令行打开应用程序
  16. 易车网上报价到底可信不可信?
  17. Linux中断申请之request_threaded_irq
  18. 电气simulink常用模块_「西门子1200PLC教程」2.CPU家族及模块
  19. 网际快车FlashGet全新使用技巧精彩荟萃
  20. 浙大链协Web3.0系列Workshop启动!

热门文章

  1. Docker安装BookStack,打造属于您公司自己的开源wiki
  2. java控制excel_利用Java控制EXCEL实例详解
  3. 【Tanh的标量实现】
  4. stack and unstack
  5. 用iMazing管理苹果手机的四大特色功能
  6. CrackMe160 学习笔记 之 054
  7. 直线、圆、三角形等分平面部分数的问题
  8. flask爱家租房项目开发(十三)
  9. 微信小程序 java音乐播放器系统uniapp
  10. 基于sqlserver的数据库复习