stm32 精确个数高速脉冲输出
扫描二维码
随时随地手机看文章
/******************************TIM2的通道1使用单脉冲模式**TIM3使用门控模式用来输出PWM******************************///TIM2per:重装值//Compare1:比较捕获1的预装载值voidMotor_Init(u16TIM2per,u16TIM3per,u16TIM3Compare1){TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStruct;TIM_OCInitTypeDefTIM_OCInitStruct;GPIO_InitTypeDefGPIO_InitStruct;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能定时器2的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器3的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能复用IO时钟http://write.blog.csdn.net/postedit
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_6;//PA0GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);//TIM2工作在单脉冲下TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;//没有时钟分割TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上计数模式TIM_TimeBaseInitStruct.TIM_Prescaler=7200;//预分频值,每100us计数一次TIM_TimeBaseInitStruct.TIM_Period=TIM2per;//重装值TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);TIM_SelectOnePulseMode(TIM2,TIM_OPMode_Single);//设置TIM2在单脉冲模式,且是单一的脉冲,在下一个更新事件停止TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);//使能定时器2的通道1预装载寄存器TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_OC1Ref);TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;//在向上计数时,一旦TIMx_CNT