新手入门
- 积分
- 2
- 金钱
- 2
- 注册时间
- 2017-8-12
- 在线时间
- 0 小时
|
发表于 2017-8-12 09:41:44
|
显示全部楼层
TIM1,通道一输出PWm,然后TIM3的的通道一捕获,检测PWM频率检测怎通道设置怎么设,大神能不能给个提示
TIM_OCInitStructure.TIM_Pulse = Channel1Pulse;
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
TIM_Cmd(TIM1, ENABLE);
/* TIM1 Main Output Enable */
TIM_CtrlPWMOutputs(TIM1, ENABLE);
TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2); //选择TIM3的输入触发源:TIM经滤波定时器输入2
TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); //选择从机模式:复位模式
TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable); //开启复位模式
/* TIM enable counter */
TIM_Cmd(TIM3, ENABLE); //使能TIM计数器
/* Enable the CC2 Interrupt Request */
TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);
IC1Value=TIM_GetCapture2(TIM3);
Paulse=TIM_GetCapture1(TIM3); //读出捕获值
DutyCycle=Paulse/IC1Value ; //获取周期
Frequency=SystemCoreClock/IC1Value ; //获取频率
TIM_ClearITPendingBit(TIM3,TIM_IT_CC2);
NVIC_InitTypeDef NVIC_InitStructure;
/* 计算在ARR regiter中设置的值,以生成17.57 Khz的信号频率 */
TimerPeriod = (SystemCoreClock / 17570 ) - 1; //计算计数值
/* TIM1 clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseStructure.TIM_Prescaler = 0; //时钟预分频数
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseStructure.TIM_Period = TimerPeriod; //自动重装载寄存器的值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //定时器分频因子
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
/* Channel 1, 2, 3 and 4 设置 in PWM 模式 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //设置工作模式为PWM输出模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能比较匹配输出极性允许OC输出
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //互补输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //极必为负
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; //极性为正
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; //当MOE=0时,如果实现了OC*N,则死区后OC*=1
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; // 当MOE=0时,死区后OC*N=1
/* Time Base configuration */
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; //选择TIM3第一通道
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //捕获输入上升沿
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //TIM输入1与IC1连
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //TIM捕获在捕获输入上每探测到一个边沿就执行一次
TIM_ICInitStructure.TIM_ICFilter = 0x0; //选择输入比较滤波器0x0
TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);
/* 开启TIM3中断,0级占优先*/
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //GPIO配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* GPIOA Configuration: Channel 1, 2, 3 and 4 as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //|GPIO_Pin_9 | GPIO_Pin_10; GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; //上拉
GPIO_Init(GPIOA, &GPIO_InitStructure);
|
|