OpenEdv-开源电子网

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

用STM32F407ZGT6产生两路PWM波,可是只能产生一路,不明白为什么?程序我看不出哪里出了问题,有没有大佬帮忙看一下

[复制链接]

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
发表于 2019-1-14 14:52:58 | 显示全部楼层 |阅读模式
6金钱
EF217SRB3_B4P6K64YITA.png IS93M(7J](C957W5EZ%@R2V.png

最佳答案

查看完整内容[请看2#楼]

原子的两路PWM输出做出来了,主函数里while循环里面漏了一段程序,加上那段程序就可以了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-14 14:52:59 | 显示全部楼层
原子的两路PWM输出做出来了,主函数里while循环里面漏了一段程序,加上那段程序就可以了
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-14 14:55:02 | 显示全部楼层
本帖最后由 九朝 于 2019-1-14 14:56 编辑

只有TIM14定时器对应的引脚可以产生PWM波,TIM13对应的引脚不行?为什么?明明程序都一样,只是定时器和引脚改了,TIM14的程序是原子哥的程序例程里面的
回复

使用道具 举报

11

主题

95

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2017-3-19
在线时间
116 小时
发表于 2019-1-14 15:42:37 | 显示全部楼层
你是定时器13的PWM输出不了把
回复

使用道具 举报

11

主题

95

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2017-3-19
在线时间
116 小时
发表于 2019-1-14 15:43:54 | 显示全部楼层
九朝 发表于 2019-1-14 14:55
只有TIM14定时器对应的引脚可以产生PWM波,TIM13对应的引脚不行?为什么?明明程序都一样,只是定时器和引 ...

忘记看你下面的说明了,你定时器13开启的是通道2,PF8引脚是TIM13CH1
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-14 16:15:20 | 显示全部楼层
123将321 发表于 2019-1-14 15:42
你是定时器13的PWM输出不了把

对的,定时器13输出不了
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-14 16:17:46 | 显示全部楼层
九朝 发表于 2019-1-14 16:15
对的,定时器13输出不了

大佬有办法么?
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-14 16:21:30 | 显示全部楼层
123将321 发表于 2019-1-14 15:43
忘记看你下面的说明了,你定时器13开启的是通道2,PF8引脚是TIM13CH1

通道2是指OC2吗?
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-14 16:25:17 | 显示全部楼层
九朝 发表于 2019-1-14 16:21
通道2是指OC2吗?

这个之前也试过了,还是没有办法产生PWM波
回复

使用道具 举报

11

主题

95

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2017-3-19
在线时间
116 小时
发表于 2019-1-14 17:16:15 | 显示全部楼层
九朝 发表于 2019-1-14 16:25
这个之前也试过了,还是没有办法产生PWM波

OC1不行吗
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-14 17:18:56 | 显示全部楼层

嗯,也不行,产生不了PWM波
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-14 17:20:28 | 显示全部楼层
九朝 发表于 2019-1-14 17:18
嗯,也不行,产生不了PWM波

所以才发出来问大家啊,真的不知道问题出在哪里
回复

使用道具 举报

11

主题

95

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2017-3-19
在线时间
116 小时
发表于 2019-1-14 17:21:08 | 显示全部楼层
九朝 发表于 2019-1-14 17:20
所以才发出来问大家啊,真的不知道问题出在哪里

OCI初始化改了没有
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-14 17:32:19 | 显示全部楼层
123将321 发表于 2019-1-14 17:21
OCI初始化改了没有

你说的是将OC2改成OC1吗?
回复

使用道具 举报

11

主题

95

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2017-3-19
在线时间
116 小时
发表于 2019-1-14 17:33:53 | 显示全部楼层
九朝 发表于 2019-1-14 17:32
你说的是将OC2改成OC1吗?

TIM_OC1Init和TIM_OC1PreloadConfig
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-14 17:35:47 | 显示全部楼层
123将321 发表于 2019-1-14 17:33
TIM_OC1Init和TIM_OC1PreloadConfig

改了,没有用
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-14 17:38:16 | 显示全部楼层

这个程序只有原子哥的程序源码里面的TIM14对应的PF9引脚能产生PWM波,后面的按照原子哥的程序仿写,但是怎么都产生不了PWM波。
回复

使用道具 举报

3

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2017-9-27
在线时间
33 小时
发表于 2019-1-15 09:57:12 | 显示全部楼层
PF8对应的是TIM13_CH1,你初始化通道2,还怎么输出啊?
你把初始化程序的OC2,改为OC1.
再说tim13也没有通道2啊,好好看看手册。
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-15 10:01:49 | 显示全部楼层
Bigflish 发表于 2019-1-15 09:57
PF8对应的是TIM13_CH1,你初始化通道2,还怎么输出啊?
你把初始化程序的OC2,改为OC1.
再说tim13也没有通道 ...

已经改了,但是还是没办法产生PWM波,
回复

使用道具 举报

3

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2017-9-27
在线时间
33 小时
发表于 2019-1-15 10:19:30 | 显示全部楼层
管脚PF8上拉或是下拉试试
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-15 10:30:13 | 显示全部楼层
Bigflish 发表于 2019-1-15 10:19
管脚PF8上拉或是下拉试试

大哥,不行
回复

使用道具 举报

2

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2018-4-12
在线时间
24 小时
发表于 2019-1-15 13:17:11 | 显示全部楼层
你怎么检测的PWM 波
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-15 20:40:17 | 显示全部楼层

用电机检测的,用PWM波驱动电机转动,也用示波器检测过
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-15 20:45:14 | 显示全部楼层
九朝 发表于 2019-1-15 20:40
用电机检测的,用PWM波驱动电机转动,也用示波器检测过

大哥,不好意思,这么晚回复你,在做课设,时间蛮赶的,我换了普中的程序试了一下,可以产生两路的PWM波,但是两者程序对比,设定都一样,唉,有点难受
回复

使用道具 举报

11

主题

95

帖子

0

精华

高级会员

Rank: 4

积分
598
金钱
598
注册时间
2017-3-19
在线时间
116 小时
发表于 2019-1-16 15:44:48 | 显示全部楼层
九朝 发表于 2019-1-15 20:45
大哥,不好意思,这么晚回复你,在做课设,时间蛮赶的,我换了普中的程序试了一下,可以产生两路的PWM波 ...

其他程序可以的话,那就要考虑下是不是程序其他的地方初始化,导致覆盖掉这个引脚的初始化
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-16 19:28:50 | 显示全部楼层
123将321 发表于 2019-1-16 15:44
其他程序可以的话,那就要考虑下是不是程序其他的地方初始化,导致覆盖掉这个引脚的初始化

额,大哥,你知道两路的输入捕获怎么写么?我只能实现一路,第二路捕获不了
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-16 20:03:42 | 显示全部楼层
九朝 发表于 2019-1-16 19:28
额,大哥,你知道两路的输入捕获怎么写么?我只能实现一路,第二路捕获不了

问题也是和这个PWM一样的,第二路捕获是仿照第一路捕获来写的,但是也没用
回复

使用道具 举报

1

主题

19

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-1-7
在线时间
4 小时
 楼主| 发表于 2019-1-16 21:04:45 | 显示全部楼层
谢谢各位的帮忙
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2020-9-7
在线时间
9 小时
发表于 2021-4-16 21:39:19 | 显示全部楼层
九朝 发表于 2019-1-14 16:21
通道2是指OC2吗?

#include "pwm.h"

//////////////////////////////////////////////////////////////////////////////////         
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32F407开发板
//定时器PWM 驱动代码          
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2014/5/4
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved                                                                          
//////////////////////////////////////////////////////////////////////////////////          


//TIM14 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM11_PWM_Init(u32 arr,u32 psc)
{                                                          
        //此部分需手动修改IO口设置
       
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM11,ENABLE);          //TIM14时钟使能   
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);         //使能PORTF时钟       
       
        GPIO_PinAFConfig(GPIOF,GPIO_PinSource7,GPIO_AF_TIM11); //GPIOF9复用为定时器14
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;           //GPIOF9
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;        //速度100MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉
        GPIO_Init(GPIOF,&GPIO_InitStructure);              //初始化PF9
          
        TIM_TimeBaseStructure.TIM_Prescaler=psc;  //定时器分频
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
        TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
       
        TIM_TimeBaseInit(TIM11,&TIM_TimeBaseStructure);//初始化定时器14
       
        //初始化TIM14 Channel1 PWM模式         
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
        TIM_OC1Init(TIM11, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 4OC1

        TIM_OC1PreloadConfig(TIM11, TIM_OCPreload_Enable);  //使能TIM14在CCR1上的预装载寄存器

  TIM_ARRPreloadConfig(TIM11,ENABLE);//ARPE使能
       
        TIM_Cmd(TIM11, ENABLE);  //使能TIM14

                                                                                  
}  
void TIM14_PWM_Init(u32 arr,u32 psc)
{                                                          
        //此部分需手动修改IO口设置
       
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);          //TIM14时钟使能   
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);         //使能PORTF时钟       
       
        GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); //GPIOF9复用为定时器14
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;           //GPIOF9
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;        //速度100MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽复用输出
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        //上拉
        GPIO_Init(GPIOF,&GPIO_InitStructure);              //初始化PF9
          
        TIM_TimeBaseStructure.TIM_Prescaler=psc;  //定时器分频
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
        TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
       
        TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStructure);//初始化定时器14
       
        //初始化TIM14 Channel1 PWM模式         
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
        TIM_OC1Init(TIM14, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM1 4OC1

        TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);  //使能TIM14在CCR1上的预装载寄存器

  TIM_ARRPreloadConfig(TIM14,ENABLE);//ARPE使能
       
        TIM_Cmd(TIM14, ENABLE);  //使能TIM14

                                                                                  
}  





回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 03:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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