STM32
直播中

向日葵的花季

8年用户 1186经验值
擅长:电源/新能源
私信 关注
[问答]

STM32CubeMX基础定时器TIM6有何功能呢

STM32CubeMX基础定时器tiM6的应用有哪些?
STM32CubeMX基础定时器TIM6有何功能呢?

回帖(1)

张红梅

2021-11-24 10:36:34
  1 基础定时器的应用
  1.1 基础定时器TIM6的应用
  实现功能:
  基础定时器TIM6间隔500ms中断一次;
  1.1.1 TIM6的参数配置
  
  定时时间计算:
  所以定时器频率为 f = 72M / Prescaler / Period = 72000 000 / 7200 /5000 = 2Hz;
  定时时间T = 1 / f 则: 1s / 2Hz = 1000 000us / 2Hz = 500 000us =500ms。
  1.1.2 TIM6的NVIC配置
  
  
  1.1.3 生成代码
  在main函数中开启基础定时器TIM6的中断HAL_TIM_Base_Start_IT(&htim6);
  int main(void)
  {
  HAL_TIM_Base_Start_IT(&htim6);
  while (1){}
  }
  在tim.c文件中实现中断回调函数
  void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  {
  if(htim == &htim6)
  {
  HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);
  }
  }
  1.1.4 实现现象
  将PE5接到逻辑分析仪,注意前提是已经将PE5初始化为输出,由图可以看出中断周期为500ms
  
  2 高级定时器的应用
  2.1 STM32CubeMX中参数分析
  2.1.1 Slave Mode
  
  External Clock Mode 1 :参考 13.3.4 时钟选择 章
  Reset Mode、Gated Mode、Trigger Mode:参考13.4.3 TIM1 和TIM8 从模式控制寄存器(TIMx_SMCR) 和 14.3.14 定时器和外部触发的同步 章
  2.1.2 Trigger Output(TRGO)Parameters
  
  该部分内容实现定时器同步,参考内容如下:
  13.4.3 TIM1 和TIM8 从模式控制寄存器(TIMx_SMCR) 章的 MSM
  13.4.2 TIM1 和TIM8 控制寄存器 2(TIMx_CR2) 章的 MMS[2:0]
  14.3.15 定时器同步 章
  2.1.3 定时器输出引脚选择
  可作为输出的引脚选择,参考 8.3.7 定时器复用功能重映射 章
  使用STM32CubeMX选择输出引脚有两种方式,选择默认引脚和选择指定引脚
  例如使用高级定时器TIM1通道1输出PWM
  1、选择默认引脚
  
  2、选择指定引脚
  根据 8.3.7 定时器复用功能重映射 找出可用的引脚,如下图
  
  可作为TIM1_CH1的引脚有PA8和PE9,这里指定PA8作为TIM1_CH1输出PWM
  则先在Pinout view 中将PA8选中作为TIM1_CH1
  
  再按如下操作
  
  2.2 PWM互补输出实验
  实现功能:TIM1的通道1输出互补PWM,带死区时间,带刹车引脚
  2.2.1 CubeMX中TIM1的MODE配置
  
  2.2.2 CubeMX中TIM1的输出引脚配置
  
  2.2.3 CubeMX中TIM1的参数配置
  
  其余的参数请参考:《STM32中文参考手册_V10》《零死角玩转STM32—F103霸道》
  PWM的频率及周期计算:
  芯片的时钟为72MHz;Prescaler为7200;Period为200;且计数方式为向上计数
  频率:f = 72M / Prescaler / Period = 72000 000 / 7200 /200 = 50Hz;
  周期:T = 1 / f 则: 1s / 50Hz = 1000 000us / 50Hz = 20 000us =20ms。
  如果计数方式为中央计数: f = 72M / Prescaler / Period / 2 = 25Hz;T = 40ms
  占空比的计算,Period为200;Pulse为100。所以占空比为50%
  死区时间计算:
  参考 13.4.18 TIM1 和TIM8 刹车和死区寄存器(TIMx_BDTR) 章的 DTG[7:0]
  13.4.1 TIM1 和TIM8 控制寄存器 1(TIMx_CR1) 章的 CKD[1:0]
  2.2.4 工程的程序修改
  在 main 函数中 MX_TIM1_Init 初始化之后开启CH1和CH1N的PWM输出
  HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); /*开启CH1的PWM输出*/
  HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1); /*开启CH1N的PWM输出*/
  2.2.5 实验现象
  从逻辑分析仪中可以看出,输出频率为50Hz,周期为20ms,占空比为50%。
  
  将PWM放大可以看到存在死区时间
  
  刹车现象
  
  3 通用定时器的应用
  3.1 通用定时器TIM3输出PWM
  3.1.1 基础参数的配置
  
  定时周期计算:
  所以定时器频率为 f = 72M / Prescaler / Period = 72000 000 / 7200 /200 = 50Hz;
  定时时间T = 1 / f 则: 1s / 50Hz = 1000 000us / 50Hz = 20 000us =20ms。
  3.1.2 生成代码
  1、开启通道1的PWM
  int main(void)
  {
  。.. /*系统其他的初始化*/
  MX_TIM3_Init();
  HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); /*开启通道1的PWM*/
  while (1)
  {
  }
  }
  产生的PWM
  
  定时器TIM3的通道映射:
  
  2、调节PWM的占空比
  自定义函数,调节参数可以调节占空比,注意参数范围是0 ~ Counter Period 。
  void TIM_SetTIM3Compare1(uint32_t compare)
  {
  TIM3-》CCR1=compare;
  }
  int main(void)
  {
  。.. /*系统其他的初始化*/
  MX_TIM3_Init();
  HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); /*开启通道1的PWM*/
  TIM_SetTIM3Compare1(20);
  while (1)
  {
  }
  }
  产生的占空比
  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分