/** ***************************************************************************** ** ** File : main.c ** ** Abstract : main function. ** ** Functions : main ** ** Environment : Atollic TrueSTUDIO(R) ** STMicroelectronics STM32F4xx Standard Peripherals Library ** ** Distribution: The file is distributed 殿s is,�without any warranty ** of any kind. ** ** (c)Copyright Atollic AB. ** You may use this file as-is or modify it according to the needs of your ** project. Distribution of this file (unmodified or modified) is not ** permitted. Atollic AB permit registered Atollic TrueSTUDIO(R) users the ** rights to distribute the assembled, compiled & linked contents of this ** file as part of an application binary file, provided that it is built ** using the Atollic TrueSTUDIO(R) toolchain. ** ** ***************************************************************************** */ /* Includes */ #include "stm32f4xx.h" /* Private macro */ /* Private variables */ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; //サーボ位置の初期値 1.5ms uint16_t servopos1 = 4500; uint16_t servopos2 = 4500; uint16_t servopos3 = 4500; uint16_t servopos4 = 4500; //uint16_t PrescalerValue = 0; /* Private function prototypes*/ void TIM_Port_Config(void); void TIM_Param_Config(void); void myLongDelay(void); /* Private functions */ int main(void) { //タイマー用I/Oの設定 TIM_Port_Config(); //タイマーのパラメータを設定 TIM_Param_Config(); //チャネル1のサーボを動かす while (1) { //チャネル1(PC6)のサーボをニュートラル(1500us)から333us動かす //分解能は0.3333us。↓では0.3333 * 1000 = 333.3us servopos1 += 1000; TIM_OCInitStructure.TIM_Pulse = servopos1; TIM_OC1Init(TIM3, &TIM_OCInitStructure); myLongDelay(); //約1秒待つ //ニュートラルに戻す servopos1 -= 1000; TIM_OCInitStructure.TIM_Pulse = servopos1; TIM_OC1Init(TIM3, &TIM_OCInitStructure); myLongDelay(); //約1秒待つ } } void TIM_Port_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; //TIM3にクロック供給開始 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //GPIOCとGPIOBにクロック供給開始 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOB, ENABLE); //GPIOCのPin6とPin7をオルタネィテブファンクション(OUT)に設定 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; GPIO_Init(GPIOC, &GPIO_InitStructure); //GPIOBのPin0とPin1をオルタネィテブファンクション(OUT)に設定 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; GPIO_Init(GPIOB, &GPIO_InitStructure); //設定したピンをTIM3の出力として設定 GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM3); GPIO_PinAFConfig(GPIOB, GPIO_PinSource0, GPIO_AF_TIM3); GPIO_PinAFConfig(GPIOB, GPIO_PinSource1, GPIO_AF_TIM3); } void TIM_Param_Config(){ //タイムベースの設定 TIM_TimeBaseStructure.TIM_Period = 0xe8ff; TIM_TimeBaseStructure.TIM_Prescaler = 8; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //PWM1 Modeの設定・チャネル1 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = servopos1; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //PWM1 Modeの設定・チャネル2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = servopos2; TIM_OC2Init(TIM3, &TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //PWM1 Modeの設定・チャネル3 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = servopos3; TIM_OC3Init(TIM3, &TIM_OCInitStructure); TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //PWM1 Modeの設定・チャネル4 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = servopos4; TIM_OC4Init(TIM3, &TIM_OCInitStructure); TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM3, ENABLE); //TIM3を有効化 TIM_Cmd(TIM3, ENABLE); } //時間遅延関数 void myLongDelay(){ uint32_t ii; ii=0; //4,000,000回ループを回る while(ii<4000000){ ii++; } } /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/