一、PWM

使用定时器17的通道1使PA7引脚输出PWM。

STM32CubeMX配置:

系统主频80MHZ,经过(79+1)分频,得到1MHZ,计数值为(999+1),比较值为(299+1),PWM1模式,输出极性为高,则频率为1khz,占空比为30%(小于300,输出高电平)。

注:PWM波的输出不用配置中断。

HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1);   // pwm输出

在while循环前调用该函数即可输出波形。

设置PWM波的占空比:__HAL_TIM_SET_COMPARE();

设置PWM波的频率:__HAL_TIM_SET_AUTORELOAD(),一般设置频率时,要使占空比不变,所以,还要重新设置PWM波的占空比。该函数在运行时设置 TIM 自动重新加载寄存器值,而无需再次调用任何 Init 函数。若需要修改频率,需要使能自动重装载寄存器。

二、方波

使用定时器16的通道1使PA6输出方波。

STM32CubeMX配置:

使用定时器输出模式的翻转模式,与设置的比较直相比,若相等则电平翻转一次,并且触发中断,在中断里面在原来的计数值上在加上比较值。

HAL_TIM_OC_Start_IT(&htim16,TIM_CHANNEL_1); // 方波 ,写在while前的初始化void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM16){if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1){__HAL_TIM_SET_COMPARE(&htim16, TIM_CHANNEL_1, (__HAL_TIM_GET_COUNTER(&htim16)+100)); // 设置比较值}HAL_TIM_OC_Start_IT(&htim16,TIM_CHANNEL_1);}
}

三、波的输入捕获

使用定时器2的通道2是PA1引脚测量波的频率和占空比。

STM32CubeMX配置:

这里信号的输入为通道2,则通道2必须设置为直接输入捕获模式,并且必须选择上升沿触发。通道1选择间接输入捕获模式,选择下升沿触发。

HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); // 输入捕获
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2);void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM2){if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2){period_val = HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_2)+1;duty_val = HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_1)+1;if(period_val){__HAL_TIM_SET_COUNTER(&htim2, 0); freq = 1000000/ period_val;      duty = (duty_val/period_val)*100;}}HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2);}}

注意一定要在每一次捕获数值后,将计数值清0,为下一次捕获做准备。

四、设置PWM波的频率和占空比

①输出频率可调,占空比固定的PWM

每按一次按键1频率增加500hz,每按一次按键2频率减少500hz,并保持占空比不变。

        if(key_up==3){pwm7 = freq; // 获取pwm参数duty7 = 0.1; // duty7 = duty;pwm7 += 500;if(pwm7 > 10000){pwm7=10000;}pwm7_val = 1000000/pwm7;pwm7_duty = pwm7_val * 0.1;__HAL_TIM_SET_AUTORELOAD(&htim3, pwm7_val);__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, pwm7_duty);}

这里如果用输入捕获测得的占空比,频率增加越多,占空比误差越多,建议将占空比固定。

ARR值=1000000 / freq;  (1000000是系统时钟经过预分配提供给定时器的计数时钟)

占空比 = compare值 / arr值 * 100;

②输出频率可调,占空比可以调的PWM

和①一样的,使用一些函数即可,注意打开使能自动重载载值。

设置PWM波的占空比:__HAL_TIM_SET_COMPARE();

设置PWM波的频率:__HAL_TIM_SET_AUTORELOAD();

③交换两路的PWM的频率和占空比

PA6:1khz,占空比:50%;PA7:0.5khz,占空比:10%。每次按键按下交换频率和占空比。

     if(key_up==2){// 获取各PWM的比较值,arr值pwm6_val = __HAL_TIM_GET_AUTORELOAD(&htim16);pwm6_duty = __HAL_TIM_GET_COMPARE(&htim16,TIM_CHANNEL_1);pwm7_val = __HAL_TIM_GET_AUTORELOAD(&htim3);pwm7_duty = __HAL_TIM_GET_COMPARE(&htim3,TIM_CHANNEL_2);// PA6-->PA7__HAL_TIM_SET_AUTORELOAD(&htim16, pwm7_val);__HAL_TIM_SET_COMPARE(&htim16, TIM_CHANNEL_1, pwm7_duty);// PA7-->PA6__HAL_TIM_SET_AUTORELOAD(&htim3, pwm6_val);__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, pwm6_duty);}

注意:修改PWM的参数时,打开使能自动重装载值。

小结

判断定时器的通道:HAL_TIM_ACTIVE_CHANNEL_1

定时器的通道:TIM_CHANNEL_1

启动 PWM 信号生成:HAL_TIM_PWM_Start()

在中断模式下启动 TIM 输入捕获测量:  HAL_TIM_IC_Start_IT()

在中断模式下启动 TIM 输出比较信号生成:HAL_TIM_OC_Start_IT()

设置定时器比较值(占空比):__HAL_TIM_SET_COMPARE()

设置定时器自动重装载值(频率):__HAL_TIM_SET_AUTORELOAD()

获取定时器计数值:__HAL_TIM_GET_COUNTER()

设置定时器计数值:__HAL_TIM_SET_COUNTER()

获取定时器捕获值:HAL_TIM_ReadCapturedValue()

PWM波、方波的输出与捕获相关推荐

  1. STM32之PWM波

    说起PWM波,做过智能小车的人肯定都很清楚了,其实他就是一种脉宽调制.在智能小车上,我们一般用PWM波来控制小车的速度,通过控制方波中高低电平的比例,来达到控制小车转速的目的.而32的芯片他提供了专门 ...

  2. MSP430F5529 DriverLib 库函数学习笔记(六)定时器A产生PWM波

    目录 1.通过Timer_A_outputPWM配置产生PWM波 初始化函数 计算 修改占空比的函数 整体程序 效果 2.单定时器产生多路PWM信号 初始化函数 实验结果 3.对称PWM信号的产生 初 ...

  3. STM32F103输出互补PWM波

    STM32F103单片机定时器自带互补PWM波形输出功能,利用定时器输出比较模式,不仅可以输出互补的 PWM波,还可以设置输出方波的起始相位和死区时间. 下面就总结一下如何实现PWM互补输出. voi ...

  4. STM32单片机一个定时器输出不同频率PWM波

      在使用STM32单片机输出PWM波形的时候,通常可以直接使用定时器提供的PWM模式.可以通过自动重装载寄存器(TIMx_ARR)来设置定时器的输出频率,然后通过捕获/ 比较寄存器 1(TIMx_C ...

  5. STM8学习笔记---定时器输出7路PWM波

    STM8S003F3P6单片机共有三个定时器定时器1.定时器2.定时器4.其中定时器1为16位高级定时器,定时器2为16位通用定时器,定时器4为8位基本定时器.定时器1和定时器2可以输出PWM波.其中 ...

  6. STM32一个定时器同时捕获4路PWM波

    问题的提出: 最近需要用航模遥控器控制遥控车,32单片机做主控,需要用到4个通道即需要捕获4路PWM波.如果用四个定时器来捕获四路PWM波,就太浪费资源了.由于STM32单片机的定时器资源有限,故设想 ...

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

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

  8. AT32(四):TMR——定时器、PWM输出与捕获

    前言 用AT32F421的基础定时器TMR6配合中断实现定时功能,用通用定时器TMR3实现PMW波的输出与捕获.本文记录了测试AT32F4单片机定时器的过程. 环境 VScode ( EIDE + C ...

  9. 高级定时器TIM1输出PWM波

    高级定时器(TIM1和TIM8)相较于通用定时器,它的函数配置更多,一个都不能少,否则输出不了PWM波,所以在此写下通用定时器和高级定时器PWM波配置的区别,以记录问题. 通用定时器TIM3通道1配置 ...

  10. 如何使用定时器捕获一路PWM波信号的频率和占空比

    本次实验将采用定时器2的通道2产生两路频率和占空比均可调的PWM信号,然后使用定时器3的通道1来捕获其中的一路PWM波的频率和占空比. 1.首先来看下产生PWM波的程序,也就是和上篇博客是一样的,只不 ...

最新文章

  1. quagga 简介 开源路由软件
  2. 数据库进阶系列之三:使用Logminer解析Oracle日志
  3. 浅谈PHP的Public、Protected、Private三种方法的区别
  4. 24. [Ext JS 4] 实战之Load Mask(加载遮罩)的显示与隐藏
  5. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals)
  6. hdu3689(kmp+dp)
  7. Java基础---方法的重载(overload)+ 优先向上匹配原则
  8. Debian安装ssh
  9. java水彩画效果滤镜,PS通过滤镜给照片制作水彩画效果
  10. python 日程管理程序_729. 我的日程安排表(Python)
  11. 万众瞩目之下,ANGULAR 2终于正式发布啦!
  12. [Leetcode] 741. Cherry Pickup 解题报告
  13. oracle 磁带备份,磁带备份 - Linux下实现自动备份Oracle数据库_数据库技术_Linux公社-Linux系统门户网站...
  14. 形容计算机专业的人词语,形容一个人很专业很厉害的成语有哪些
  15. 基于Spring Boot的点餐微信小程序设计与实现
  16. 用累积分布函数(CDF)计算期望
  17. 常用数据集/工具下载地址
  18. video.js 播放 流媒体
  19. AndroidStudio 快捷键大全
  20. 盘点2019十大科技并购:IBM收购红帽居首,阿里考拉仅排第十;英特尔20亿美元收购Habana Labs;柳传志将卸任联想……...

热门文章

  1. 村村响农村广播-盐池县农村IP广播案例
  2. xcode 怎么调用midi开发录音_直播_个人工作室入门_1K-2k价位录音编曲声卡推荐
  3. 泰坦尼克号数据集的下载
  4. Python量化基础:时间序列的平稳性检验
  5. 汽车美容4s连锁店会员管理系统【源码分享】
  6. C++实现人机对战围棋(使用Leela Zero权重)-策略
  7. 2022-08-20 mysql范围查询技术专利交底书
  8. 信噪比 香农公式_「香农公式」信噪比/香农公式 - seo实验室
  9. 【图像检测-缺陷检测】基于计算机视觉实现液晶显示器表面缺陷检测含Matlab源码
  10. 夏普SHARP MX-3508N 一体机驱动