/****************************************************************************** * Copyright (C) 2014-2015 HangZhou SiZhu Co.,LTD. * *----------------------------------------------------------------------------- * File: fm25v02.c * Description: FRAM operation code * Author: Lishoujian (867693272@qq.com) * Date: Jan 8, 2015 *****************************************************************************/ /* ----------------------- Platform includes --------------------------------*/ #include "PWM.h" #include "sys.h" /****************************************** * func: PWM1_out * desc: set pwm1 * input: * - period: period clk num * - count : duty clk num (set duty cycle) * - div : frequence division - 1 * output: eg: when period = 1000,count=500,div=71,cpu_freq = 72MHZ then => period time = 1000us & duty = 50% * return: none *****************************************/ void PWM1_out(uint16 period,uint16 div) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_DeInit(TIM4); RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM4 , ENABLE ); //TIM3£¬TIM4 RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_TIM4,ENABLE); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = period-1; //¼ÆÊýµ½B´Î£¬ÎªÒ»¸ö¶¨Ê±ÖÜÆÚ TIM_TimeBaseStructure.TIM_Prescaler = div-1; //ÉèÖÃÔ¤·ÖƵ TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //ÉèÖÃʱÖÓ·ÖÆµÏµÊý£º²»·ÖƵ TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //ÏòÉϼÆÊýģʽ TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); /* PWM1 Mode configuration: Channel3 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //ÅäÖÃΪPWMģʽ1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = period/2; //ÉèÖÃÌø±äÖµ£¬µ±¼ÆÊýÆ÷¼ÆÊýµ½Õâ¸öֵʱ£¬µçƽ·¢ÉúÌø±ä TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; // TIM_OC2Init(TIM4, &TIM_OCInitStructure); //ʹÄÜͨµÀ3 TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //ʹÄÜͨµÀ3±È½Ï¼Ä´æÆ÷ TIM_ARRPreloadConfig(TIM4, ENABLE); // ʹÄÜTIM8ÖØÔØ¼Ä´æÆ÷ARR TIM_Cmd(TIM4, ENABLE); //ʹÄܶ¨Ê±Æ÷8 } /****************************************** * func: µ¥Âö³åÐÎʽ TIM3 CH1 * desc: set pwm3 * input: * - period: period * - count : set duty cycle * - div : frequence division * output: none * return: none *****************************************/ /*12MµÄʱÖÓ*/ void pluse_init_out(uint8 pluse_enable, uint16 pluse_wide) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_DeInit(TIM3); RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3 , ENABLE ); //TIM3£¬TIM4 RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 1000; //¼ÆÊýµ½B´Î£¬ÎªÒ»¸ö¶¨Ê±ÖÜÆÚ TIM_TimeBaseStructure.TIM_Prescaler = 3000; //ÉèÖÃÔ¤·ÖƵ TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV4 ; //ÉèÖÃʱÖÓ·ÖÆµÏµÊý£º²»·ÖƵ TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //ÏòÉϼÆÊýģʽ TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /* pluse Mode configuration: Channel3 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //ÅäÖÃΪPWMģʽ1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = pluse_wide; //ÉèÖÃÌø±äÖµ£¬µ±¼ÆÊýÆ÷¼ÆÊýµ½Õâ¸öֵʱ£¬µçƽ·¢ÉúÌø±ä TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // TIM_OC2Init(TIM3, &TIM_OCInitStructure); //ʹÄÜͨµÀ3 TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //ʹÄÜͨµÀ3±È½Ï¼Ä´æÆ÷ TIM_SelectOnePulseMode(TIM3, TIM_OPMode_Single); TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Trigger); TIM_Cmd(TIM3, ENABLE); }