Ярлыки

_GetPixelIndex (1) _SetPixelIndex (1) 3-phase (1) 800x480 (1) АЦП (1) генератор (1) синхронный усилитель (2) структура (1) учебный курс (1) шаговый двигатель (1) ШИМ (2) accert (1) AD7608 (1) AD8429 (1) ADC (5) amplifer (1) arccos (1) arcsin (1) arctang (2) arctg (3) ARM (2) arm_sqrt_q15 (2) assembler (6) ASSERT (1) atan (2) bit (1) Bitband (1) boot (3) bootlloader (1) BUTTON (1) C (5) C# (1) CAN (2) CC2530 (5) CMSIS (4) command (1) Cordic (1) Core746I (1) CubeMX (4) DBGMCU (2) debug (2) debug.ini (1) delegate (1) Digital Potentiometers (1) DigitalPOT (1) Discovery (1) DMA (9) DMA2D (1) DSP (1) DSP library (1) DWT (1) EFM32 (5) EmWin (9) EXTI (1) FATFS (1) FMC (2) FreeRTOS (2) gl868-dual cmux (1) GPIO (4) GUI (2) GUIBuilder (1) GUIDRV_CompactColor_16 (1) HAL (3) HappyGecko (1) Hard Fault (2) heap (1) I2C (1) ID (1) ILI9320 (1) ILI9325 (1) Initialisation (1) InitLTDC (1) Instrumentithion (1) Interrupt (4) ITR (1) JTAG (1) Keil (5) LCDConf (2) lock-in (1) LTCD (1) LTDC (3) main (1) memory (1) MINI_STM32 Revision 01 (1) nBoot0 (1) NVIC (1) OnePulse (2) OSAL (4) pack (1) phase (1) printf (3) Pulse (1) PWM (12) RCC (2) RCR (1) Register (1) RESET (2) RS232 (3) RSS (1) RTC (3) RTOS-RTX (1) RTT (1) RTX-RTOS (1) SDCard (1) SDRAM (6) Segger (2) SPI (3) sqrt (3) SSD1298 (1) SSD1963 (1) Standart Peripherial Library (3) STANDBAY (1) startup (1) STemWin (8) stepper motor (1) STlink (2) STM32 (17) STM32429ZI (1) STM32Cube (1) STM32DBG.IN (1) STM32F (28) STM32F0 (4) STM32F1 (13) STM32F4 (10) STM32F4 Discovery (1) STM32F407ZG (1) STM32F429 (2) STM32F746 (1) STOP (1) string (1) struct (1) SWD (1) SWD JTAG (1) Synhronization (1) system_stm32f4xx.c (1) SystemInit (1) SysTick (1) task (4) telit (1) TIM (27) typedef (1) UART (1) USART (9) viewer (2) WM_PAINT (1) Z-stack (5) ZigBee (5)

пятница, 25 декабря 2015 г.

STM32F4 Timers for PWM






#include <stm32f4xx.h>
#include "other_stuff.h"

#define   APB1_FREQ       42000000                            // Clock driving TIM3
#define   CNT_FREQ        21000000                            // TIM3 counter clock (prescaled APB1)
#define   PWM_FREQ        10000                               // PWM frequency in (320Hz~21MHz) range
#define   PWM_DC_CH1      50                                  // Channel 1 duty cycle
#define   PWM_DC_CH2      25                                  // Channel 2 duty cycle

#define   TIM_PULSE_CH1    (((PWM_DC_CH1) * (APB1_FREQ)) \
                          / ((PWM_FREQ) * (200)))             // Output Compare 1 reg value
#define   TIM_PULSE_CH2    (((PWM_DC_CH2) * (APB1_FREQ)) \
                          / ((PWM_FREQ) * (200)))             // Output Compare 2 reg value
#define   TIM_PERIOD       (((CNT_FREQ) / (PWM_FREQ))-1)      // Autoreload reg value
#define   TIM_PRESCALER    (((APB1_FREQ) / (CNT_FREQ))-1)     // APB1 prescaler


int main()
{
 
  GPIO_InitTypeDef        gpio_C;                             // GPIOC structure
  TIM_TimeBaseInitTypeDef TIM3_TimeBase;                      // Time Base structure
  TIM_OCInitTypeDef       TIM3_OC;                            // Output Compare structure
 
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);       // Clocking GPIOC (AHB1 = 84MHz)
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);        // Clocking TIM3  (APB1 = 42MHz)
 
  gpio_C.GPIO_Pin   = GPIO_Pin_6 | GPIO_Pin_7;                // Ch.1 (PC6), Ch.2 (PC7) 
  gpio_C.GPIO_Mode  = GPIO_Mode_AF;                           // PWM is an alternative function
  gpio_C.GPIO_Speed = GPIO_Fast_Speed;                        // 50MHz
  gpio_C.GPIO_OType = GPIO_OType_PP;                          // Push-pull
  gpio_C.GPIO_PuPd  = GPIO_PuPd_UP;                           // Pulling-up
  GPIO_Init(GPIOC, &gpio_C);                                  // Initializing GPIOC structure
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3);     // Routing TIM3 output to PC6
  GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM3);     // Routing TIM3 output to PC7
 
  TIM3_TimeBase.TIM_ClockDivision = 0;                        // Not dividing
  TIM3_TimeBase.TIM_CounterMode   = TIM_CounterMode_Up;       // Upcounting configuration
  TIM3_TimeBase.TIM_Period        = TIM_PERIOD;               // Autoreload value (ARR) 
  TIM3_TimeBase.TIM_Prescaler     = TIM_PRESCALER;            // dividing APB1 by 2
  TIM_TimeBaseInit(TIM3, &TIM3_TimeBase);                     // Initializing Time Base structure
 
  TIM3_OC.TIM_OCMode      = TIM_OCMode_PWM1;                  // Edge-aligned mode
  TIM3_OC.TIM_OutputState = TIM_OutputState_Enable;           // Enabling the Output Compare state
  TIM3_OC.TIM_OCPolarity  = TIM_OCPolarity_High;              // Regular polarity (low will inverse it)
  TIM3_OC.TIM_Pulse       = TIM_PULSE_CH1;                    // Output Compare 1 reg value
  TIM_OC1Init(TIM3, &TIM3_OC);                                // Initializing Output Compare 1 structure
  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable);          // Disabling Ch.1 Output Compare preload
 
  TIM3_OC.TIM_OutputState = TIM_OutputState_Enable;           // Enabling again in case the values changed
  TIM3_OC.TIM_Pulse       = TIM_PULSE_CH2;                    // Output Compare 2 reg value
  TIM_OC2Init(TIM3, &TIM3_OC);                                // Initializing Output Compare 2 structure
  TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Disable);          // Disabling Ch.2 Output Compare preload

  TIM_Cmd(TIM3, ENABLE);                                      // Ready, Set, Go!
 
  while(1)
  {
    //os_sys_init(init_task);                                 // Starting the RTX kernel
  }

}


Комментариев нет:

Отправить комментарий