|
/******************************************************************************
|
* 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);
|
|
}
|