Development/Embedded
STM32F103 - PWM 소스
Komastar.Dev
2014. 2. 19. 22:18
반응형
STM32F103 / PWM / Cortex M3
전체 소스에서 PWM 부분만 잘라서 올림
헤더 파일 포함 시키는 것이 맞는지 잘 기억이 안남 소스 내용 자체는 정확하니 참고용으로 쓰시길
#include <STM32F103_PWM.H>
#include <STM32F103_TIM.H>
#include <STM32F103_RCC.H>
u16 PrescalerValue = 0;
double i_motor1 = 0;
double i_motor2 = 800;
double i_motor3 = 800;
double i_motor4 = 0;
void PWM_Init(void);
void RCC_Configuration(void);
void GPIO_Configuration(void);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
int main()
{
PWM_Init();
while(1)
{
}
}
void PWM_Init()
{
RCC_Configuration();
GPIO_Configuration();
PrescalerValue = (u16)(SystemCoreClock / 1000000) - 1; // 1000000 for 10us
TIM_TimeBaseStructure.TIM_Period = 20000; // 2000 for 10us
TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
//CH1 setting start
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
//CH1 setting end
//CH2 setting start
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = (int)i_motor2;
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
//CH2 setting end
//CH3 setting start
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = (int)i_motor3;
TIM_OC3Init(TIM3, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
//CH3 setting end
//CH4 setting start
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OC4Init(TIM3, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
//CH4 setting end
TIM_ARRPreloadConfig(TIM3, ENABLE);
TIM_Cmd(TIM3, ENABLE);
delay_ms(1000);
}
/* Name : RCC_Configuration
* Function : Ready For PWM */
void RCC_Configuration()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);
}
/* Name : GPIO_Configuration
* Function : Ready For PWM */
void GPIO_Configuration()
{
GPIO_InitTypeDef GPIO_InitStructurePWM;
GPIO_InitStructurePWM.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructurePWM.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructurePWM.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructurePWM);
GPIO_InitStructurePWM.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_Init(GPIOB, &GPIO_InitStructurePWM);
}
2014 / 02 / 20 - 01:41 태그 정리
2015 / 06 / 12 - 16:03 모바일에서 #include문 표시 문제 수정(모바일 티스토리에서 Syntax Highlight 동작 안함)
반응형