1、PWM原理(Pulse Width Modulation)
TIM1&TIM8高级定时器可以输出7路PWM

ARR:自动重装载值;CCRX:比较寄存器的设定值
原理:通过定时器不断技计数,是CNT增加,当CNT<CCRX时,通道输出低电平;当CNT>CCRX时,输出高电平;当CNT=ARR时,计数器清零循环计数。
ARR决定了PWM 的周期,CCRX决定了PWM的占空比。其中X为PWM的通道。
2、PWM模式的区别(寄存器CCMR决定PWM模式)
PWM1:不管是向上计数还是向下计数,只要CNT<CCRX,则输出有效电平;当CNT>CCRX输出无效电平
PWM2:与PWM1正好相反
3、PWM极性(CCER:0,高电平有效;1,低电平有效)
以LED灯为例:
设置PWM1模式,CCR1=300,低电平有效,当CNT<CCR1时,输出有效电平低电平,LED低电平时点亮;
设置PWM2模式,CCR1=300,高电平有效,当CNT>CCR1时,输出有效电平高电平,LED高电平时熄灭;
二者的效果相同。
注:低电平时间越长LED 越亮,否则越暗。
附呼吸灯代码

/************************************************
*   PWM实验
*   功能:呼吸灯
*   TIM1;CH1;
*************************************************/TIM_HandleTypeDef  TIM1_Handler;         //定时器1句柄
TIM_OC_InitTypeDef TIM1_CHnHandler;      //定时器1 PWM句柄/*TIM1初始化函数*/
void PWM_Init(u16 arr, u16 psc)
{TIM1_Handler.Instance = TIM1;TIM1_Handler.Init.Prescaler = psc;TIM1_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;TIM1_Handler.Init.Period = arr;TIM1_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
//  TIM1_Handler.Init.RepetitionCounter = 0;HAL_TIM_PWM_Init(&TIM1_Handler);TIM1_CHnHandler.OCMode = TIM_OCMODE_PWM2;TIM1_CHnHandler.Pulse = arr / 2;/*PWM输出极性*/TIM1_CHnHandler.OCPolarity = TIM_OCPOLARITY_HIGH;/*通道1*/HAL_TIM_PWM_ConfigChannel(&TIM1_Handler, &TIM1_CHnHandler, TIM_CHANNEL_1);HAL_TIM_PWM_Start(&TIM1_Handler, TIM_CHANNEL_1);/*通道2*/
//  HAL_TIM_PWM_ConfigChannel(&TIM1_Handler, &TIM1_CHnHandler, TIM_CHANNEL_2);
//  HAL_TIM_PWM_Start(&TIM1_Handler, TIM_CHANNEL_2);}/***************************************
*   定时器底层驱动,此函数会被HAL_TIM_PWM_Init()调用
*   时钟使能,引脚配置
****************************************/void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{GPIO_InitTypeDef GPIO_Initure;__HAL_RCC_TIM1_CLK_ENABLE();__HAL_RCC_GPIOE_CLK_ENABLE();GPIO_Initure.Pin = GPIO_PIN_9;GPIO_Initure.Mode = GPIO_MODE_AF_PP;GPIO_Initure.Pull = GPIO_PULLUP;GPIO_Initure.Speed = GPIO_SPEED_HIGH;GPIO_Initure.Alternate = GPIO_AF1_TIM1;HAL_GPIO_Init(GPIOE, &GPIO_Initure);}/*设置占空比*/
void TIM_SetTIM1Compare1(u32 compare)
{TIM1->CCR1 = compare;
}

主函数

int main(void)
{u8 dir = 1; u16 pwmval = 0;//PWM默认值HAL_Init();SystemClock_Config();  //初始化系统时钟为80Mdelay_init(80);        //初始化延时函数    80M系统时钟uart_init(115200);PWM_Init(1000 - 1, 80 - 1);while(1){delay_ms(10);if(dir) pwmval++;else pwmval--;if(pwmval > 300) dir = 0;if(pwmval==0) dir = 1;TIM_SetTIM1Compare1(pwmval);}
}

HAL库学习之高级定时器输出PWM相关推荐

  1. HAL库教程10:定时器的PWM模式应用

      本节通过定时器的PWM模式驱动无源蜂鸣器,来演奏一段音乐.本博客在掌机的系列教程中介绍过蜂鸣器的驱动原理,感兴趣的可以参考电子琴 无源蜂鸣器驱动电路   蜂鸣器按照有无震荡源(不是电源),可以分为 ...

  2. STM32f103C8定时器输出PWM波信号

    利用stm32高级定时器输出PWM,模拟呼吸灯的效果带刹车功能.由于没有示波器查看输出的pwm波形图,所以本次实验使用普通直流电机模拟的. 本文章为学习笔记,其中有些地方解释的不是那么的好,即本笔记可 ...

  3. 嵌入式学习——使用定时器输出PWM波形,实现 LED呼吸灯的效果

    嵌入式学习--使用定时器输出PWM波形,实现 LED呼吸灯的效果 目录 嵌入式学习--使用定时器输出PWM波形,实现 LED呼吸灯的效果 1. 任务要求 2 PWM波介绍, 2.1 什么是PWM(Pu ...

  4. STM32CubeMX与HAL库学习--基本定时器定时中断

    STM32CubeMX与HAL库学习--基本定时器定时中断 背景 STM32CubeMX生成初始化代码 在MDK-ARM里编辑代码 其他 背景 本人小白,最近在学着使用STM32CubeMX与HAL库 ...

  5. STM32学习笔记:通用定时器输出PWM

    脉冲宽度调制,简称PWM(Pulse Width Modulation)是利用微处理器的数字输出 对模拟电路进行控制的一种非常有效的控制技术,常用于控制Led灯的亮度.电机转速等. STM32 的定时 ...

  6. 嵌入式学习--使用定时器输出PWM波形,实现LED呼吸灯的效果

    目录 1.任务要求 2.PWM介绍 关于PWM的定义 分频-计数时钟 计数器 定时器输出PWM的原理 定时器的初始化 3.配置STM32CubeMX 4.keil5的代码 5.运行结果 6.心得与体会 ...

  7. HAL库学STM32 关于定时器的几个问题

    编者按:路漫漫其修远兮,吾将上下而求索.这句从小学在"日积月累"模块背下来的话,是对屈原最深刻的印象了.昨晚又看了三毛的<撒哈拉的故事>,人生的最大的感动,左不过就是在 ...

  8. STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值

    参考:stm32 定时器输出PWM原理及工作原理+控制舵机 作者:点灯小哥 发布时间: 2021-03-09 23:17:52 网址:https://blog.csdn.net/weixin_4601 ...

  9. STM32 HAL库学习笔记1-HAL库简介

    STM32 HAL库学习笔记1-HAL库简介 HAL库 SPL 库 和 HAL 库两者相互独立,互不兼容.几种库的比较如下 目前几种库对不同芯片的支持情况如下 ST 中文官网上有一篇<关于ST库 ...

最新文章

  1. vbs脚本编程与windows批处理命令初体验
  2. .NET开发框架(八)-服务器集群之网络负载平衡(视频)
  3. 51单片机数码管小数点c语言,求助一个51单片机控制的数码管计算器带小数点功能的...
  4. sftp配置导致ssh连接闪断
  5. 阶段3 1.Mybatis_09.Mybatis的多表操作_6 分析mybatis多对多的步骤并搭建环境
  6. 网易丁磊提议统一充电接口
  7. 基于Web服务的物联网-WoT(Web of Things)
  8. 郑大计算机专业英语01章,郑州大学远程教育《大学英语II》第01章在线测试
  9. matlab 图像二值化 后0、1像素的个数统计
  10. 小程序 朋友圈,点赞 ,评论,发布动态,功能,上传图片 -----发布动态
  11. stata命令汇总_Stata常用命令应知应会(500条)
  12. 瓦力机器人故障维修_机器人瓦力让人无力吐槽的坑爹剧情!
  13. 【2012级新生请猛击】NEW COMER FIRST BLOOD 完全题解及代码
  14. 华为2020届逻辑笔试
  15. python处理文档对象【三方库—lxml】
  16. 帝国cms模板开发教程(二):了解帝国cms模板核心构成页面有哪些?
  17. 等式(分解质因子求因子个数)
  18. 统计学习方法|隐马尔可夫模型
  19. linux声卡驱动源码,创新公布X-Fi系列声卡Linux驱动源代码
  20. QQ消息窗口弹出思路

热门文章

  1. XMind2TestCase思维导图测试用例转Excel使用方法
  2. java编程之java jwt token什么是JWT?(一)
  3. ABP框架初试(2)
  4. 亚马逊上如何和卖家沟通
  5. python+selenium自动化测试框架详解,我就讲一遍
  6. 最好的骨传导耳机品牌有哪些?好用的骨传导耳机推荐
  7. java partial class_C# partial 说明
  8. 最热网友收藏:ASP.net 2.0资料吐血收藏(2007年第11周)
  9. html5京东秒杀页面代码,静态页面(一):原生JS模拟京东秒杀专场倒计时
  10. 一起学:仓库管理的相关指标