[STM32F1] STM32F103 定时器超过1kH无法输出

[复制链接]
57|17
手机看帖
扫描二维码
随时随地手机跟帖
chuxh|  楼主 | 2022-3-5 13:37 | 显示全部楼层 |阅读模式
代码是通过Cudemx配置的,频率配置为1khz时,能正常输出PWM

使用特权

评论回复
ousj| | 2022-3-5 13:39 | 显示全部楼层

什么意思?不是很明白你说的什么,能再解释一下这个现象吗

使用特权

评论回复
chuxh|  楼主 | 2022-3-5 13:43 | 显示全部楼层
频率配置为10khz时,输出一直为高电平。TIM1 TIM2都是这样的问题

使用特权

评论回复
wenfen| | 2022-3-5 13:45 | 显示全部楼层

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
chuxh|  楼主 | 2022-3-5 13:47 | 显示全部楼层
代码如下:
void MX_TIM2_Init(void)
{
  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};
  TIM_OC_InitTypeDef sConfigOC = {0};

  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 71;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 99;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
  {
    Error_Handler();
  }
  HAL_TIM_MspPostInit(&htim2);

}

使用特权

评论回复
chuxh|  楼主 | 2022-3-5 13:49 | 显示全部楼层
385066222fa0147dbd.png

使用特权

评论回复
pengf| | 2022-3-5 13:52 | 显示全部楼层
914866222fa8478ede.png

使用特权

评论回复
supernan| | 2022-3-5 13:54 | 显示全部楼层
你的pwm输出功能函数呢?

使用特权

评论回复
yufe| | 2022-3-5 13:57 | 显示全部楼层
还有   sConfigOC.Pulse = 0; 如果始终这样,是不可能有PWM输出的,不管1K还是10Khz,除非别的地方有再配置。

使用特权

评论回复
chuxh|  楼主 | 2022-3-5 13:59 | 显示全部楼层
高级定时器和普通定时器存在一样的问题,IO速度设置为高速的

使用特权

评论回复
spark周| | 2022-3-5 14:00 | 显示全部楼层

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
huangchui| | 2022-3-5 14:03 | 显示全部楼层
功能函数如下:

  HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);
  __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, 5000);
  
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
  HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);

使用特权

评论回复
jlyuan| | 2022-3-5 14:05 | 显示全部楼层
htim2.Init.Prescaler = 71;
预分频71,当然PWM频率上不去

使用特权

评论回复
chuxh|  楼主 | 2022-3-5 14:19 | 显示全部楼层
72000000/(71+1)/(99+1)=10000
感觉没问题啊?

使用特权

评论回复
supernan| | 2022-3-5 14:21 | 显示全部楼层
我看你ARR又是设置为99,CCR又设置为5000,这时也不会有PWM输出的,CCR要小于ARR的值,不然看不到波形的。

使用特权

评论回复
chuxh|  楼主 | 2022-3-5 14:23 | 显示全部楼层
还真是,比较值怎么可以比计数值小呢。我太**了

使用特权

评论回复
supernan| | 2022-3-5 14:26 | 显示全部楼层
一个时钟周期产生PWM上下沿,应该只有1/2频率吧?

使用特权

评论回复
chuxh|  楼主 | 2022-3-5 14:30 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则