OpenEdv-开源电子网

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

分享PWM输入模式捕捉4路PWM波形的周期和占空比 源码+原理讲解+程序讲解

  [复制链接]

10

主题

41

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2013-8-18
在线时间
5 小时
发表于 2013-10-27 07:50:26 | 显示全部楼层 |阅读模式

前几天分享过一个帖子,因为网速原因没有上传源码,看到有人回复我说实验不成功,那么好吧!这是我的错误,这次就将源码和我的心得体会分享出来,供大家下载测试和成长。我其实也是菜鸟一个,如果讲解的地方有啥不对,或是程序设计的不好,欢迎大家提出意见,让我们一起来学习进步。fficeffice" />

PWM输入是输入捕获的一个特殊应用,输入捕获就是当连接到定时器的引脚上产生电平变化时对应的捕获装置会立即将当前计数值复制到另一个寄存器中。你可以开启捕获中断然后在中断处理函数中读出保存的计数值。

与输入捕获不同的是PWM输入模式会将同一个输入信号(TI1TI2)连接到两个捕获装置(IC1IC2)。这两个捕获装置一个捕获上升沿一个捕获下降沿。TI1FP1TI2FP2它们中的一个被选择为触发输入且从模式控制器被配置为复位模式。

ffice:word" />PWM输入捕获原理和时序图



 

    1)   当第一次上升沿到达时IC1捕获TIMx_CCR1的值为当前计数值4IC2不会捕获TIMx_CCR2保持不变,计数器复位从0开始计数。
2) 第一个下降沿到达时IC2捕获TIMx_CCR2的值为2表示脉冲宽度。当上升再次到达时TIMx_CCR1的值就表示脉冲周期了(注意:第一次上升沿捕获的是个随机值)。

2)    原理也讲过了,那么下面就是实战了
一、操作步骤:

①将我的源码从论坛里面下载下来

②用杜邦线将PB7PC6连接起来

③将编译完成的hex文件下载到开发板

④打开串口调试助手波特率选9600

⑤按下开发板的复位键,OK那么你就能看到串口的打印信息。

⑥用杜邦线依次将PB7PC7PB7PC8PB7PC9连接起来,看串口打印不同占空比和相同周期的信息。

二、主程序讲解

TIM3_PWM_Init(1000-1,72-1);   //1KHz的周期

这个计算相信大部分人应该没有问题原子哥也做过详细的讲解那么我在重复一遍

CPU主频是72MHZ 这里将72MHZ主频72分频,那么就为1MHZ,所以计数器每加1那么就是代表增加1US,我这里设置的是999,因为0-999正好是1000us,所以我设置的周期是1000us 也就是1KHZ

TIM_SetCompare1(TIM3,200);

这个函数式设置PWM通道的占空比,因为周期是1000us所以我这里设置的是20%的占空比,这个计算我就算教小白吧  占空比 = 200/1000 我这里设置的是通道1也就是PC6的占空比。下面三个我就不讲了。

TIM4_PWMINPUT_INIT(0xffff,72-1);

这个函数是PWM输入模式初始化,这个我设置的最大计数是0xffff,因为是16位的计数器当然最大也只能这么大了,后面的参数是设置捕捉频率的,我这里还设置为1MHz,这样为了好看实验现象。

While(1){}

主程序那三个打印语句我就不讲了,这个都不会,那么你就该补补了。

三、四路PWM程序讲解

void TIM3_PWM_Init(u16 arr,u16 psc)

这个函数我不讲很多因为原子哥已经将的很清楚了,我就将几个注意的地方和大家说一下,

GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); 这个函数式定时器的全映射,将

TIM3定时器的引脚映射到了PC6 C7 C8 C9上了。

四、PWM输入捕捉程序讲解:

void TIM4_PWMINPUT_INIT(u16 arr,u16 psc)

这个函数我在源码里面已经注释的很清楚了,有几个点需要大家注意

TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);    

这个是选择有效的输入端 ,我这里TIM_TS_TI2FP2选择的PB7,注意:只有TI1FP1TI2FP2连到了从模式控制器,所以PWM输入模式只能使用TIMx_CH1 /TIMx_CH2信号。 

TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);  

这个是配置为PWM输入主从复位模式,就是每次输入端有效电平变化的时候定时器计数器就会硬件上置0

中断函数讲解

至于TIM4的中断函数很简单我就不多讲什么了,主要就是将捕捉到的周期和占空比记录下来。

 

注意:我提醒大家一下,我现在这个捕捉的周期的范围是1-65535us,如果你要捕捉的周期超出这个怎么办,我给大家一点建议①将捕获精度降低,也就是讲捕获频率降下来②这个就是用原子哥那种溢出计数的方法,但是这个有意思的是主从复位模式,每次复位也会产生更新中断,那么如果不加设置的话,可能这种方法是行不通的。但是我已经解决了,看手册介绍,解决的。哈哈,大家有兴趣的话,可以去试着解决,自己做的饭才是最香的。实在是想用第二种方法,但是又解决不了的,就可以回复,但是我想着还是自己解决的好

说了这么多,有的人可能会提出疑问?那你给我们讲这些理论,你自己到底实现了没有?俗话说的好,有图有真相,没图说啥?那么好的上真相,不过是有误差的,但是我认为这个误差在接受范围内。



PB7PC6连接的串口输出情况:实际周期1KHz占空比20% 

PB7PC7连接的串口输出情况:实际周期1KHz占空比40% 
PB7
PC8连接的串口输出情况:实际周期1KHz占空比60% 
PB7PC9连接的串口输出情况:实际周期1KHz占空比80% 
 

PWM输入模式捕捉4路PWM的周期和占空比.rar

301.97 KB, 下载次数: 4810

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

使用道具 举报

10

主题

41

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2013-8-18
在线时间
5 小时
 楼主| 发表于 2013-10-29 20:46:22 | 显示全部楼层
 好多人下载不了,有好几种浏览器不支持下载,在上传一遍试试,看看可不可以下载1

PWM输入模式捕捉4路PWM的周期和占空比.rar

301.97 KB, 下载次数: 10021

回复 支持 3 反对 0

使用道具 举报

0

主题

13

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-9-7
在线时间
0 小时
发表于 2014-12-21 21:38:57 | 显示全部楼层
回复【38楼】toddchen:
---------------------------------
比如四轴
回复 支持 1 反对 0

使用道具 举报

10

主题

41

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2013-8-18
在线时间
5 小时
 楼主| 发表于 2013-10-27 19:27:17 | 显示全部楼层
回复【3楼】aming882046:
---------------------------------
tim4的pb7是捕获引脚你说的很对,tim3是产生PWM波形的。TIM3通过全映射PC6 C7 C8 C9 产生相同周期不同占空比的PWM波形。
回复 支持 1 反对 0

使用道具 举报

10

主题

41

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2013-8-18
在线时间
5 小时
 楼主| 发表于 2013-10-27 07:53:11 | 显示全部楼层
哎!可怜我排好的版啊!一上传就变味了呢!你们就将就得看吧!最后四张图片的介绍文字,对号入座哦!
回复 支持 反对

使用道具 举报

7

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2013-7-19
在线时间
60 小时
发表于 2013-10-27 09:53:38 | 显示全部楼层
你的程序我有点看不懂啊,能否指点一下啊,就是tim4的pb7是捕获引脚,tim4完成捕获任务,那么tim3在里面又是做什么的呢?和tim4有何联系吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2013-10-27 11:27:30 | 显示全部楼层
cool。
回复 支持 反对

使用道具 举报

14

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2013-5-8
在线时间
5 小时
发表于 2013-10-27 11:53:41 | 显示全部楼层
怎么无法下载
回复 支持 反对

使用道具 举报

10

主题

41

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2013-8-18
在线时间
5 小时
 楼主| 发表于 2013-10-27 19:27:56 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
谢谢原子哥鼓励!
回复 支持 反对

使用道具 举报

10

主题

41

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2013-8-18
在线时间
5 小时
 楼主| 发表于 2013-10-27 19:30:57 | 显示全部楼层
回复【5楼】yangweiping:
---------------------------------
你是指的是不能下载源码,还是不能往开发板下载。下载源码我试过了没问题,如果不能往开发板下载的话,我也试过了也是可以的。但是我的是mini开发板,如果你是战舰版的,你就得移植了。
回复 支持 反对

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2612
金钱
2612
注册时间
2011-1-25
在线时间
176 小时
发表于 2013-10-27 20:42:12 | 显示全部楼层
谢谢分享。
顺便说下,还真的不能下载。。Σ(  ̄д ̄;) !!
一直努力就很好。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2013-10-28 00:00:05 | 显示全部楼层
回复【9楼】qq942266575:
---------------------------------
可以吧,我下载了,没问题啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2013-10-17
在线时间
0 小时
发表于 2013-10-28 09:33:01 | 显示全部楼层
LZ你的那个附件不能下载啊,不过还是得先顶顶!!!!!!!!!!!
谢谢lz分享
回复 支持 反对

使用道具 举报

10

主题

41

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2013-8-18
在线时间
5 小时
 楼主| 发表于 2013-10-28 09:34:34 | 显示全部楼层
回复【9楼】qq942266575:
---------------------------------
应该是可以下载,昨天我回家试了一下,用谷歌浏览器是不能下载,不过用搜狗可以。不知道是啥原因
回复 支持 反对

使用道具 举报

10

主题

41

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2013-8-18
在线时间
5 小时
 楼主| 发表于 2013-10-28 09:40:43 | 显示全部楼层
回复【11楼】summerxiehao:
-------------------------------
我刚下载了,可以啊!你换个浏览器试试。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-9-28
在线时间
0 小时
发表于 2013-10-28 21:39:40 | 显示全部楼层
我也下载不了。。。。
回复 支持 反对

使用道具 举报

18

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2013-10-17
在线时间
0 小时
发表于 2013-10-29 16:30:24 | 显示全部楼层
回复【13楼】lifan_cn:
---------------------------------
谢谢LZ,换个浏览器可以下载了。。。
回复 支持 反对

使用道具 举报

10

主题

41

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2013-8-18
在线时间
5 小时
 楼主| 发表于 2013-10-29 20:49:22 | 显示全部楼层
回复【14楼】fan_xj:
---------------------------------
我在15楼又上传了一次,应该可以下载,你试试
回复 支持 反对

使用道具 举报

10

主题

41

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2013-8-18
在线时间
5 小时
 楼主| 发表于 2013-10-29 20:50:31 | 显示全部楼层
回复【5楼】yangweiping:
---------------------------------
我在15楼重新上传了源码,应该可以下载,你试试看
回复 支持 反对

使用道具 举报

10

主题

41

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2013-8-18
在线时间
5 小时
 楼主| 发表于 2013-10-29 20:51:10 | 显示全部楼层
回复【9楼】qq942266575:
---------------------------------
我在15楼重新上传了源码,试试看
回复 支持 反对

使用道具 举报

6

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
138
金钱
138
注册时间
2013-9-28
在线时间
13 小时
发表于 2013-10-29 22:31:51 | 显示全部楼层
给力
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2013-7-1
在线时间
0 小时
发表于 2013-10-30 10:34:22 | 显示全部楼层
不错不错,希望继续给大家一些实践的经验。谢谢!
回复 支持 反对

使用道具 举报

18

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2013-10-17
在线时间
0 小时
发表于 2013-10-30 23:11:56 | 显示全部楼层
回复【19楼】lifan_cn:
---------------------------------
谢谢lZ,我已经下载成功了,lz给力
回复 支持 反对

使用道具 举报

18

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2013-10-17
在线时间
0 小时
发表于 2013-10-31 09:13:55 | 显示全部楼层
回复【22楼】summerxiehao:
---------------------------------
LZ,我看了下你的代码,你的是将IC2的上升沿设置为有效的,你的代码里面好像没有设置IC1啊,好像也没有设置IC1为下降沿捕获啊,不理解啊。。。。
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2013-11-21 17:24:24 | 显示全部楼层
回复【23楼】summerxiehao:
---------------------------------
是啊,而且中断里面也没有CC1,同样不理解
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2013-11-21
在线时间
21 小时
发表于 2013-11-21 19:10:37 | 显示全部楼层
谢谢发享,学习学习
回复 支持 反对

使用道具 举报

2

主题

394

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2091
金钱
2091
注册时间
2012-5-8
在线时间
312 小时
发表于 2013-11-21 22:50:25 | 显示全部楼层
超级棒啊!赞一个!
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2013-11-22 11:12:39 | 显示全部楼层
回复【23楼】summerxiehao:
---------------------------------
我用了可行,因为他的输入配置里面:
TIM_PWMIConfig(TIM4, &TIM4_ICInitStructure);     //PWM输入配置  
    TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);     //选择有效输入端        
    TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);  //配置为主从复位模式
    TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable);   

这几句很关键,尤其:TIM_PWMIConfig
回复 支持 反对

使用道具 举报

6

主题

124

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-8-12
在线时间
0 小时
发表于 2013-11-28 23:06:33 | 显示全部楼层
谢楼主
回复 支持 反对

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-11-25
在线时间
0 小时
发表于 2013-12-3 11:14:34 | 显示全部楼层
楼主   那个、、我有个问题问问  你的中断函数里的注释



会不会跟参考手册冲突了??好像弄反了??是你弄错了?还是我想错了。。求解答


回复 支持 反对

使用道具 举报

7

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2014-3-11
在线时间
0 小时
发表于 2014-3-11 16:01:19 | 显示全部楼层
学习学习
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-3-1
在线时间
1 小时
发表于 2014-3-11 22:20:19 | 显示全部楼层
你好,我认真看了你的讲解,你是检测一路PWM输入的,一路的我看了中文参考手册,不是很难。问下你能否可以检测四路PWM输入并且同时产生四路PWM输出(用STM32F103RBT6),谢谢···
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-3-1
在线时间
1 小时
发表于 2014-3-11 22:26:59 | 显示全部楼层
回复【31楼】小小飞行器:
---------------------------------
不好意思,刚又看了下。参考手册说:由于只有TI1FP1和TI2FP2连到了从模式控制器,所以PWM输入模式只能使用TIMx_CH1 /TIMx_CH2信号,这个意思是不是说STM32的一个定时器可以进行两路PWM输入采集,还是什么意思??
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-3-1
在线时间
1 小时
发表于 2014-3-11 22:44:26 | 显示全部楼层
回复【32楼】小小飞行器:
---------------------------------
大哥,是IC1,IC2对应CH1,是IC3,IC4对应CH2吗??
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-3-16
在线时间
0 小时
发表于 2014-3-16 17:55:10 | 显示全部楼层
很棒!
回复 支持 反对

使用道具 举报

14

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2014-3-5
在线时间
0 小时
发表于 2014-3-18 15:04:01 | 显示全部楼层
回复【7楼】lifan_cn:
---------------------------------
楼主,怎么没有配置下降沿捕获?
回复 支持 反对

使用道具 举报

0

主题

22

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2013-11-11
在线时间
0 小时
发表于 2014-3-18 20:36:51 | 显示全部楼层
回复【楼主位】lifan_cn:
---------------------------------
赞,
回复 支持 反对

使用道具 举报

10

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2014-2-27
在线时间
0 小时
发表于 2014-3-19 20:34:01 | 显示全部楼层


使用楼主的程序得出来的怎么全是0啊!求大神解释!
You canyou up!
回复 支持 反对

使用道具 举报

头像被屏蔽

38

主题

382

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2012-12-5
在线时间
19 小时
发表于 2014-3-19 21:22:15 | 显示全部楼层
只知道PWM是驱动电机的,那四路PWM捕获有啥实际用途呢?
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-3-18
在线时间
0 小时
发表于 2014-3-20 01:45:04 | 显示全部楼层
回复【37楼】我不后悔:
---------------------------------
仔细看楼主发的。。。你没有插线,多看看代码。
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-3-18
在线时间
0 小时
发表于 2014-3-20 03:01:21 | 显示全部楼层
回复【16楼】lifan_cn:
---------------------------------
楼主威武,下载以后。稍微改了一下代码可以发出PPM直接驱动舵机。
500HZ 占空比20 40 60 100刚好对应完整。
同时大概看了下 纠结很呐! 999,71 对应1KHZ  499,71就500HZ    1S/500HZ=2MS =2000UM 弄到我脑袋短路了一下
      1KHZ/1000=1ms  你说成us了 还是我理解错了?

但是发现采样的地方貌似有问题呀....采样不准  我是坚信着原子哥的  公式直接弄上去测试。搞定。哈哈哈  具体代码明天白天在研究了。
   不过我感觉写的真的是好好  利用定时器中断那些.....如果我写 可能又全部丢在while里面了。

还有个问题,传说中的72M 应该是72M*1000呢  还是72M*1024呢?

   采样部分,还没有怎么遇到过。。不知道用于什么场合超出,我就发现目前这个采样还是不行到时候去仔细看看。

纯属弄STM32一个星期的小白发言......
回复 支持 反对

使用道具 举报

10

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2014-2-27
在线时间
0 小时
发表于 2014-3-21 09:50:45 | 显示全部楼层
回复【39楼】feel:
---------------------------------
谢谢啊 原来还要接线的啊 刚开始那个按键捕获试验,两个脚是连在一起的 ,不用连线,误导了我,还以为都不用连线,STM32开发板直接给连上了呢,哎,说多了都是泪 真是感谢啊!
You canyou up!
回复 支持 反对

使用道具 举报

10

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2014-2-27
在线时间
0 小时
发表于 2014-3-21 09:55:18 | 显示全部楼层
最后的占空比要设置成401 出来的结果才是40%啊!直接设置成400 出来的结果是39%!
You canyou up!
回复 支持 反对

使用道具 举报

10

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2014-2-27
在线时间
0 小时
发表于 2014-3-21 10:36:37 | 显示全部楼层
我在楼主的基础上 想再添加一些代码用TIM2的CH1来捕获TIM3的CH1,代码如下:
void TIM2_PWMINPUT_INIT(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
TIM_ICInitTypeDef  TIM2_ICInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);     //Open TIM4 clock
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

                                    
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                               //GPIO??
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存  
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参
        NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;                     
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    
        TIM2_ICInitStructure.TIM_Channel = TIM_Channel_1;                   
        TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;       
        TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;   
        TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; 
TIM2_ICInitStructure.TIM_ICFilter = 0x0; 
 
        TIM_PWMIConfig(TIM2, &TIM2_ICInitStructure);     //PWM输入配置           
        TIM_SelectInputTrigger(TIM2, TIM_TS_TI1FP1);     //选择有效输入端        
        TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);  //配置为主从复位模式
        TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);                                       
        TIM_ITConfig(TIM2, TIM_IT_CC1|TIM_IT_Update, ENABLE);          //中断配置
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
TIM_Cmd(TIM2, ENABLE);    
}
void TIM2_IRQHandler(void)
{

if(CollectFlag1)
{
if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)//捕获1发生捕获事件
{
duty1 = TIM_GetCapture1(TIM2); //采集占空比
 period1 = TIM_GetCapture2(TIM2);     //采集周期
}
CollectFlag1 = 0;
}
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
}




主函数:
extern void TIM3_PWM_Init(u16 arr,u16 psc);
extern void TIM4_PWMINPUT_INIT(u16 arr,u16 psc);
extern void TIM2_PWMINPUT_INIT(u16 arr,u16 psc);

extern u16 period;
extern u16 duty ;
extern u8 CollectFlag ;
extern u16 period1;
extern u16 duty1 ;
extern u8 CollectFlag1 ;
//Mini STM32开发板范例代码8

//技术论坛:www.openedv.com  
 int main(void)
 {
SystemInit();
delay_init(72);     //延时初始化
NVIC_Configuration();   //中断配置
uart_init(9600); //串口初始化
TIM3_PWM_Init(1000,7200-1);   //1KHZ周期
TIM_SetCompare1(TIM3,200); //设置占空比
TIM_SetCompare2(TIM3,401); //设置占空比
TIM_SetCompare3(TIM3,600); //设置占空比
TIM_SetCompare4(TIM3,800); //设置占空比
TIM4_PWMINPUT_INIT(0xffff,7200-1);   //pwm输入初始化以1M的频率捕捉
TIM2_PWMINPUT_INIT(0xffff,7200-1);

// PWM_Init(900,0); //不分频。PWM频率=72000/900=8Khz
while(1)
{
delay_ms(100);
   if(!CollectFlag)
{
printf("duty   = %d%% \r\n",duty*100/period); //打印占空比
printf("cycle = %dKHz\r\n",1000/period);//打印周期另一种叫法
printf("period  = %dus\r\n",period);    //打印周期
CollectFlag = 1;
}
delay_ms(10);
if(!CollectFlag1)
{
printf("duty1   = %d%% \r\n",duty1*100/period1); //打印占空比
printf("cycle1 = %dKHz\r\n",1000/period1);//打印周期另一种叫法
printf("period1  = %dus\r\n",period1);    //打印周期
CollectFlag1 = 1;
}
}  

 }
得出下面的结果:


只有原先楼主的那个测量是准确的 ,能问一下哪错了吗?





You canyou up!
回复 支持 反对

使用道具 举报

10

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2014-2-27
在线时间
0 小时
发表于 2014-3-21 10:55:47 | 显示全部楼层
回复【43楼】我不后悔:
---------------------------------
问题已经解决!
You canyou up!
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2014-3-28
在线时间
32 小时
发表于 2014-3-28 13:44:01 | 显示全部楼层
很好 学习了
回复 支持 反对

使用道具 举报

5

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-3-30
在线时间
0 小时
发表于 2014-4-12 17:19:39 | 显示全部楼层
楼主的帖子写的很好,很容易能看懂!受教了!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2014-4-18
在线时间
1 小时
发表于 2014-4-18 19:25:25 | 显示全部楼层
123123123123
回复 支持 反对

使用道具 举报

19

主题

90

帖子

1

精华

高级会员

Rank: 4

积分
543
金钱
543
注册时间
2012-5-13
在线时间
40 小时
发表于 2014-4-22 12:55:19 | 显示全部楼层
回复【47楼】xianyangrui:
---------------------------------
好东西,赞一个。谢谢分享
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-3-19
在线时间
0 小时
发表于 2014-4-30 16:11:48 | 显示全部楼层
多谢分享!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2014-5-1
在线时间
1 小时
发表于 2014-5-1 22:12:22 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 09:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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