欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3452|回復: 0
打印 上一主題 下一主題
收起左側

利用STM32 TIM2_CH2進行PWM輸入捕獲時,不斷進入TIM2_IRQHandler中斷

[復制鏈接]
跳轉到指定樓層
樓主
ID:396694 發表于 2019-10-16 09:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
利用TIM2_CH2(端口PA1,stm32f407開發板)進行PWM輸入捕獲時,不斷進入TIM2_IRQHandler中斷,請各位專家幫忙分析分析
1、TIM2_CH2的有個設置如下:

void TIM2_Configuration(void)
{
TIM_ICInitTypeDef TIM_ICInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);   //TIM2時鐘使能   
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);  //使能PORTA時鐘  

GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_TIM2); //PA1
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;           //GPIOA1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //復用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽復用輸出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//GPIO_PuPd_UP;        //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure);              //初始化PA1

TIM_TimeBaseStruct.TIM_Period=0xFFFFFFFF;
TIM_TimeBaseStruct.TIM_Prescaler=0;
TIM_TimeBaseStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStruct);

TIM_ICInitStructure.TIM_Channel=TIM_Channel_2;//選擇TIM2_CH2,選擇輸入端IC2映射到TI2上
TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;//上升沿捕獲
TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;//映射到TI2上(TIM2映射至IC2--tuhongmao)
TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;//在捕獲輸入上每探測到一個邊沿就執行一次捕獲
TIM_ICInitStructure.TIM_ICFilter=0;//濾波設置,經歷幾個周期跳變認定波形穩定
//(采樣高電平,只有連續采集到N個電平是高電平才認為是有效的,否則低于N個時認為是無效的N取0x0-0xF)
TIM_PWMIConfig(TIM2,&TIM_ICInitStructure);//以上是輸入捕獲設置
TIM_SelectInputTrigger(TIM2,TIM_TS_TI2FP2);//選擇濾波后的TI2FP2輸入作為觸發源,觸發下面程序的復位
TIM_SelectSlaveMode(TIM2,TIM_SlaveMode_Reset);//從模式控制器被設置為復位模式-選中的觸發信號上升沿重新
//初始化計數器并產生一個更新信號(上升沿一到,TIM2->CNT被清零,每次上升沿來到,CNT都會被清零)
//從控制器默認的通道是否為TIM2_CH1   tuhongmao 20191015
TIM_SelectMasterSlaveMode(TIM2,TIM_MasterSlaveMode_Enable);//啟動定時器的被動觸發
TIM_ITConfig(TIM2,TIM_IT_CC2,ENABLE);//捕獲中斷打開
TIM_ClearFlag(TIM2,TIM_IT_CC2);//清除標志位
TIM_Cmd(TIM2,ENABLE);//使能定時器2
}


2、中斷設置與處理函數如下:
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

//中斷處理程序
void TIM2_IRQHandler(void)
{
static u16 count=0;
if(TIM_GetITStatus(TIM2,TIM_IT_CC2)!= RESET)
{
  float IC2Value=0;
  float DutyCycle=0;
  float Frequency=0;
  float pulse=0;
  TIM_ClearITPendingBit(TIM2,TIM_IT_CC2);
  IC2Value=(float)TIM_GetCapture2(TIM2);//獲取CCR2的值
  pulse=(float)TIM_GetCapture1(TIM2);//獲得CCR1的值
  if(IC2Value !=0)
  {
   DutyCycle=pulse/IC2Value;
   Frequency=(float)84000000/IC2Value;
   duty=(u32)(DutyCycle*(u32)100);
   freq=Frequency/((float)1000);
   count++;
   if(count>=10000)
   {
    count=0;
    printf("IC2Value is %f \r\n",IC2Value);
    printf("pulse is %f \r\n",pulse);
   }
  }
  else
  {
   duty=0;
   freq=0;
  }

}
}

3、主程序Main.c如下:
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2
delay_init(168);  //初始化延時函數
uart_init(115200);//初始化串口波特率為115200
TIM2_Configuration();
NVIC_Configuration();
while(1)
{
}
}
4、串口打印結果如下:
IC2Value is 2.000000
pulse is 1.000000
IC2Value is 2.000000
pulse is 0.000000
IC2Value is 2.000000
pulse is 0.000000
IC2Value is 2.000000
pulse is 1.000000
IC2Value is 2.000000
pulse is 1.000000
IC2Value is 2.000000
pulse is 1.000000
IC2Value is 2.000000
pulse is 1.000000
IC2Value is 2.000000
...

(每進入10000次中斷,再串口打印消息)

其他未做任何設置,端口也沒有輸入PWM信號,但是不斷進入
TIM2_IRQHandler中斷,請幫忙分析分析。



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表