#include "stm32f10x.h"
u16 capture=0;
u16 CCR1_Val=1000;//0.05s
u16 CCR2_Val=5000;//0.25s
u16 CCR3_Val=10000;//0.5s
u16 CCR4_Val=20000;//1s
/*TIM2 CLOCK ENABLE*/
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/*Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVIC中断分组1:1位抢占优先级,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_Configuration(void)
{
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// TIM_ICInitTypeDef TIM_ICInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
TIM_TimeBaseStructure.TIM_Period=65535;//
TIM_TimeBaseStructure.TIM_Prescaler=3600-1;//预分频,此值加1为分频的出除数,0.00005s
//TIM_TimeBaseStructure.TIM_Prescaler=0;//不分频
TIM_TimeBaseStructure.TIM_ClockDivision=0x0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
// TIM_CCxCmd(TIM2,TIM_Channel_1,)
// TIM_CCxCmd(TIM2,TIM_Channel_1, TIM_CCx);
TIM_CCxCmd(TIM2, TIM_Channel_1, TIM_CCx_Enable);
TIM_CCxCmd(TIM2, TIM_Channel_2, TIM_CCx_Enable);
TIM_CCxCmd(TIM2, TIM_Channel_3, TIM_CCx_Enable);
TIM_CCxCmd(TIM2, TIM_Channel_4, TIM_CCx_Enable);
/*比较通道1*/
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Timing;//
TIM_OCInitStructure.TIM_Pulse=CCR1_Val;//设置了待装入捕获比较寄存器的脉冲zhi
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//极性为正
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OC1Init(TIM2,&TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Disable);//禁止重装载
/*比较通道2*/
// TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Timing;
// TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//极性为正
// TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse=CCR2_Val;
TIM_OC2Init(TIM2,&TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Disable);
/*比较通道3*/
TIM_OCInitStructure.TIM_Pulse=CCR3_Val;
TIM_OC3Init(TIM2,&TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Disable);
/*比较通道4*/
TIM_OCInitStructure.TIM_Pulse=CCR4_Val;
TIM_OC4Init(TIM2,&TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Disable);
/*使能预装载*/
TIM_ARRPreloadConfig(TIM2,ENABLE);
/*预先清除所有中断位*/
TIM_ClearITPendingBit(TIM2,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4|TIM_IT_Update);
/*4个中断和溢出都配置中断*/
TIM_ITConfig(TIM2,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4|TIM_IT_Update,ENABLE);
TIM_Cmd(TIM2,ENABLE);
}
void TIM2_IRQHandler(void)
{
/*TIM2_CH1*/
if(TIM_GetITStatus(TIM2,TIM_IT_CC1)!=RESET)
{
TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);
/*PC.1引脚的翻转频率为 Hz*/
GPIO_WriteBit(GPIOC,GPIO_Pin_1,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_1)));
capture=TIM_GetCapture1(TIM2);
TIM_SetCompare1(TIM2,capture+CCR1_Val);
//GPIO_ResetBits(GPIOC,GPIO_Pin_All);
}
/*TIM2_CH2*/
if(TIM_GetITStatus(TIM2,TIM_IT_CC2)!=RESET)
{
GPIO_WriteBit(GPIOC,GPIO_Pin_2,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_2)));
TIM_ClearITPendingBit(TIM2,TIM_IT_CC2);
capture=TIM_GetCapture2(TIM2);
TIM_SetCompare2(TIM2,capture+CCR2_Val);
//GPIO_SetBits(GPIOC,GPIO_Pin_All);
}
/*TIM2_CH3*/
if(TIM_GetITStatus(TIM2,TIM_IT_CC3)!=RESET)
{
GPIO_WriteBit(GPIOC,GPIO_Pin_3,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_3)));
TIM_ClearITPendingBit(TIM2,TIM_IT_CC3);
capture=TIM_GetCapture3(TIM2);
TIM_SetCompare3(TIM2,capture+CCR3_Val);
//GPIO_SetBits(GPIOC,GPIO_Pin_All);
}
/*TIM2_CH4*/
if(TIM_GetITStatus(TIM2,TIM_IT_CC4)!=RESET)
{
GPIO_WriteBit(GPIOC,GPIO_Pin_4,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_4)));
TIM_ClearITPendingBit(TIM2,TIM_IT_CC4);
capture=TIM_GetCapture4(TIM2);
TIM_SetCompare4(TIM2,capture+CCR4_Val);
//GPIO_SetBits(GPIOC,GPIO_Pin_All);
}
}
|