打印
[STM32F1]

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

[复制链接]
325|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 | 只看该作者

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

使用特权

评论回复
5
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);

}

使用特权

评论回复
6
chuxh|  楼主 | 2022-3-5 13:49 | 只看该作者

使用特权

评论回复
7
pengf| | 2022-3-5 13:52 | 只看该作者

使用特权

评论回复
8
supernan| | 2022-3-5 13:54 | 只看该作者
你的pwm输出功能函数呢?

使用特权

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

使用特权

评论回复
10
chuxh|  楼主 | 2022-3-5 13:59 | 只看该作者
高级定时器和普通定时器存在一样的问题,IO速度设置为高速的

使用特权

评论回复
11
spark周| | 2022-3-5 14:00 | 只看该作者

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

使用特权

评论回复
12
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);

使用特权

评论回复
13
jlyuan| | 2022-3-5 14:05 | 只看该作者
htim2.Init.Prescaler = 71;
预分频71,当然PWM频率上不去

使用特权

评论回复
14
chuxh|  楼主 | 2022-3-5 14:19 | 只看该作者
72000000/(71+1)/(99+1)=10000
感觉没问题啊?

使用特权

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

使用特权

评论回复
16
chuxh|  楼主 | 2022-3-5 14:23 | 只看该作者
还真是,比较值怎么可以比计数值小呢。我太**了

使用特权

评论回复
17
supernan| | 2022-3-5 14:26 | 只看该作者
一个时钟周期产生PWM上下沿,应该只有1/2频率吧?

使用特权

评论回复
18
chuxh|  楼主 | 2022-3-5 14:30 | 只看该作者

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

使用特权

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

本版积分规则

936

主题

11296

帖子

2

粉丝