#include "PPM.h"
#include "USART1.h"
int ppm=0;
void TIM14_PPM_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM14_ICInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_0); // ????
NVIC_InitStructure.NVIC_IRQChannel = TIM14_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority =0x00;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_TimeBaseStructure.TIM_Period = 30000; // ×?????×°???????÷????????(??????)
TIM_TimeBaseStructure.TIM_Prescaler = 45; //?±???¤·?????
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//?ò??????????
TIM_TimeBaseInit(TIM14, &TIM_TimeBaseStructure);
TIM14_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01 ?????????? IC1??????TI1??
TIM14_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //??????????
TIM14_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //??????TI1??
TIM14_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //????????·???,??·???
TIM14_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 ???????????¨?÷ ?????¨
TIM_ICInit(TIM14, &TIM14_ICInitStructure);
TIM_ITConfig(TIM14,TIM_IT_CC1,ENABLE);//???í?ü?????? ,???íCC1IE????????
// TIM_ITConfig(TIM14,TIM_IT_Update,ENABLE);//???????¨?±?÷?ü??????????????·???°ü
TIM_Cmd(TIM14, ENABLE);
}
char Rising;
char Falling;
char Rising=1;
char Falling=0;
int now;
int last;
int ppm;
void TIM14_IRQHandler(void)
{
if (TIM_GetITStatus(TIM14, TIM_IT_CC1) != RESET)//????·??ú????????
{
TIM_ClearITPendingBit(TIM14, TIM_IT_CC1);
if(Rising==1) //????????????????
{
last=TIM_GetCapture1(TIM14);
TIM_OC1PolarityConfig(TIM14,TIM_ICPolarity_Falling ); //CC1P=0 ?è??????????????
Rising=0;
Falling=1;
printf("last%d\r\n",last);
}
if(Falling==1) //??????????????
{
now=TIM_GetCapture1(TIM14);
ppm=now-last;
TIM_OC1PolarityConfig(TIM14,TIM_ICPolarity_Rising); //CC1P=1 ?è??????????????
Rising=1;
Falling=0;
printf("now%d\r\n",now);
printf("ppm %d\r\n",ppm);
}
}
}
|