OpenEdv-开源电子网

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

大神们求助!STM32F103ZET6定时器3多通道PWM

[复制链接]

1

主题

5

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2017-2-4
在线时间
2 小时
发表于 2017-2-4 14:13:51 | 显示全部楼层 |阅读模式
1金钱
大神们,帮忙看看以下定时器3初始化设置,之前按照原子给的历程(通道2)完成了单通道配置,后来我类似的改了一下,加了一个CH1通道 但是没有实现PWM输出。大神们能帮我看看嘛?

5.png 2.png 3.png 4.png

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

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2017-2-4
在线时间
2 小时
 楼主| 发表于 2017-2-4 14:26:08 | 显示全部楼层
本人是初学者,想用TIME3四个通道控制四个电机。先从两个开始改起,但是一直没能找出问题所在..能帮我指点一下吗?谢谢!
回复

使用道具 举报

4

主题

144

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2017-1-18
在线时间
80 小时
发表于 2017-2-4 17:41:54 | 显示全部楼层
看一下TIM_OC1PreloadConfig,TIM_OC2PreloadConfig内容就知道了,先将TIMx->CCMR1复位。所以你程序中只有1通道有效。另外不明白,一个定时器只有一套寄存器,怎么控制4个电机?怎么个想法?
回复

使用道具 举报

4

主题

144

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2017-1-18
在线时间
80 小时
发表于 2017-2-4 17:42:24 | 显示全部楼层
看一下TIM_OC1PreloadConfig,TIM_OC2PreloadConfig内容就知道了,先将TIMx->CCMR1复位。所以你程序中只有1通道有效。另外不明白,一个定时器只有一套寄存器,怎么控制4个电机?怎么个想法?
回复

使用道具 举报

4

主题

144

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2017-1-18
在线时间
80 小时
发表于 2017-2-4 17:42:40 | 显示全部楼层
看一下TIM_OC1PreloadConfig,TIM_OC2PreloadConfig内容就知道了,先将TIMx->CCMR1复位。所以你程序中只有1通道有效。另外不明白,一个定时器只有一套寄存器,怎么控制4个电机?怎么个想法?
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2017-2-4
在线时间
2 小时
 楼主| 发表于 2017-2-5 13:08:30 | 显示全部楼层
xdzhang 发表于 2017-2-4 17:42
看一下TIM_OC1PreloadConfig,TIM_OC2PreloadConfig内容就知道了,先将TIMx->CCMR1复位。所以你程序中只有1 ...

好的 谢谢!我的想法是 一个定时器有四路通道,每个通道控制一个电机
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2017-2-4
在线时间
2 小时
 楼主| 发表于 2017-2-5 13:12:28 | 显示全部楼层
xdzhang 发表于 2017-2-4 17:42
看一下TIM_OC1PreloadConfig,TIM_OC2PreloadConfig内容就知道了,先将TIMx->CCMR1复位。所以你程序中只有1 ...

你好 不明白你的意思..  将TIMx->CCMR1复位是什么意思呢?谢谢!
回复

使用道具 举报

4

主题

144

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2017-1-18
在线时间
80 小时
发表于 2017-2-6 12:28:54 | 显示全部楼层
我看错了。没有复位。先把CCMR1的值赋给了tmpccmr1,然后在和新设的值或了。
void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
{
  uint16_t tmpccmr1 = 0;
  /* Check the parameters */
  assert_param(IS_TIM_LIST8_PERIPH(TIMx));
  assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));
  tmpccmr1 = TIMx->CCMR1;
  /* Reset the OC1PE Bit */
  tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1PE);
  /* Enable or Disable the Output Compare Preload feature */
  tmpccmr1 |= TIM_OCPreload;
  /* Write to TIMx CCMR1 register */
  TIMx->CCMR1 = tmpccmr1;
}
回复

使用道具 举报

0

主题

16

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2020-1-29
在线时间
12 小时
发表于 2020-2-10 11:21:25 | 显示全部楼层
老哥  请问你知道你的程序不能实现是怎么回事了么?我看了之后感觉没问题啊,新手求指导
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-20 09:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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