вторник, 12 сентября 2017 г.

ШИМ PWM (TIM4), меняем яркость светодиода

#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_tim.h"

void delay (uint32_t time_delay) //функция задержки
{
   uint32_t i;
   for (i=0;i<time_delay;i++);
}

int i = 0;
int main(void)
{

   GPIO_InitTypeDef led_pwm;
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
   led_pwm.GPIO_Speed = GPIO_Speed_50MHz;
   led_pwm.GPIO_Mode  = GPIO_Mode_AF_PP;
   led_pwm.GPIO_Pin   = GPIO_Pin_6 ;
   GPIO_Init(GPIOB, &led_pwm);
   //GPIO_SetBits(GPIOB, GPIO_Pin_6);

   TIM_TimeBaseInitTypeDef timer;
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
   TIM_TimeBaseStructInit(&timer);
   timer.TIM_Prescaler = 720; //устанавливаем делитель частоты основной шины
   timer.TIM_Period = 720;
   timer.TIM_ClockDivision = 0;
   timer.TIM_CounterMode = TIM_CounterMode_Up;
   TIM_TimeBaseInit(TIM4, &timer);

   TIM_OCInitTypeDef timerPWM;
   TIM_OCStructInit(&timerPWM);
   timerPWM.TIM_OCMode = TIM_OCMode_PWM1;
   timerPWM.TIM_OutputState = TIM_OutputState_Enable;
   //timerPWM.TIM_Pulse = 360; // скважность импульсов можно установить сразу
   timerPWM.TIM_OCPolarity = TIM_OCPolarity_High;
   TIM_OC1Init(TIM4, &timerPWM);
   TIM_Cmd(TIM4, ENABLE);
   //TIM_SetCompare1(TIM4 , 999); //управляем скважностью импульса

    while(1)
    {
      for (i=0; i<999; i++){
          TIM_SetCompare1(TIM4 , i);
          delay (10000);
      }

      for (i=999; i>0; i--){
          TIM_SetCompare1(TIM4 , i);
          delay (10000);
      }
    }
}