OpenEdv-开源电子网

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

STM32F407探索板互补PWM无输出

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-10-10
在线时间
3 小时
发表于 2020-10-12 20:17:33 | 显示全部楼层 |阅读模式
3金钱
本帖最后由 huanggang 于 2020-10-12 20:29 编辑

求助大神,为什么没有PWM输出啊,搞了一个星期了,求大神赐教
    RCC->AHB1ENR |= (1<<4); //打开GPIOE时钟
        GPIOE->MODER |= 0X2AAA0000;//PE8、9、10、11、12、13、14第二功能
        GPIOE->OSPEEDR |= 0x3fff0000;//速度100m
        GPIOE- > PUPDR | = 0x15550000;//上拉
        GPIOE->AFR[1] |= 0x01111111;//PE8、9、10、11、12、13、14第二功能AF1
         RCC->APB2ENR |= (1<<0); //打开TIM1时钟
         TIM1- > PSC = 167; //对时钟168M进行168分频,使得计数频率为1M
        TIM1->ARR = 10000;  //周期10ms
        TIM1->EGR |= 1; //产生一次更新事件
        TIM1->CCMR1 |= 0x6060;//PWM模式1
  TIM1->CCMR2 |= 0x6060;//PWM模式1
         TIM1->CCR1 = 8000;//设置占空比
  TIM1->CCR2 = 6000;
  TIM1->CCR3 = 4000;
  TIM1->CCR4 = 2000;
        TIM1->CCER |= 0x1ddd;//使能比较输出
        TIM1->CCMR1 |= 0x0808;//启动预装载
  TIM1->CCMR2 |= 0x0808;
         TIM1->BDTR|=1<<15;    // 刹车使能位置1,开启所有输出通道
  TIM1->BDTR|=0xCD;     // 死区时间设定
  TIM1->CR1 |= 1; //开始计时

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

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1635
金钱
1635
注册时间
2012-8-28
在线时间
71 小时
发表于 2020-12-20 20:26:24 | 显示全部楼层
&#160;这句错了吧?  TIM1->CCER |= 0x1ddd;  你默认的是高电平吗?比较值后,你又输出高电平?你试试PWM2模式

TIM1->CCER |= 0x1ddd;//使能比较输出
TIM1->BDTR|=0xCD;&#160; &#160;&#160;&#160;// 死区时间设定
这2个寄存器验证过没?你cubemax先取消刹车脚,把CH通道设置空闲高电平,向上计数,CCER配置成比较器后低电平。(cc1p设置成1试试)
这样启动定时器,是先高电平(空闲,cnt值小于ccr值),之后CNT大于CCR值会输出低电平。唯一区别是BDTR的MOE要置1
可以看看f103参考手册245页,那张表格解释了通道输出的必要条件。
好多设置会翻转电平,比如空闲你设置低电平,比较输出后你又设置低电平,这会导致没有输出。
我也郁闷了几天,之前操作寄存器都成功开启pwm,结果换HAL库就是不行,2个例程仿真后发现CCER寄存器没开。
希望我的回答帮到你。
一般PWM控制舵机,定时器72MHZ你就要分频72得到1us变化一次,你再设置重载值20000这样每20000us就CNT循环一次。比较器你设置500这样就相当于20ms周期,0.5ms比较。(20000us=20ms)
舵机是20ms周期,0.5~2.5ms的高电平控制偏转角度(一般对应0~180度)
QQ750273008有好的资料记得发给我哦。。。
回复

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1635
金钱
1635
注册时间
2012-8-28
在线时间
71 小时
发表于 2020-12-20 23:26:49 | 显示全部楼层
你的问题我仿真看了下,你BKIN脚是不是悬空了?
默认high那你就要用杜邦线:把PA6和GND短接
你看看我配置的这种寄存器。我把7个通道PWM都打开了。
另外注意寄存器CCER_>CCxP设置1的话是翻转OC1通道的电平,这样结果会和OC1N通道电平一样。

逻辑分析仪.png
QQ750273008有好的资料记得发给我哦。。。
回复

使用道具 举报

75

主题

458

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1635
金钱
1635
注册时间
2012-8-28
在线时间
71 小时
发表于 2020-12-20 23:35:12 | 显示全部楼层
网络太卡,图片有问题。要是不理解的话按我的寄存器值去配置,有不懂的对照参考手册去理解。
CR1=0X01
CR2=0X300
SMCR=0X00
DIER=0X00
SR=0X9F
EGR=0X00
CCMR1-OUT=0X6068
CCMR1-IN=0X6068
CCMR2-OUT=0X606C
CCMR2-IN=0X606C
CCER=0X1555
CNT=你能看见变化就行
PSC=0X48
ARR=0X4E20
CCR1=0X1F4
CCR2=0X3E8
CCR3=0X5DC
CCR4=0X7D0
DCR=0
DMAR=0X01
RCR=0X00
BDTR=0X8000
PWM寄存器.png
QQ750273008有好的资料记得发给我哦。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-14 19:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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