当前位置: 首页 > news >正文

STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式)

STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式)

一、所用材料:

STM32F103C6T6最小系统板
STM32CUBEMX(HAL库软件)
MDK5
示波器或者逻辑分析仪

二、所学内容:

通过定时器TIM的输出比较模式得到预定频率与占空比的PWM波形;其中定时器输出比较模式与PWM模式的区别在于!!!PWM模式在同一个TIM下所有输出口的频率一致不能单独控制单个的频率,而输出比较模式就弥补了这一缺点,可以对同一个TIM下的各个输出口分别设置频率。

三、CUBEMX配置:

第一步:老三件套-RCC,SYS,时钟树配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二步:TIM配置

关键参数配置:

  • Prescale-(71)
  • auto reload preload-Disable
  • Output Compare Channel1 -Mode - Toggle on match
  • Output Compare Channel2 -Mode - Toggle on match
    以及点亮TIM2的所有中断
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

第二步:MDK5程序配置

只需要在main.c中加入中断回调函数即可,具体程序如下:

/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "tim.h"
#include "gpio.h"
/* USER CODE BEGIN PTD */
uint16_t OC_Channel1_Pulse=125;  //改变该值可以改变PWM1的频率
uint16_t OC_Channel2_Pulse=1000;  //改变该值可以改变PWM2的频率
uint32_t F_PWM1;				//PWM1的频率设定值
uint32_t F_PWM2;				//PWM2的频率设定值float OC_Channel1_Duty=50;		//PWM1占空比设定
float OC_Channel2_Duty=50;		//PWM2占空比设定void SystemClock_Config(void);int main(void)
{HAL_Init();SystemClock_Config();/* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM1_Init();/* USER CODE BEGIN 2 */HAL_TIM_OC_Start_IT(&htim1,TIM_CHANNEL_1);                 //使能TIM4通道1的输出比较中断TIM_CCxChannelCmd(TIM1,TIM_CHANNEL_1,TIM_CCx_ENABLE);      //使能TIM4通道1HAL_TIM_OC_Start_IT(&htim1,TIM_CHANNEL_2);                 //使能TIM4通道1的输出比较中断TIM_CCxChannelCmd(TIM1,TIM_CHANNEL_2,TIM_CCx_ENABLE);      //使能TIM4通道1/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){F_PWM1=8000;OC_Channel1_Pulse=1000000/F_PWM1;F_PWM2=5000;OC_Channel2_Pulse=1000000/F_PWM2;HAL_Delay(1);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/* USER CODE BEGIN 4 */
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{uint32_t OC_Count = 0;OC_Count = __HAL_TIM_GET_COUNTER(htim);if(htim->Instance == TIM1){if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1){if(GPIO_PIN_RESET == HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8)){__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,OC_Count + OC_Channel1_Pulse - OC_Channel1_Duty*OC_Channel1_Pulse/100);}else{__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,OC_Count + OC_Channel1_Duty*OC_Channel1_Pulse/100);}}else if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2){if(GPIO_PIN_RESET == HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_9)){__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,OC_Count + OC_Channel2_Pulse - OC_Channel2_Duty*OC_Channel2_Pulse/100);}else{__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,OC_Count + OC_Channel2_Duty*OC_Channel2_Pulse/100);}}}
}
/* USER CODE END 4 */

本文中的代码资源免费提供,下载页面如下:
https://download.csdn.net/download/qq_45854134/88495306

http://www.lryc.cn/news/218436.html

相关文章:

  • 【数据结构】深入浅出讲解计数排序【图文详解,搞懂计数排序这一篇就够了】
  • Canvas制作喷泉效果示例
  • 什么是NPM(Node Package Manager)?它的作用是什么?
  • oracle如果不适用toad或者plsql工具如何获取索引建表语句
  • 某大厂伺服驱动器量产方案
  • 【计算机网络】网络层:数据平面
  • Path with “WEB-INF“ or “META-INF“: [webapp/WEB-INF/NewFile.html]
  • 百度OCR 接口调用 提示 216101:param image not exist 问题解决
  • 1-10 HTML中input属性
  • 共焦显微镜使用
  • windows + Mingw32-make 编译 PoDoFo库,openssl, libjpeg, Msys2工具的使用
  • C++中图的存储
  • 西瓜书读书笔记整理(七)—— 第七章 贝叶斯分类器
  • C#WPF嵌套布局实例
  • Spring和SpringMVC总结
  • C++标准模板(STL)- 类型支持 (类型属性,is_abstract,is_signed,is_unsigned)
  • 前端复制带上版权信息
  • 【ArcGIS微课1000例】0077:ArcGIS生成经纬网(shp格式)
  • 读程序员的制胜技笔记04_有用的反模式(下)
  • linux驱动开发环境搭建
  • Qt利用VCPKG和CMake和OpenCV和Tesseract实现中英文OCR
  • Day20力扣打卡
  • 设计模式之两阶段终止模式
  • Dubbo捕获自定义异常
  • Leetcode刷题详解——求根节点到叶节点数字之和
  • emq集群配置nginx做负载均衡
  • 【JAVA学习笔记】60 - 坦克大战1.0-绘图坐标体系、事件处理机制
  • Android13 安装谷歌GMS导致打开蓝牙失败解决方法
  • 独创改进 | RT-DETR 引入双向级联特征融合结构 RepBi-PAN | 附手绘结构图原图
  • Ubuntu下安装vscode,并解决终端打不开vscode的问题