【STM32H7 开发笔记】| 02 - 通过定时器级联方式同步启动多个定时器并输出 PWM 波形

这篇具有很好参考价值的文章主要介绍了【STM32H7 开发笔记】| 02 - 通过定时器级联方式同步启动多个定时器并输出 PWM 波形。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  • (STM32H723xE/G) 所有定时器包括两个高级控制定时器、十二个通用定时器、两个基本定时器、五个低功耗定时器、两个看门狗定时器和一个SysTick定时器 。所有计时器计数器都可以在Debug模式下冻结。本次实验主频配置的是500MHz

一、分类

1.高级定时器(TIM1,TIM8)

高级控制定时器(TIM1,TIM8)可以看作是在6通道上复用的三相PWM发生器。它们具有互补的PWM输出,可编程插入死区时间。它们也可以被认为是完全通用的计时器。它们的4个独立通道可用于:

  • 输入捕获
  • 输出比较
  • PWM产生(边缘或中心对齐模式)
  • 单脉冲模式输出

如果配置为标准的16位计时器,它们具有与通用TIMx计时器相同的功能。如果配置为16位PWM发生器,它们具有完全调制能力(0-100%)。高级控制计时器可以与TIMx计时器一起工作,通过定时器链接功能进行同步或事件链接。TIM1和TIM8支持独立的DMA请求生成。

2.通用定时器(TIMx)

通用定时器(TIMx)在STM32H723xE/G器件中嵌入了10个可同步的通用定时器。

  • TIM2,TIM3,TIM4,TIM5,TIM23,TIM24
    该器件包括4个全功能的通用定时器:TIM2,TIM3,TIM4,TIM5,TIM23 和 TIM24。TIM2,TIM5,TIM23 和 TIM24基于一个32位自动加载上/下计数器和一个16位预分级器,而TIM3和TIM4基于一个16位自动加载上/下计数器和一个16位预分级器。所有定时器都具有4个独立的输入捕获/输出比较通道,PWM或单脉冲模式输出。这在最大的包上提供了24个输入捕获/输出比较/PWM。TIM2,TIM3,TIM4,TIM5,TIM23 和 TIM24 通用定时器可以一起工作,或与其他通用定时器和高级控制定时器 TIM1 和 TIM8 通过定时器链接功能进行同步或事件链接。这些通用定时器中的任何一个都可以用来产生PWM输出。TIM2、TIM3、TIM4、TIM5、TIM23 和 TIM24都有独立的DMA请求生成功能。它们能够处理正交(增量)编码器信号和1到4个霍尔效应传感器的数字输出。
  • TIM12,TIM13,TIM14,TIM15,TIM16,TIM17
    这些计时器是基于一个16位自动重载上计数器和一个16位预缩放器。TIM13,TIM14,TIM16 和 TIM17有一个独立的通道,而 TIM12 和 TIM15 有两个独立的通道用于输入捕获/输出比较,PWM或单脉冲模式输出。它们可以与TIM2,TIM3,TIM4,TIM5,TIM23 和 TIM24 全功能通用定时器同步,或用作简单的时基。

3.基本定时器(TIM6,TIM7)

基本定时器 TIM6 和 TIM7 这些定时器主要用于DAC触发和波形生成。它们也可以用作通用的16位时基。TIM6 和 TIM7 支持独立的 DMA 请求生成。

二、定时器比较

stm32 定时器同步启动,STM32,stm32,笔记,单片机
stm32 定时器同步启动,STM32,stm32,笔记,单片机

三、级联关系

  • 此处只介绍个别定时器级联关系

stm32 定时器同步启动,STM32,stm32,笔记,单片机

四、定时器主从模式(STM32CubeMX)配置

1、主定时器配置(TIM1)

stm32 定时器同步启动,STM32,stm32,笔记,单片机

2、从模式配置(TIM2 其他的从定时器配置一致)

stm32 定时器同步启动,STM32,stm32,笔记,单片机

五、代码

1、用户代码

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  
  // 需要注意 STM32CubeMX 生成代码后会将 TIM1 的初始化放在后面,在同步启动的情况下,需要将主定时器放在前面
  MX_TIM1_Init();
  MX_TIM2_Init();
  MX_TIM5_Init();
  MX_TIM23_Init();
  MX_TIM24_Init();
  /* USER CODE BEGIN 2 */
  
  // 此 HAL 库函数接口每次只会初始化其中一个定时器的一个通道,并开启 PWM,但判断不了是否是由 TIM1来控制同步开启的
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
  HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_1);
  HAL_TIM_PWM_Start(&htim23, TIM_CHANNEL_1);
  HAL_TIM_PWM_Start(&htim24, TIM_CHANNEL_1);

  // 开启 TIM1
  __HAL_TIM_MOE_ENABLE(&htim1);
  __HAL_TIM_ENABLE(&htim1);
  /* USER CODE END 2 */

  /* Infinite loop */

2、修改 HAL 库函数代码

  • 屏蔽启动功能
HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{
  uint32_t tmpsmcr;

  /* Check the parameters */
  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));

  /* Check the TIM channel state */
  if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY)
  {
    return HAL_ERROR;
  }

  /* Set the TIM channel state */
  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);

  /* Enable the Capture compare channel */
  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);

  //if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET)
  //{
  //  /* Enable the main output */
  //  __HAL_TIM_MOE_ENABLE(htim);
  //}

  ///* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */
  //if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
  //{
  //  tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;
  //  if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr))
  //  {
  //    __HAL_TIM_ENABLE(htim);
  //  }
  //}
  //else
  //{
  //  __HAL_TIM_ENABLE(htim);
  //}

  /* Return function status */
  return HAL_OK;
}

3、用示波器查看波形

  • 从波形可以看出同步启动时的延迟不超过3ns

stm32 定时器同步启动,STM32,stm32,笔记,单片机
stm32 定时器同步启动,STM32,stm32,笔记,单片机
stm32 定时器同步启动,STM32,stm32,笔记,单片机文章来源地址https://www.toymoban.com/news/detail-630889.html

到了这里,关于【STM32H7 开发笔记】| 02 - 通过定时器级联方式同步启动多个定时器并输出 PWM 波形的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • STM32H7使用FileX库BUG,SD卡挂载失败

    使用STM32H7+ThreadX+FileX,之前使用swissbit牌的存储卡可正常使用,最近项目用了金士顿的存储卡,发现无法挂载文件系统。 调试过程发现,关闭D-Cache可以挂载使用exfat文件系统。 FileX对SD卡读写接口全部位于fx_stm32_sdio_driver.c中,查看该文件可以发现在读写函数中已经考虑到使用

    2024年04月28日
    浏览(33)
  • stm32h7中RTC的BCD模式与BIN模式

    BCD(Binary-Coded Decimal)和BIN(Binary)是两种不同的数字表示格式。 BCD格式: BCD是一种用二进制编码表示十进制数字的格式。在BCD格式中,每个十进制数位使用4位二进制数来表示,范围从0到9。例如,数字5在BCD格式中表示为0101,数字9表示为1001。这种编码方式使得BCD数值的每

    2024年01月23日
    浏览(37)
  • STM32 CubeMX 无法将 STM32H7 的最大 CPU 频率设置为 480 MHz

    使用stm32cubemx设置时钟树为480MHz时,提示 cpu clock frequency must be =200MHZ 对于STM32H7 需要CPU修订版 为 V 才能达到 480 MHz 的最大频率。 使用STM32Programmer查看芯片修订版,确认是V版本: 在STM32CubeMX PinConfiguration 界面修改RCC选项,将Product Version设置为V: 此时时钟树界面已可以设置48

    2024年02月16日
    浏览(41)
  • STM32H7 SDMMC+FATFS+USBMSC+FREERTOS 虚拟U盘

    通过cubemx配置 实现STM32H7 SDMMC+FATFS+USBMSC+FREERTOS 虚拟U盘 1.使用FAFTS文件操作系统,实现STM32虚拟U盘,读写外部SD卡,fatfs和usb mass storage class共存。 2.请先完成上一个帖子的步骤 -- 跳转https://blog.csdn.net/hjn0618/article/details/130383593 硬件平台:正点原子阿波罗 STM32H734IIT6 开发工具:

    2024年02月10日
    浏览(32)
  • 【STM32】STM32学习笔记-定时器定时中断 定时器外部时钟(14)

    1.1 TIM_InternalClockConfig 1.2 TIM_TimeBaseInit 1.3 TIM_TimeBaseInitTypeDef 1.4 TIM_ClearFlag 1.5 TIM_ITConfig 1.6 TIM_Cmd 1.7 中断服务函数 参考程序 1.8 TIM_ETRClockMode2Config timer.h timer.c main.c timer.h timer.c main.c 09-定时器定时中断.rar 10-定时器外部时钟.rar 参考: 【STM32】江科大STM32学习笔记汇总

    2024年02月03日
    浏览(38)
  • STM32H7使用QSPI外扩flash(linux下使用openocd操作)

    根据安福莱的STM32H7教程,H7单片机的QSPI外设是直接连到芯片内核上的,地址是0X90000000;那么就可以通过QSPI外设,将外置flash内存映射,并由此执行代码。 相关操作在keil5上比较简单,配置点东西就行;可以参考安福莱教程。 这里要介绍的是在linux环境下没有keil5 IDE的情况下

    2024年01月16日
    浏览(45)
  • STM32H7并行读取AD7606数据以及片内AD值不准解决办法

    先了解一下AD7606,16位,单电源,200k采样率,8路,除了贵没有其他缺点,数据相当的稳,一个5V供电,不用运放的情况下采集电压精度可以达到1mv,非常Nice 与单片机相连 单片机 调用代码 测试发现AD采集到的电压要远小于实际电压,H7的AD还是16位的,不能这么拉跨吧,在网上

    2024年02月11日
    浏览(37)
  • STM32速成笔记—定时器

    🎀 文章作者:二土电子 🌸 关注文末公众号获取其他资料和工程文件! 🐸 期待大家一起学习交流! 关于什么是定时器,简单来讲,就是是用来定时的。STM32F103ZET6有两个基本定时器TIM6和TIM7,四个通用定时器TIM2~TIM5和两个高级定时器TIM1,TIM8。每一个定时器都是完全独立的

    2024年02月09日
    浏览(44)
  • 【STM32】学习笔记(TIM定时器)

    定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发

    2024年02月09日
    浏览(32)
  • STM32笔记----5、TIM定时器

    时基单元:由自动重装载寄存器、预分频器、计数器组成。 来自RCC的TIMxCLK:一般是系统的主频,72MHz。 预分频器(16位):对进来的频率进行分频,写0,不分频,输出72MHz。写1,2分频,输出36MHz。以此类推。 计数器(16位):对预分频器后的计数时钟进行计数。 自动重装载

    2024年01月22日
    浏览(66)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包