OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 85|回复: 3

STM32F407 TIM3 PWM口初始化问题

[复制链接]

18

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2016-12-5
在线时间
57 小时
发表于 2024-11-11 18:33:35 | 显示全部楼层 |阅读模式
10金钱
遇到一个问题,
stm32f407 tim3 PWM CH3-PB0PWM1模式,有效电平是高电平

初始化的时候,使能了CH3通道,PB0立马从高电平变成了低电平。然后使能定时器计数,第一个周期的该IO口一直是低电平,直到定时器的第二个周期,才翻转成有效电平-高电平。

代码如下
  1. TIM_InitStruct.Prescaler = 6;
  2.   TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
  3.   TIM_InitStruct.Autoreload = 23;
  4.   TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
  5.   LL_TIM_Init(TIM3, &TIM_InitStruct);
  6.   LL_TIM_EnableARRPreload(TIM3);
  7.   LL_TIM_SetClockSource(TIM3, LL_TIM_CLOCKSOURCE_INTERNAL);
  8.   TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_FROZEN;
  9.   TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE;
  10.   TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE;
  11.   TIM_OC_InitStruct.CompareValue = 10;
  12.   TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_HIGH;
  13.   LL_TIM_OC_Init(TIM3, LL_TIM_CHANNEL_CH2, &TIM_OC_InitStruct);
  14.   LL_TIM_OC_DisableFast(TIM3, LL_TIM_CHANNEL_CH2);
  15.   LL_TIM_OC_EnablePreload(TIM3, LL_TIM_CHANNEL_CH3);
  16.   TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1;
  17.   TIM_OC_InitStruct.CompareValue = 9;
  18.   LL_TIM_OC_Init(TIM3, LL_TIM_CHANNEL_CH3, &TIM_OC_InitStruct);
  19.   LL_TIM_OC_DisableFast(TIM3, LL_TIM_CHANNEL_CH3);
  20.   LL_TIM_SetTriggerOutput(TIM3, LL_TIM_TRGO_RESET);
  21.   LL_TIM_DisableMasterSlaveMode(TIM3);
  22.   LL_TIM_OC_EnablePreload(TIM3, LL_TIM_CHANNEL_CH2);
  23.   /* USER CODE BEGIN TIM3_Init 2 */

  24.   /* USER CODE END TIM3_Init 2 */
  25.   LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB);
  26.     /**TIM3 GPIO Configuration
  27.     PB0     ------> TIM3_CH3
  28.     */
  29.   GPIO_InitStruct.Pin = LL_GPIO_PIN_0;
  30.   GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  31.   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
  32.   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  33.   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
  34.   GPIO_InitStruct.Alternate = LL_GPIO_AF_2;
  35.   LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
复制代码
使能代码如下
  1. LL_TIM_SetCounter(TIM3,0);//清0,重新计数
  2.     LL_TIM_ClearFlag_UPDATE(TIM3);

  3.     LL_TIM_CC_EnableChannel(TIM3, LL_TIM_CHANNEL_CH3);//执行完这一句,PWM口就拉低了
  4.     LL_TIM_OC_SetCompareCH3(TIM3, 9);

  5.     LL_TIM_EnableIT_UPDATE(TIM3);//TIM3更新使能
  6. LED_DEBUG_TOGGLE();   

  7.         LL_TIM_EnableCounter(TIM3);//TIM1计数使能  
复制代码
第一个周期没有拉高,就觉得怪怪的,求助大佬

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2024-11-12 21:42:34 | 显示全部楼层
你现在是不是能输出PWM?
回复

使用道具 举报

18

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2016-12-5
在线时间
57 小时
 楼主| 发表于 2024-11-13 10:45:59 | 显示全部楼层
正点原子 发表于 2024-11-12 21:42
你现在是不是能输出PWM?

能输出,就是执行初始化PWM后,PWM口就拉低了,定时器运行的第一个周期的占空比没有,全是低电平,第二个周期才开始正常的PWM波
回复

使用道具 举报

18

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2016-12-5
在线时间
57 小时
 楼主| 发表于 2024-11-13 11:03:57 | 显示全部楼层
正点原子 发表于 2024-11-12 21:42
你现在是不是能输出PWM?

b38c2681a624422ae3dfd2b226a8d76.jpg 这个是实测的波形,下降沿触发的,第一个下降沿是初始化PWM的时候,就是执行LL_TIM_CC_EnableChannel(TIM3, LL_TIM_CHANNEL_CH3);//执行完这一句,PWM口就拉低了  , 就过了一个周期之后,就正常了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 01:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表