Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void PWM_Setup(void){
- GPIO_InitTypeDef GPIO_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
- DAC_InitTypeDef DAC_InitStructure;
- uint16_t TIM2_period = 6000;
- uint16_t TIM14_period = 800;
- //[..] To use the Timer in Output Compare mode, the following steps are mandatory:
- //(#) Enable TIM clock using
- // RCC_APBxPeriphClockCmd(RCC_APBxPeriph_TIMx, ENABLE) function.
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, DISABLE);
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE);
- //(#) Configure the TIM pins by configuring the corresponding GPIO pins
- // This is LED3 on STM32F0-Discovery
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_4);
- TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseStructure.TIM_Period = TIM2_period;
- TIM_TimeBaseStructure.TIM_Prescaler = 0;
- TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
- TIM_OCInitStructure.TIM_Pulse = TIM2_period-1;
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
- //Enable interrupt on compare for timer2
- NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
- NVIC_Init(&NVIC_InitStructure);
- DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
- DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
- DAC_Init(DAC_Channel_1, &DAC_InitStructure);
- TIM_OC1Init(TIM2, &TIM_OCInitStructure);
- TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
- TIM_ITConfig(TIM3, TIM_IT_Update, DISABLE);
- TIM_Cmd(TIM2, ENABLE);
- TIM_Cmd(TIM3, DISABLE);
- DAC_Cmd(DAC_Channel_1, DISABLE);
- //(#) Configure the Time base unit as described in the first part of this
- // driver, if needed, else the Timer will run with the default
- // configuration:
- // (++) Autoreload value = 0xFFFF.
- // (++) Prescaler value = 0x0000.
- // (++) Counter mode = Up counting.
- // (++) Clock Division = TIM_CKD_DIV1.
- TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseStructure.TIM_Period = TIM14_period;
- TIM_TimeBaseStructure.TIM_Prescaler = 0;
- TIM_TimeBaseInit(TIM14, &TIM_TimeBaseStructure);
- //(#) Fill the TIM_OCInitStruct with the desired parameters including:
- // (++) The TIM Output Compare mode: TIM_OCMode.
- // (++) TIM Output State: TIM_OutputState.
- // (++) TIM Pulse value: TIM_Pulse.
- // (++) TIM Output Compare Polarity : TIM_OCPolarity.
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
- TIM_OCInitStructure.TIM_Pulse = TIM14_period-1;
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
- //(#) Call TIM_OCxInit(TIMx, &TIM_OCInitStruct) to configure the desired
- // channel with the corresponding configuration.
- TIM_OC1Init(TIM14, &TIM_OCInitStructure);
- //(#) Call the TIM_Cmd(ENABLE) function to enable the TIM counter.
- TIM_Cmd(TIM14, ENABLE);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement