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

这篇具有很好参考价值的文章主要介绍了STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一、所用材料:

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

二、所学内容:

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

三、CUBEMX配置:

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

hal库定时器比较输出,STM32HAL,stm32,嵌入式硬件,单片机
hal库定时器比较输出,STM32HAL,stm32,嵌入式硬件,单片机
hal库定时器比较输出,STM32HAL,stm32,嵌入式硬件,单片机

第二步:TIM配置

关键参数配置:

  • Prescale-(71)
  • auto reload preload-Disable
  • Output Compare Channel1 -Mode - Toggle on match
  • Output Compare Channel2 -Mode - Toggle on match
    以及点亮TIM2的所有中断
    hal库定时器比较输出,STM32HAL,stm32,嵌入式硬件,单片机
    hal库定时器比较输出,STM32HAL,stm32,嵌入式硬件,单片机
    hal库定时器比较输出,STM32HAL,stm32,嵌入式硬件,单片机

四、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通道1
    HAL_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文章来源地址https://www.toymoban.com/news/detail-773637.html

到了这里,关于STM32-HAL库08-TIM的输出比较模式(输出PWM的另一种方式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 PWM模式与输出比较模式的区别。PWM占空比不生效,在STM32CubeMX中配置PWM的两种模式——蓝桥杯嵌入式

      🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都已更新完毕,欢迎大家前往订阅本专题🎏 🎏【蓝桥杯嵌入式】蓝桥杯第十届省赛真题 🎏【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题 🎏【蓝桥杯嵌入式】蓝桥杯第十三届

    2023年04月15日
    浏览(80)
  • (STM32)TIM输出比较

    TIM输出比较(OC): 主要功能输出PWM波形,PWM波形是驱动电机的必要条件,所以信息TIM输出比较就等于学习PWM CNT:计数器,计数自增,CCR:捕获比较寄存器,程序员给定的一个值 当CNT,大于、小于、大于CCR时,输出就会置0,置1,置0....,一个不断跳变的pwm的波形 每个高级定时器

    2024年02月05日
    浏览(86)
  • STM32--TIM定时中断&TIM输出比较

    目录 一.TIM中断 1.TIM简介 2.定时器类型 1)基本定时器 2)通用定时器 3)高级定时器  3.时基单元   二.TIM输出比较 1.输出比较简介OC 2.PWM 1.PWM简介 2.PWM结构  3.参数计算  3.输出比较通道(通用) 1)输出模式控制器 2)至主模式控制器 3)极性选择 4)输出使能电路 5)OCx——

    2024年04月09日
    浏览(44)
  • STM32:TIM定时器输出比较(OC)

    一、输出比较简介 1、输出比较 OC(Output Comapre)输出比较 输出比较可以通过比较CNT(时基单元)和CCR(捕获单元)寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率的占空比的PWM波形(CC是捕获/比较的意思,R是Register,寄存器的意思),这个捕获

    2024年02月05日
    浏览(57)
  • STM32单片机(六)TIM定时器 -> 第三节:TIM输出比较

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月09日
    浏览(65)
  • STM32F4使用高级定时器(TIM1和TIM8)输出PWM问题

    STM32F4使用高级定时器(TIM1和TIM8)输出PWM时要使用TIM_CtrlPWMOutputs使能PWM输出,否则不会输出PWM波形,这一点是和通用定时器输出PWM不一样的地方,通用定时器是不用配置TIM_CtrlPWMOutputs函数的。、

    2024年02月15日
    浏览(43)
  • TIM输出比较(PWM)

      目录 一、输出比较 二、PWM简介  三、通用定时器的输出比较模块怎样输出PWM波形  四、输出比较8种模式 模式的介绍 (1)冻结 (2)匹配时电平翻转 (3)CNT与CCR无效,REF强制为无效电平或者有效电平

    2024年02月02日
    浏览(38)
  • STM32-HAL库04-PWM输出

    所用材料: STM32F103C6T6(最小系统板) STM32cubemx(HAL库软件) MD5(编程软件) 示波器(DS100) 本节所学内容: 通过TIM2定时器输出500HZ频率的PWM波; 修改部分参数实现PWM波频率的改变; 第一步-新建工程 1.选择MCU-F103C6Tx 第二步-SYS设置 将DEBUG选线设置为Serial Wire 第三步-RCC设置

    2023年04月08日
    浏览(47)
  • STM32CubeMX教程8 TIM 通用定时器 - 输出比较

    开发板(STM32F407G-DISC1) STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 逻辑分析仪nanoDLA 使用STM32CubeMX软件配置STM32F407 通用定时器的输出比较通道 ,并将其输出到四个LED灯引脚实现LED灯流水灯效果 STM32F407的定时器通道均可以实现输出比较功能, 输出比较功

    2024年02月03日
    浏览(80)
  • STM32学习笔记(一):输出PWM——HAL库

    本篇文章为个人参考总结所用,如果错误还望指出。 涉及的知识: 1、STM32CubeMx的部分使用 2、PWM原理及常用概念 3、用单片机生成一定频率的PWM 用到的软件及单片机: 1、STM32CubeMx 2、IDE: MDK-Keil软件 3、芯片:STM32F407ZGT6 4、开发板:正点原子探索者 注:不同型号的单片机实现

    2024年02月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包