微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 为什么我测的频率一直是ff呢,

为什么我测的频率一直是ff呢,

时间:10-02 整理:3721RD 点击:

  1. TIM_DeInit(TIM4);
  2.   TIM_BaseInitStructure.TIM_Period = 0xffff; //设置自动重装载值
  3.   TIM_BaseInitStructure.TIM_Prescaler =7199;
  4.   TIM_BaseInitStructure.TIM_ClockDivision = 0; //时钟分割,无视之
  5.   TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
  6.   TIM_TimeBaseInit(TIM4, &TIM_BaseInitStructure);

  7.   //TIM4->CCER=0X0001;
  8.   TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;              //通道选择
  9.   TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;   //上升沿触发
  10.   TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//管脚与寄存器对应关系
  11.   TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_div1;
  12.   TIM_ICInitStructure.TIM_ICFilter = 0x0;      //滤波设置,经历几个周期跳变认定波形稳定0x0~0xF
  13.   TIM_ICInit(TIM4, &TIM_ICInitStructure);
  14.   TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2); //选择IC2为始终触发源

  15.   TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);//TIM从模式:触发信号的上升沿重新初始化计数器和触发寄存器的更新事件
  16.   TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable); //启动定时器的被动触发
  17.   TIM_ITConfig(TIM4, TIM_IT_CC2, ENABLE);     //打开中断使能CC2中断请求
  18.   TIM_Cmd(TIM4, ENABLE);                      //启动TIM4     

复制代码




中断处理函数

  1. void TIM4_IRQHandler(void)
  2. {
  3.   extern  u16 Flow_Pulse_Frequency;
  4.   u16 t1;
  5.   TIM_ClearITPendingBit(TIM4, TIM_IT_CC2);  //清楚TIM的中断待处理位
  6.   t1=TIM_GetCapture2(TIM4);
  7.   if(t1!=0)
  8.   {
  9.      Flow_Pulse_Frequency=10000/t1;
  10.      BSP_Comm_Uart_Send(Flow_Pulse_Frequency,0);
  11.   }
  12.   else
  13.   {
  14.      Flow_Pulse_Frequency=0;
  15.     BSP_Comm_Uart_Send(Flow_Pulse_Frequency,0);
  16.   }
  17. }

复制代码



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top