OpenEdv-开源电子网

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

请教关于PWM输出的问题

[复制链接]

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
发表于 2015-7-23 19:12:38 | 显示全部楼层 |阅读模式
5金钱
原子哥以及各位大神们,我是新手,我想让pin7和pin8输出两路PWM波形,但是程序下载完,只有pin8输出,是不是哪里配置错了,请各位帮忙解惑,谢谢程序如下
[mw_shl_code=c,true]#include "pwm.h" #include "led.h" #include "stm32f10x.h" ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //ALIENTEK Mini STM32开发板 //PWM 驱动代码 //正点原子@ALIENTEK //技术论坛:www.openedv.com //修改日期:2010/12/03 //版本:V1.0 //版权所有,盗版必究。 //Copyright(C) 正点原子 2009-2019 //All rights reserved ////////////////////////////////////////////////////////////////////////////////// //PWM输出初始化 //arr:自动重装值 //psc:时钟预分频数 void TIM1_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO , ENABLE); //使能GPIO外设时钟使能 //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_8; //TIM_CH1 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 80K TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 不分频 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高 TIM_OC1Init(TIM1, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx TIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主输出使能 TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //CH1预装载使能 TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器 TIM_Cmd(TIM1, ENABLE); //使能TIM1 } [/mw_shl_code]

最佳答案

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

楼主看下PIN7支持TIM1定时器没?你在逗我?又没看到楼主重映射PIN7管脚
奋斗才能新生
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-7-23 19:12:39 | 显示全部楼层
楼主看下PIN7支持TIM1定时器没?你在逗我?又没看到楼主重映射PIN7管脚
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-23 19:13:35 | 显示全部楼层
对了,程序中的pin11改为pin7
奋斗才能新生
回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-23 20:47:38 | 显示全部楼层
回复【3楼】八度空间:
请问怎么看CH1支持哪个引脚?我没找到,谢谢大神
奋斗才能新生
回复

使用道具 举报

39

主题

598

帖子

0

精华

高级会员

Rank: 4

积分
875
金钱
875
注册时间
2013-12-18
在线时间
41 小时
发表于 2015-7-23 21:59:48 | 显示全部楼层
看datasheet
或者
原子哥电路图上STM32F103RCT6的那个芯片上的管脚里面的名称上写的挺全的。
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-7-23 22:01:19 | 显示全部楼层
回复【4楼】待机唤醒:
---------------------------------
硬件手册管脚图
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-23 22:04:44 | 显示全部楼层
回复【4楼】待机唤醒:
---------------------------------
看原理图。
有TIM1_CH1,才支持。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-23 22:17:48 | 显示全部楼层
回复【5楼】w417074951:
---------------------------------
谢谢
奋斗才能新生
回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-23 22:18:02 | 显示全部楼层
回复【6楼】八度空间:
---------------------------------
谢谢
奋斗才能新生
回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-23 22:18:13 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
谢谢原子哥
奋斗才能新生
回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-23 22:30:10 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
每个通道只有一个引脚,我需要两个引脚输出不同的波形,我把pin7改为pin9可以么?这个地方有点搞不太懂,能帮我解答一下么?谢谢
奋斗才能新生
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-23 23:23:11 | 显示全部楼层
回复【11楼】待机唤醒:
---------------------------------
PIN9是什么脚,有TIM1_CHx标示么?
有就可以,没有就没戏(可重映射除外。)。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-24 12:00:32 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
有标示的TIM1_CH2是pin9,但是没有波形产生
奋斗才能新生
回复

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-7-25
在线时间
2 小时
发表于 2015-7-25 15:35:22 | 显示全部楼层
没有看到配置OC2通道
TIM_OC2Init(参数)
TIM_OC2PreloadConfig(参数)
这两个函数呢?
回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-26 07:55:38 | 显示全部楼层
回复【14楼】aishinimi6:
---------------------------------
为什么要配置这两个,
TIM_OC1Init(参数)
TIM_OC1PreloadConfig(参数)
只要这一个不够么?
奋斗才能新生
回复

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-7-25
在线时间
2 小时
发表于 2015-7-26 10:56:09 | 显示全部楼层
你的程序中只使能了CH1通道,没有使能CH2通道,要想CH2有输出,就有使能CH2通道,这有疑问吗?
回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-26 11:28:23 | 显示全部楼层
回复【16楼】aishinimi6:
---------------------------------
现在我加上了,还是不行啊,怎么回事呢?
奋斗才能新生
回复

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-7-25
在线时间
2 小时
发表于 2015-7-27 14:17:37 | 显示全部楼层

请把你的工程打包发上来看下,我仿真试试。

回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-28 10:41:47 | 显示全部楼层
回复【16楼】aishinimi6:
---------------------------------
void TIM1_PWM_Init(u16 arr,u16 psc)
{  
 GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);// 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO , ENABLE);  //使能GPIO外设时钟使能
                                                                     

   //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_8; //TIM_CH1|TIM_CH4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8; //TIM_CH1
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO_Init(GPIOA, &GPIO_InitStructure);


TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值  80K
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

 
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC4Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

  TIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主输出使能

TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1预装载使能  
TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH2预装载使能
TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器

TIM_Cmd(TIM1, ENABLE);  //使能TIM1
 
   
}
大神帮忙看看,这个配置对不对?谢谢啦
奋斗才能新生
回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-28 10:45:15 | 显示全部楼层
下面是代码

代码.7z

474.04 KB, 下载次数: 63

回复

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-7-25
在线时间
2 小时
发表于 2015-7-28 10:54:33 | 显示全部楼层
回复【19楼】待机唤醒:
---------------------------------
我也初学的
刚才没仔细看,你上面说使能CH2,代码又改成了CH4,变的太快了
你发的工程里面没有HARDWARE文件夹,重新发下
回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-28 11:05:33 | 显示全部楼层
回复【21楼】aishinimi6:
---------------------------------
这个代码是用通道1和通道4,但是只有通道1有波形,上面一楼贴的是通道2,后来换为通道4了
奋斗才能新生
回复

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-7-25
在线时间
2 小时
发表于 2015-7-28 11:09:35 | 显示全部楼层
回复【22楼】待机唤醒:
---------------------------------
刚才没仔细看你的GPIO配置,你的注释写的也是CH2,所以还以为你使用的是CH2
回复

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-7-25
在线时间
2 小时
发表于 2015-7-28 11:18:58 | 显示全部楼层
回复【22楼】待机唤醒:
---------------------------------
看了下你的main函数中,只有TIM_SetCompare1(TIM1,100);
没有设置CH4的参数,你加上TIM_SetCompare4(TIM1,设置一个数值);看下
你的工程缺少HARDWARE部分
回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-28 11:30:14 | 显示全部楼层
我重新改了一下,还是不能出波形,代码我加了hardware,你下一下看看

代码.7z

472.23 KB, 下载次数: 70

奋斗才能新生
回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-28 11:35:46 | 显示全部楼层
上面那个发错了,是这个,不好意思

代码.7z

473.7 KB, 下载次数: 73

奋斗才能新生
回复

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-7-25
在线时间
2 小时
发表于 2015-7-28 11:53:51 | 显示全部楼层
回复【26楼】待机唤醒:
---------------------------------
仿真是有波形出来了,如果加上 TIM_SetCompare4(TIM1,100);  你的PA11还没信号出来
你检查下硬件,代码应该是没问题了
回复

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-7-25
在线时间
2 小时
发表于 2015-7-28 11:55:51 | 显示全部楼层

这个是仿真的波形

回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-28 12:12:29 | 显示全部楼层


我仿真没有波形,软件有问题,对了我程序是下载了mini板上测试的,PIN8有,PIN11没有

奋斗才能新生
回复

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-7-25
在线时间
2 小时
发表于 2015-7-28 13:02:42 | 显示全部楼层
回复【29楼】待机唤醒:
---------------------------------
你仿真没信号,是因为你设置不对,信号显示你要选bit,不是analog
回复

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-7-25
在线时间
2 小时
发表于 2015-7-28 13:05:51 | 显示全部楼层


按图中配置
回复

使用道具 举报

20

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-10-16
在线时间
44 小时
 楼主| 发表于 2015-7-28 16:11:54 | 显示全部楼层
回复【31楼】aishinimi6:
---------------------------------
原来如此,受教了,谢谢
奋斗才能新生
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 22:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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