找回密码
 注册
关于网站域名变更的通知
查看: 312|回复: 2
打印 上一主题 下一主题

stm32频率计源码(输入捕获模式)低频误差小,高频误差大

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-10-9 10:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
STM32F10X频率计,分享给大家,已调试通过,好使,低频无误差,高频有些误差。6 X; ?7 D4 j9 _, j+ @
) R# U" t0 A6 p$ C* {7 J7 k2 R+ S
单片机源程序如下:' v8 ~( n0 E. H5 i/ Y% a! v. W
  • #include "counter.h"
  • #include "stdio.h"
  • #include "usart.h"
  • #include "delay.h"
  • /***********************************************************************************************
  •   //上升沿捕获
  • ************************************************************************************************/
  • TIM_ICInitTypeDef  TIM3_ICInitStructure;
  • void TIM3_counter_Init(u16 arr,u16 psc)
  • {
  •         GPIO_InitTypeDef GPIO_InitStructure;
  •         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  •            NVIC_InitTypeDef NVIC_InitStructure;
  •         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,  ENABLE);          //使能TIM5时钟
  •          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);   //使能GPIOA时钟
  •         GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_7;              //PA7 清除之前设置
  •         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //PA7 浮空输入
  •         GPIO_Init(GPIOA, &GPIO_InitStructure);
  •         GPIO_ResetBits(GPIOA,GPIO_Pin_7);                                                              //PA7 下拉
  •         //初始化定时器5 TIM5
  •         TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值
  •         TIM_TimeBaseStructure.TIM_Prescaler =psc;         //预分频器
  •         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
  •         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  •         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
  •         //初始化TIM5输入捕获参数
  •         TIM3_ICInitStructure.TIM_Channel = TIM_Channel_2;                   //         选择输入端 IC1映射到TI1上
  •           TIM3_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;           //上升沿捕获
  •           TIM3_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
  •           TIM3_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;                             //配置输入分频,不分频
  •           TIM3_ICInitStructure.TIM_ICFilter = 0x00;                                                            //IC1F=0000 配置输入滤波器 不滤波
  •           TIM_ICInit(TIM3, &TIM3_ICInitStructure);
  •         TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2); //选择IC2为始终触发源
  •     TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);//TIM从模式:触发信号的上升沿重新初始化计数器和触发寄存器的更新事件
  •     TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable); //启动定时器的被动触发
  •         //中断分组初始化
  •         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断
  •         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级2级
  •         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //从优先级0级
  •         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         //IRQ通道被使能
  •         NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
  •         TIM_ITConfig(TIM3,TIM_IT_CC2,ENABLE);//不能允许更新中断 ,允许CC2IE捕获中断
  •            TIM_Cmd(TIM3,ENABLE);         //使能定时器3
  • }
  • /***********************************************************************************************
  • ************************************************************************************************/
  • u32  counter=0;                                                                           // 每秒计数
  • int  Frequency=0;
  • void TIM3_IRQHandler(void)
  • {
  •         static int  i =0;
  •         if (TIM_GetITStatus(TIM3, TIM_IT_CC2) == SET)
  •     {
  •       TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);             //清楚TIM的中断待处理位
  •                         counter = (u32)TIM_GetCapture2(TIM3);
  •       Frequency =72000000/counter;
  •                   printf("当前频率为:%d Hz\r\n",Frequency/7200);       //打印数据
  •                         for(i=0;i<2000000;i++)
  •                         {
  •                                 ;
  •                         }
  •     }
  • }7 O8 I5 y1 s& ~! s- W
, ?% C& r) C( `. B- i- m. ?3 O

/ C. J; a: `& ^5 N% x( ~: c" b% S- o* q- g

该用户从未签到

2#
发表于 2021-10-9 11:11 | 只看该作者
有些芯片没有捕获模式

该用户从未签到

3#
发表于 2021-10-9 13:44 | 只看该作者
学习学习  感谢分享2 x" m: S6 K7 ^0 i6 d4 R. Y( l
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-4 18:49 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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