STM32单片机示例:多个定时器同步触发启动

文章目录

  • 前言
  • 基础说明
  • 关键配置与代码
  • 其它补充
  • 示例链接

前言

多个定时器同步触发启动是一种比较实用的功能,这里将对此做个示例说明。

基础说明

该示例演示通过一个TIM使能时同步触发使能另一个TIM。

本例中使用TIM1作为主机,使用TIM1的使能信号作为触发信号,使用TIM3作为从机。该例程实现的效果为,当TIM1、TIM3都初始化后,TIM3使能时并不会立即工作,只有当TIM1使能后TIM3才开始工作。

为了方便观察,两个TIM的CH1都设置为PWM输出方式:TIM1_CH1 -> PE9 、 TIM3_CH1 -> PA6 。

除默认生成的代码,只在 main.c 文件添加几行手动编写的代码。

关键配置与代码

这里只贴出关键的配置与代码,完整示例可以通过文后链接查看。

本示例中关键配置就是TIM主机从机触发信号等配置了:
STM32单片机示例:多个定时器同步触发启动_第1张图片
STM32单片机示例:多个定时器同步触发启动_第2张图片

除了配置生成的代码,需要手动添加的代码就几行:
HAL库

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM1_Init();
  MX_TIM3_Init();

  HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); // 使能TIM3
//  HAL_Delay(233); // 这里不管设置多少延时,TIM3一定都是TIM1使能后才会开始工作
                    // 不过因为当前PWM输出参数设置下,上面函数执行后 TIM3_CH1 通道就会置于高电平状态
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); // 使能TIM1

  while (1)
  {
  }
}

LL库

int main(void)
{
  LL_APB4_GRP1_EnableClock(LL_APB4_GRP1_PERIPH_SYSCFG);
  NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
  NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),15, 0));
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM1_Init();
  MX_TIM3_Init();

  LL_TIM_CC_EnableChannel(TIM3, LL_TIM_CHANNEL_CH1); // 使能TIM3_CH1

//  LL_mDelay(233); // 这里不管设置多少延时,TIM3一定都是TIM1使能后才会开始工作

  LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH1); // 使能TIM1_CH1
  LL_TIM_EnableAllOutputs(TIM1); // 对于高级定时器需要这一行PWM才会有输出
  LL_TIM_EnableCounter(TIM1); // 使能TIM1开始计数

  while (1)
  {
  }
}

其它补充

对于哪个TIM可以被哪个TIM触发,ITRx是多少可以参考芯片参考手册的 TIMx internal trigger connection (TIMx 内部触发连接) 表格。
STM32单片机示例:多个定时器同步触发启动_第3张图片

示例链接

仓库地址: https://github.com/NaisuXu/STM32_MCU_Examples

本示例为仓库中 TIM_Sync_HAL_H750TIM_Sync_LL_H750

你可能感兴趣的:(RTOS与单片机相关,单片机,stm32,嵌入式硬件,定时器,同步)