搜索
bottom↓
回复: 8

分享:STM32 TIM5 输入捕获PWM周期频率,欢迎拍砖

[复制链接]

出0入102汤圆

发表于 2015-3-18 11:53:38 | 显示全部楼层 |阅读模式
之前搜索坛里,发现没有STM32输入捕获测量频率的程序,要么就是未解决的帖子。
经过一段时间琢磨,了解了定时器中断触发的原理,根据原子哥的测高电平脉宽的程序,修改了一下,
主要功能就是定时器输入捕获方波的周期,然后通过串口打印信息。
现整理好了工程,上传上来,通过串口显示出来,希望高手拍砖。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入102汤圆

 楼主| 发表于 2015-3-18 11:56:43 | 显示全部楼层
串口打印的周期和频率值。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-3-18 11:58:29 | 显示全部楼层
感觉不错,谢谢楼主分享。

出0入102汤圆

 楼主| 发表于 2015-3-19 09:13:44 | 显示全部楼层
lans0625 发表于 2015-3-18 11:58
感觉不错,谢谢楼主分享。

感谢支持

出0入0汤圆

发表于 2015-3-27 21:43:01 | 显示全部楼层
我就是来拍砖的,中断根本不用这么麻烦,你的思路是测量两次相减。如果你知道有个从模式叫做reset或者你可以去看下参考手册给出的测量PWM的办法,就知道怎么全自动测量脉冲的周期

出0入0汤圆

发表于 2015-3-27 21:46:52 | 显示全部楼层
谢谢分享!!

出0入0汤圆

发表于 2015-3-28 09:21:45 | 显示全部楼层
weshare 发表于 2015-3-27 21:43
我就是来拍砖的,中断根本不用这么麻烦,你的思路是测量两次相减。如果你知道有个从模式叫做reset或者你可 ...

定时器的从模式reset该如何配置,能给个参考吗?

出0入0汤圆

发表于 2015-3-28 09:52:46 | 显示全部楼层
ahong2hao 发表于 2015-3-28 09:21
定时器的从模式reset该如何配置,能给个参考吗?

  1. void Tmr3_Config(void)
  2. {
  3.         TIM_TimeBaseInitTypeDef TIM_TmrBaseInitStructure;
  4.   TIM_ICInitTypeDef  TIM_ICInitStruct;
  5.        
  6.         Tmr3_GPIO_Config();
  7.        
  8.   /* 开启定时器3的时钟 */
  9.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  10.        
  11.         /* 为定时器3设置内部时钟为计数源 */
  12.         TIM_InternalClockConfig(TIM3);
  13.                
  14.         /* 定时器设置为向上计数模式 */
  15.         TIM_TmrBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  16.         /* 定时器的周期设置 */
  17.         TIM_TmrBaseInitStructure.TIM_Period = 10000-1;
  18.         /* 分频系数为7200 */
  19.         TIM_TmrBaseInitStructure.TIM_Prescaler =  7200-1;
  20.         /* fDTS的分频系数 */
  21.         TIM_TmrBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  22.         /* 设置定时器3时基 */
  23.         TIM_TimeBaseInit(TIM3,&TIM_TmrBaseInitStructure);
  24.        
  25.         TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset);
  26.        
  27.         /* 设置通道1为输入通道 */
  28.         TIM_ICInitStruct.TIM_Channel =  TIM_Channel_1;
  29.         /* 关闭滤波器 */
  30.         TIM_ICInitStruct.TIM_ICFilter = 0x0;
  31.         /* 设置触发源为上升沿 */
  32.         TIM_ICInitStruct.TIM_ICPolarity  = TIM_ICPolarity_Falling;
  33.         /* 触发源分频系数为1 */
  34.         TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  35.         /* 选择通道1为触发源 */
  36.         TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;
  37.         /* 设置定时器3通道1为输入 */
  38.         TIM_ICInit(TIM3,&TIM_ICInitStruct);
  39.        
  40.         /* 设置通道2为输入通道 */
  41.         TIM_ICInitStruct.TIM_Channel =  TIM_Channel_2;
  42.         /* 关闭滤波器 */
  43. //        TIM_ICInitStruct.TIM_ICFilter = 0x4;  //不用进行设置
  44.         /* 设置触发源为上升沿 */
  45.         TIM_ICInitStruct.TIM_ICPolarity  = TIM_ICPolarity_Rising ;
  46.         /* 触发源分频系数为1 */
  47.         TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  48.         /* 选择通道1为触发源 */
  49.         TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_IndirectTI;
  50.         /* 设置定时器3通道1为输入 */
  51.         TIM_ICInit(TIM3,&TIM_ICInitStruct);
  52.        
  53.         /* 重置模式设置通道2为触发源 */
  54.         TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);     
  55.         /* 配置定时器通道2的中断 */
  56.         TIM_ITConfig(TIM3,TIM_IT_CC2,ENABLE);
  57.         /* 开启定时器3 */
  58.         TIM_Cmd(TIM3,ENABLE);
  59. }
复制代码

出0入0汤圆

发表于 2017-8-28 19:21:57 | 显示全部楼层
很好,不过,中断函数不用处理了吗
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-21 20:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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