/** * @brief TIM3 configuration * @param None * @retval None */ static void TIM_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; /* ADC1 Peripheral clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_DeInit(TIM3); TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_OCStructInit(&TIM_OCInitStructure); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 0xFF; TIM_TimeBaseStructure.TIM_Prescaler = 0x0; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /* TIM3 TRGO selection */ TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update); /* TIM3 enable counter */ TIM_Cmd(TIM3, ENABLE); }
void MyMotor_TIM2_PWM_Config(void) { TIM_TimeBaseInitTypeDef TIM_IS; TIM_OCInitTypeDef TIM_OC_IS; TIM_TimeBaseStructInit(&TIM_IS); TIM_OCStructInit(&TIM_OC_IS); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); TIM_IS.TIM_Period = 2000; TIM_IS.TIM_Prescaler = 720;//PWM周期20ms 50Hz TIM_IS.TIM_ClockDivision = TIM_CKD_DIV1; TIM_IS.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2,&TIM_IS); TIM_OC_IS.TIM_OCMode = TIM_OCMode_PWM1; TIM_OC_IS.TIM_OutputState = TIM_OutputState_Enable; TIM_OC_IS.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC_IS.TIM_Pulse = THROTTLE_BASE; TIM_OC1Init(TIM2,&TIM_OC_IS); TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_OC_IS.TIM_Pulse = THROTTLE_BASE; TIM_OC2Init(TIM2,&TIM_OC_IS); TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_OC_IS.TIM_Pulse = THROTTLE_BASE; TIM_OC3Init(TIM2,&TIM_OC_IS); TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_OC_IS.TIM_Pulse = THROTTLE_BASE; TIM_OC4Init(TIM2,&TIM_OC_IS); TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable); }
void motor_pwm_setup(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM17, ENABLE); TIM_TimeBaseInitTypeDef recue_tim; TIM_TimeBaseStructInit(&recue_tim); recue_tim.TIM_CounterMode = TIM_CounterMode_Down; recue_tim.TIM_Period = 4000; recue_tim.TIM_Prescaler = 48 - 1; TIM_TimeBaseInit(TIM17, &recue_tim); TIM_OCInitTypeDef pwm_motor_channel; TIM_OCStructInit(&pwm_motor_channel); pwm_motor_channel.TIM_OCMode = TIM_OCMode_PWM1; pwm_motor_channel.TIM_OutputState = TIM_OutputState_Enable; pwm_motor_channel.TIM_Pulse = MOTOR_PWM_PERIOD; TIM_OC1Init(TIM17, &pwm_motor_channel); TIM_OC1PreloadConfig(TIM17, ENABLE); /* without enabling there will be no signal on corresponding channels */ TIM_CtrlPWMOutputs(TIM17, DISABLE); TIM_Cmd(TIM17, DISABLE); }
/******************************************************************************* * Function Name : LedShow_Init * Description : Configure the leds pins as output pushpull: LED1, LED2, LED3 * and LED4 * Input : None * Output : None * Return : None *******************************************************************************/ void LedShow_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_OCStructInit(&TIM_OCInitStructure); /* PF.06, PF.07, PF.08 and PF.09 as output push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOF, &GPIO_InitStructure); /* Time Base configuration */ TIM_TimeBaseStructure.TIM_Prescaler = 719; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_Period = 0x270F; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); /* Channel 1 Configuration in Timing mode */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; TIM_OCInitStructure.TIM_Pulse = 0x0; TIM_OC1Init(TIM1, &TIM_OCInitStructure); }
/****************************************************************************** * Function Name : hwtm_ctrl_config * Description : Initialize the TIM Controller * Input : None * Output : None * Return : 0 ******************************************************************************/ int hwtm_ctrl_config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; /* Enable TIM2 APB1 clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_OCStructInit(&TIM_OCInitStructure); /* TIM2 used for timing, the timing period depends on wav file sample rate */ TIM_TimeBaseStructure.TIM_Prescaler = 0x00; /* TIM2CLK = 72 MHz */ TIM_TimeBaseStructure.TIM_Period = tim_arr_val; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); /* Channel 1 Configuration in Timing mode */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; TIM_OCInitStructure.TIM_Pulse = 0x0; TIM_OC1Init(TIM2, &TIM_OCInitStructure); TIM_Cmd(TIM2, DISABLE); return 0; }
/** * @brief Initialize the timer channel linked to the servo in PWM mode. * @param servo: pointer to a ausbeeServo structure that contains the * configuration information for the specified servo. * @retval None */ void ausbeeInitServo(ausbeeServo* servo) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Period = 1999; TIM_TimeBaseStructure.TIM_Prescaler = 812; #ifdef SLOW_MCU TIM_TimeBaseStructure.TIM_Prescaler /= 5; #endif TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(servo->TIMx, &TIM_TimeBaseStructure); TIM_OCInitTypeDef OCInit_PWM; // Create a OCInitTypeDef for PWM TIM_OCStructInit(&OCInit_PWM); OCInit_PWM.TIM_OCMode = TIM_OCMode_PWM1; // Set PWM Mode OCInit_PWM.TIM_Pulse = 1500; // Duty cycle to 5% OCInit_PWM.TIM_OutputState = TIM_OutputState_Enable; if(servo->CHANx == TIM_Channel_1) TIM_OC1Init(servo->TIMx, &OCInit_PWM); // Initialize OSC1 else if(servo->CHANx == TIM_Channel_2) TIM_OC2Init(servo->TIMx, &OCInit_PWM); // Initialize OSC2 else if(servo->CHANx == TIM_Channel_3) TIM_OC3Init(servo->TIMx, &OCInit_PWM); // Initialize OSC3 else if(servo->CHANx == TIM_Channel_4) TIM_OC4Init(servo->TIMx, &OCInit_PWM); // Initialize OSC4 }
void RGBLED_Update(uint8_t RED_Val, uint8_t GREEN_Val, uint8_t BLUE_Val) { //printf("r: %x g: %x b:%x\n", RED_Val, GREEN_Val, BLUE_Val); TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(&TIM_OCInitStructure); /* PWM1 Mode configuration: Channel1 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = GREEN_Val; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); /* PWM1 Mode configuration: Channel2 */ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = BLUE_Val; TIM_OC2Init(TIM3, &TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); /* PWM1 Mode configuration: Channel3 */ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = RED_Val; TIM_OC3Init(TIM3, &TIM_OCInitStructure); TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); }
/** * @brief configure the TIM4 for PWM mode * @param None * @retval None */ void TIM_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; TIM_OCInitTypeDef TIM_OCInitStruct; // Let PWM frequency equal 100Hz. // Let period equal 1000. Therefore, timer runs from zero to 1000. Gives 0.1Hz resolution. // Solving for prescaler gives 240. TIM_TimeBaseStructInit( &TIM_TimeBaseInitStruct ); TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV4; TIM_TimeBaseInitStruct.TIM_Period = 1000 - 1; TIM_TimeBaseInitStruct.TIM_Prescaler = 72 - 1; TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit( TIM3, &TIM_TimeBaseInitStruct ); TIM_OCStructInit( &TIM_OCInitStruct ); TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; // Initial duty cycle equals 0%. Value can range from zero to 65535. //TIM_Pulse = TIM4_CCR1 register (16 bits) TIM_OCInitStruct.TIM_Pulse = 100 - 1; //(0=Always Off, 65535=Always On) TIM_OC1Init( TIM3, &TIM_OCInitStruct ); // Channel 1 LED TIM_OC2Init( TIM3, &TIM_OCInitStruct ); // Channel 2 LED TIM_OC3Init( TIM3, &TIM_OCInitStruct ); // Channel 3 LED TIM_OC4Init( TIM3, &TIM_OCInitStruct ); // Channel 4 LED TIM_Cmd( TIM3, ENABLE ); }
void TIMER2_CH2_PWM_Init(int prescaler,int autoreload){ //USER LED / PB3 / TIM2_CH2 / AF1 RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOBEN ,ENABLE); GPIO_InitTypeDef myGPIO; GPIO_StructInit(&myGPIO); myGPIO.GPIO_Pin=GPIO_Pin_3; myGPIO.GPIO_Mode=GPIO_Mode_AF; myGPIO.GPIO_Speed=GPIO_Speed_10MHz; GPIO_Init(GPIOB,&myGPIO); GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_1); //select the output mode by writing the CCS bits in the CCMRx register //Timer time base configuration RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM2EN,ENABLE); TIM_TimeBaseInitTypeDef myTimeBase; TIM_TimeBaseStructInit(&myTimeBase); myTimeBase.TIM_CounterMode=TIM_CounterMode_Up; myTimeBase.TIM_Period=autoreload; myTimeBase.TIM_Prescaler=prescaler; myTimeBase.TIM_ClockDivision= TIM_CKD_DIV1; TIM_TimeBaseInit(TIM2,&myTimeBase); //Timer capture compare configuration TIM_OCInitTypeDef myTimerOC; TIM_OCStructInit(&myTimerOC); myTimerOC.TIM_OCMode=TIM_OCMode_PWM1; myTimerOC.TIM_OCPolarity=TIM_OCPolarity_High; myTimerOC.TIM_OutputState=TIM_OutputState_Enable; myTimerOC.TIM_Pulse=autoreload;//0 Duty cycle at start TIM_OC2Init(TIM2,&myTimerOC); TIM_CCxCmd(TIM2,TIM_Channel_2,TIM_CCx_Enable);//enable CCP2 //start Timer TIM_Cmd(TIM2,ENABLE);//Counter enabled }
static void _ws_Timer_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period = WS_PERIOD; TIM_TimeBaseStructure.TIM_Prescaler = WS_PRESCALE; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(WS_OUTPUT_TIM, &TIM_TimeBaseStructure); /* PWM1 Mode configuration */ TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = WS_PERIOD+1; WS_OUTPUT_TIM_OC_INIT_CMD(WS_OUTPUT_TIM, &TIM_OCInitStructure); WS_OUTPUT_TIM_OC_PLOAD_CMD(WS_OUTPUT_TIM, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(WS_OUTPUT_TIM, ENABLE); TIM_CCxCmd(WS_OUTPUT_TIM, WS_OUTPUT_TIM_CH, TIM_CCx_Enable); /* WS_OUTPUT_TIM enable/disable counter */ TIM_Cmd(WS_OUTPUT_TIM, ENABLE); }
void Buzzer_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(&TIM_OCInitStructure); // Timer Base Init - Buzzer TIM_DeInit(TIM4); TIM_TimeBaseStructure.TIM_Prescaler = 72-1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_Period = 2000; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); // PWM Init - Buzzer TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; TIM_OCInitStructure.TIM_Pulse = TIM_TimeBaseStructure. TIM_Period / 2; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OC4Init(TIM4, &TIM_OCInitStructure); TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Disable); TIM_Cmd(TIM4, ENABLE); TIM_CtrlPWMOutputs(TIM4, ENABLE); }
static void pwmOCConfig(TIM_TypeDef *tim, uint8_t channel, uint16_t value) { TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; TIM_OCInitStructure.TIM_Pulse = value; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; switch (channel) { case TIM_Channel_1: TIM_OC1Init(tim, &TIM_OCInitStructure); TIM_OC1PreloadConfig(tim, TIM_OCPreload_Enable); break; case TIM_Channel_2: TIM_OC2Init(tim, &TIM_OCInitStructure); TIM_OC2PreloadConfig(tim, TIM_OCPreload_Enable); break; case TIM_Channel_3: TIM_OC3Init(tim, &TIM_OCInitStructure); TIM_OC3PreloadConfig(tim, TIM_OCPreload_Enable); break; case TIM_Channel_4: TIM_OC4Init(tim, &TIM_OCInitStructure); TIM_OC4PreloadConfig(tim, TIM_OCPreload_Enable); break; } }
static void configBeeperPWMTimer(const beeperDevConfig_t *config) { TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = (1000000 / BEEPER_PWM_FREQUENCY) * 50 / 100; // 50% duty cycle TIM_OCInitStructure.TIM_OCPolarity = config->isInverted ? TIM_OCPolarity_High : TIM_OCPolarity_Low; TIM_OCInitStructure.TIM_OCIdleState = config->isInverted ? TIM_OCIdleState_Reset : TIM_OCIdleState_Set; configTimeBase(BEEPER_PWM_TIMER, 1000000 / BEEPER_PWM_FREQUENCY, PWM_TIMER_MHZ); TIM_Cmd(BEEPER_PWM_TIMER, ENABLE); switch (BEEPER_PWM_TIMER_CH) { case TIM_Channel_1: TIM_OC1Init(BEEPER_PWM_TIMER, &TIM_OCInitStructure); TIM_OC1PreloadConfig(BEEPER_PWM_TIMER, TIM_OCPreload_Enable); break; case TIM_Channel_2: TIM_OC2Init(BEEPER_PWM_TIMER, &TIM_OCInitStructure); TIM_OC2PreloadConfig(BEEPER_PWM_TIMER, TIM_OCPreload_Enable); break; case TIM_Channel_3: TIM_OC3Init(BEEPER_PWM_TIMER, &TIM_OCInitStructure); TIM_OC3PreloadConfig(BEEPER_PWM_TIMER, TIM_OCPreload_Enable); break; case TIM_Channel_4: TIM_OC4Init(BEEPER_PWM_TIMER, &TIM_OCInitStructure); TIM_OC4PreloadConfig(BEEPER_PWM_TIMER, TIM_OCPreload_Enable); break; } TIM_CtrlPWMOutputs(BEEPER_PWM_TIMER, DISABLE); }
/** * @brief Configures the Timer. * @param None * @retval None */ void TIMER_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // Timer base configuration TIM_OCInitTypeDef TIM_OCInitStructure; // Timer for PWM mode // Time Base configuration TIM_TimeBaseStructInit( &TIM_TimeBaseStructure ); TIM_TimeBaseStructure.TIM_Period = 720; // 72MHz / 720 = 100kHz TIM_TimeBaseStructure.TIM_Prescaler = 0x0; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down; TIM_TimeBaseInit( TIM1, &TIM_TimeBaseStructure ); // TIM1 channel1 configuration in PWM mode TIM_OCStructInit( &TIM_OCInitStructure ); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init( TIM1, &TIM_OCInitStructure ); TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); TIM_ClearITPendingBit(TIM1, TIM_IT_Update); // TIM1 counter enable TIM_Cmd( TIM1, ENABLE ); // TIM1 main Output Enable TIM_CtrlPWMOutputs( TIM1, ENABLE ); }
void pwmServoInit(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; GPIO_StructInit(&GPIO_InitStructure); TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_OCStructInit(&TIM_OCInitStructure); // Outputs // SERVO PWM0 TIM5 CH1 PA0 // SERVO PWM1 TIM5 CH2 PA1 // SERVO PWM2 TIM5 CH3 PA2 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_1 | GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_TIM5); GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_TIM5); GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_TIM5); // Output timers TIM_TimeBaseStructure.TIM_Period = (uint16_t)(2000000 / eepromConfig.servoPwmRate) - 1; TIM_TimeBaseStructure.TIM_Prescaler = 42 - 1; //TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM_TimeBaseStructure.TIM_RepititionCounter = 0x0000; TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //TIM_OCInitStructure.TIMOutputNState = TIM_OutputNState_Disable; TIM_OCInitStructure.TIM_Pulse = SERVO_PULSE_1p5MS; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; //TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset; TIM_OC1Init(TIM5, &TIM_OCInitStructure); TIM_OC2Init(TIM5, &TIM_OCInitStructure); TIM_Cmd(TIM5, ENABLE); TIM_CtrlPWMOutputs(TIM5, ENABLE); }
/*********************************************** 函数名:MotorInit(void) 功能:输出PWM的定时器2初始化 输入参数:无 输出:无 描述:调用该函数,即初始化定时器2为PWM输出模式 备注: ***********************************************/ void MotorInit(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; uint16_t PrescalerValue = 0; //控制电机PWM频率 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //打开外设A的时钟和复用时钟 RCC_APB1PeriphClockCmd(RCC_APB2Periph_TIM1 ,ENABLE); //打开定时器1时钟 //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //打开外设A的时钟和复用时钟 //RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4 ,ENABLE); //打开定时器4时钟 // 设置GPIO功能。 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 复位定时器。 TIM_DeInit(TIM1); // 配置计时器。 PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1; TIM_TimeBaseStructure.TIM_Period = 999; //计数上线 TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; //pwm时钟分频 TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数 TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure); // 配置TIM1为PWM输出模式 TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; //0 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM1,&TIM_OCInitStructure); //TIM_OC2Init(TIM2,&TIM_OCInitStructure); //TIM_OC3Init(TIM2,&TIM_OCInitStructure); //TIM_OC4Init(TIM2,&TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); //TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable); //TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable); // 启动计时器。 TIM_Cmd(TIM1,ENABLE); printf("TIM1 enable done...\r\n"); MotorInit_1(); }
void Timer_Configuration(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_OCStructInit(&TIM_OCInitStructure); TIM_DeInit(TIM2); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 65535; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); /* Prescaler configuration */ TIM_PrescalerConfig(TIM2, 722, TIM_PSCReloadMode_Immediate); /* Output Compare Timing Mode configuration: Channel1 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; /* TIM_OCInitStructure.TIM_Pulse = CCR1_Val ; TIM_OC1Init(TIM2, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable); */ /* TIM_OCInitStructure.TIM_Pulse = CCR2_Val ; TIM_OC2Init(TIM2, &TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Disable); TIM_OCInitStructure.TIM_Pulse = CCR3_Val ; TIM_OC3Init(TIM2, &TIM_OCInitStructure); TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Disable); */ TIM_OCInitStructure.TIM_Pulse = CCR4_Val ; TIM_OC4Init(TIM2, &TIM_OCInitStructure); TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Disable); /* TIM IT enable */ TIM_ITConfig(TIM2, /*TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 |*/ TIM_IT_CC4 , ENABLE); /* TIM2 enable counter */ TIM_Cmd(TIM2, ENABLE); }
/** * @brief Clock_Init * Initialize local timer for clock visualization */ void Clock_Init(){ // Timer configuration TIM_TimeBaseInitTypeDef timerConfig; TIM_OCInitTypeDef TIM_OCInitStructure; NVIC_InitTypeDef NVIC_InitStructure; // now we need a timer to decide if we received a bit or not RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); TIM_DeInit(TIM4); TIM_TimeBaseStructInit(&timerConfig); /* Time base configuration */ timerConfig.TIM_Period = 0xFFFF; timerConfig.TIM_Prescaler = PRESCALER-1; timerConfig.TIM_ClockDivision = 0; timerConfig.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4, &timerConfig); TIM_ITConfig(TIM4, TIM_IT_CC1, ENABLE); TIM_ClearITPendingBit(TIM4, TIM_IT_CC1); /* Compare interrupt */ TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Active; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable; //TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OC1Init(TIM4, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Disable); // set compare value lastCompareDuration = COUNTERVALUE40MS; TIM4->CCR1 = COUNTERVALUE40MS; // total time totalDuration = COUNTERVALUE40MS * RATE_MIN; newTotalDuration = totalDuration; // Enable Interrupt NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // reset interrupt NVIC_ClearPendingIRQ(TIM4_IRQn); NVIC_Init(&NVIC_InitStructure); // now start the timer TIM_Cmd(TIM4, ENABLE); }
void brewbotOutput(int peripheral, int on) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; TIM_OCInitTypeDef outputChannelInit = {0,}; TIM_OCStructInit( &outputChannelInit ); outputChannelInit.TIM_OCMode = TIM_OCMode_PWM1; outputChannelInit.TIM_Pulse = 0; outputChannelInit.TIM_OutputState = TIM_OutputState_Enable; outputChannelInit.TIM_OCPolarity = TIM_OCPolarity_Low; switch (peripheral) { case SSR: outputChannelInit.TIM_Pulse = 0; if (on) outputChannelInit.TIM_Pulse = on * 20; TIM_OC1Init(TIM5, &outputChannelInit); break; case STIRRER: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_Init( GPIOE, &GPIO_InitStructure ); GPIO_WriteBit( GPIOE, GPIO_Pin_2, on == 0 ); break; case PUMP: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_Init( GPIOE, &GPIO_InitStructure ); GPIO_WriteBit( GPIOE, GPIO_Pin_4, on == 0 ); break; case VALVE: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_Init( GPIOE, &GPIO_InitStructure ); GPIO_WriteBit( GPIOE, GPIO_Pin_6, on != 0 ); break; case HOPS1: case HOPS2: case HOPS3: outputChannelInit.TIM_Pulse = on; if (!on) outputChannelInit.TIM_OutputState = TIM_OutputState_Disable; if (peripheral == HOPS1) TIM_OC3Init(TIM5, &outputChannelInit); if (peripheral == HOPS2) TIM_OC2Init(TIM5, &outputChannelInit); if (peripheral == HOPS3) TIM_OC4Init(TIM5, &outputChannelInit); break; } }
// Use TIMER_TIM to create a us system clock void timerInit(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; NVIC_InitTypeDef NVIC_InitStructure; // Enable the TIMER_TIM global Interrupt NVIC_InitStructure.NVIC_IRQChannel = TIMER_IRQ_CH; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIMER_EN; // stop timer when core halted (debug) DBGMCU_APB1PeriphConfig(TIMER_CORE_HALT, ENABLE); /* Time base configuration for 1MHz (us)*/ TIM_TimeBaseStructure.TIM_Period = 0xFFFFFFFF; TIM_TimeBaseStructure.TIM_Prescaler = (TIMER_CLOCK / 1000000) - 1; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIMER_TIM, &TIM_TimeBaseStructure); // reset TIM_SetCounter(TIMER_TIM, 0); timerCancelAlarm1(); timerCancelAlarm2(); timerCancelAlarm3(); timerCancelAlarm4(); // Output Compare for alarms TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Inactive; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIMER_TIM, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIMER_TIM, TIM_OCPreload_Disable); TIM_OC2Init(TIMER_TIM, &TIM_OCInitStructure); TIM_OC2PreloadConfig(TIMER_TIM, TIM_OCPreload_Disable); TIM_OC3Init(TIMER_TIM, &TIM_OCInitStructure); TIM_OC3PreloadConfig(TIMER_TIM, TIM_OCPreload_Disable); TIM_OC4Init(TIMER_TIM, &TIM_OCInitStructure); TIM_OC4PreloadConfig(TIMER_TIM, TIM_OCPreload_Disable); // go... TIM_Cmd(TIMER_TIM, ENABLE); }
// TODO: modify PWM frequency for controlling servos // Analog servo : 50 Hz // Digital servo : void TIM4_PWM_Configuration() { /* RCC Initialization */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); /* Timer 4 Initialization */ TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; TIM_OCInitTypeDef TIM_OCInitStruct; // Set PWM frequency equal 100 Hz.which is standard frequency of servo // Let period equal 1000. Therefore, timer runs from zero to 1000. Gives 0.1Hz resolution. // Solving for prescaler gives 240. TIM_TimeBaseStructInit( &TIM_TimeBaseInitStruct ); TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV4; TIM_TimeBaseInitStruct.TIM_Period = 3360 - 1; TIM_TimeBaseInitStruct.TIM_Prescaler = 500 - 1; TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit( TIM4, &TIM_TimeBaseInitStruct ); TIM_OCStructInit( &TIM_OCInitStruct ); TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; // Initial duty cycle equals 0%. Value can range from zero to 65535. // TIM_Pulse = TIM4_CCR1 register (16 bits) TIM_OCInitStruct.TIM_Pulse = 0; TIM_OC1Init( TIM4, &TIM_OCInitStruct ); // Channel 1 LED TIM_OC2Init( TIM4, &TIM_OCInitStruct ); // Channel 2 LED TIM_OC3Init( TIM4, &TIM_OCInitStruct ); // Channel 3 LED TIM_OC4Init( TIM4, &TIM_OCInitStruct ); // Channel 4 LED TIM_Cmd( TIM4, ENABLE ); GPIO_InitTypeDef GPIO_InitStructure; GPIO_StructInit(&GPIO_InitStructure); // Reset init structure GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_TIM4); GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_TIM4); GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_TIM4); GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_TIM4); // Setup Blue & Green LED on STM32-Discovery Board to use PWM. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; // Alt Function - Push Pull GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init( GPIOD, &GPIO_InitStructure ); }
NODEBUG2 void BUZZER_Init( void ) { #if !AUDIO_AVAIL GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOB clock */ RCC_PERIPH_GPIO_CLOCK_CMD( RCC_APB2Periph_GPIOB, ENABLE ); /* GPIOB Configuration: TIM3 3in Output */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init( GPIOB, &GPIO_InitStructure ); /* TIM3 Configuration ------------------------------------------------------*/ /* TIM3CLK = 18 MHz, Prescaler = 0x0, TIM3 counter clock = 18 MHz */ /* CC update rate = TIM3 counter clock / (2* CCR_Val) ~= 750 Hz */ /* Enable TIM3 clock */ RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE ); TIM_DeInit( TIM3 ); TIM_TimeBaseStructInit( &TIM_TimeBaseStructure ); TIM_OCStructInit( &TIM_OCInitStructure ); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 0xFFFF; TIM_TimeBaseStructure.TIM_Prescaler = 0x0; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit( TIM3, &TIM_TimeBaseStructure ); /* Output Compare Toggle Mode configuration: Channel3 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; /* in FWLib v1.0 : TIM_OCInitStructure.TIM_Channel = TIM_Channel_3;*/ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; /* now in in FWLib v2.0*/ TIM_OCInitStructure.TIM_Pulse = CCR_Val; TIM_OC3Init( TIM3, &TIM_OCInitStructure ); /* changed against FWLib v2.0*/ TIM_OC3PreloadConfig( TIM3, TIM_OCPreload_Disable ); BUZZER_SetFrequency( 440 ); #endif #if AUDIO_AVAIL /* RQ : init done by Audio init*/ #endif BUZZER_SetMode( BUZZER_OFF ); }
/******************************************************************** º¯Êý¹¦ÄÜ£ºµç»ú³õʼ»¯ Èë¿Ú²ÎÊý£ºÎÞ¡£ ·µ »Ø£ºÎÞ¡£ ±¸ ×¢£º ********************************************************************/ void motor_init(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; uint16_t PrescalerValue = 0; //¿ØÖƵç»úPWMƵÂÊ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //´ò¿ªÍâÉèAµÄʱÖӺ͸´ÓÃʱÖÓ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 ,ENABLE); //´ò¿ª¶¨Ê±Æ÷2ʱÖÓ // ÉèÖÃGPIO¹¦ÄÜ¡£ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // ¸´Î»¶¨Ê±Æ÷¡£ TIM_DeInit(TIM2); // ÅäÖüÆʱÆ÷¡£ PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1; TIM_TimeBaseStructure.TIM_Period = 999; //¼ÆÊýÉÏÏß TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; //pwmʱÖÓ·ÖƵ TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //ÏòÉϼÆÊý TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); // ÅäÖÃTIM2ΪPWMÊä³öģʽ TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; //0 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM2,&TIM_OCInitStructure); TIM_OC2Init(TIM2,&TIM_OCInitStructure); TIM_OC3Init(TIM2,&TIM_OCInitStructure); TIM_OC4Init(TIM2,&TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable); // Æô¶¯¼ÆʱÆ÷¡£ TIM_Cmd(TIM2,ENABLE); //printf("-> motor enable...\r\n"); }
void pwmInit(void){ RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOD, ENABLE ); //Enables the AHB1 peripheral clock. RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM4, ENABLE ); //Enables the APB1 peripheral clock. GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; TIM_OCInitTypeDef TIM_OCInitStruct; GPIO_StructInit(&GPIO_InitStructure); // Reset init structure GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_TIM4); //Change mapping of pins GPIO_PinAFConfig(GPIOD, GPIO_PinSource13, GPIO_AF_TIM4); GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_TIM4); GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_TIM4); // Setup All LED on STM32-Discovery Board to use PWM. GPIO_InitStructure.GPIO_Pin = 0xf000; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; // Alt Function - Push Pull GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init( GPIOD, &GPIO_InitStructure ); // Let PWM frequency equal 100Hz. // Let period equal 1000. Therefore, timer runs from zero to 1000. Gives 0.1Hz resolution. // Solving for prescaler gives 240. TIM_TimeBaseStructInit( &TIM_TimeBaseInitStruct ); TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV4; TIM_TimeBaseInitStruct.TIM_Period = 1000 ; // 0..999 TIM_TimeBaseInitStruct.TIM_Prescaler = 240; // Div 240 TIM_TimeBaseInit( TIM4, &TIM_TimeBaseInitStruct ); TIM_OCStructInit( &TIM_OCInitStruct ); TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; // Initial duty cycle equals 0%. Value can range from zero to 1000. TIM_OCInitStruct.TIM_Pulse = 500; // 0 .. 1000 (0=Always Off, 1000=Always On) //Channel 1-4 for the 4 LEDs TIM_OC1Init( TIM4, &TIM_OCInitStruct ); TIM_OC2Init( TIM4, &TIM_OCInitStruct ); TIM_OC3Init( TIM4, &TIM_OCInitStruct ); TIM_OC4Init( TIM4, &TIM_OCInitStruct ); TIM_Cmd( TIM4, ENABLE );
void BUZZER_Init( void ) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOB clock */ RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); /* GPIOB Configuration: TIM3 3in Output */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init( GPIOB, &GPIO_InitStructure ); /* TIM3 Configuration ------------------------------------------------------*/ /* TIM3CLK = 18 MHz, Prescaler = 0x0, TIM3 counter clock = 18 MHz */ /* CC update rate = TIM3 counter clock / (2* CCR_Val) ~= 750 Hz */ /* Enable TIM3 clock */ RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE ); TIM_DeInit( TIM3 ); TIM_TimeBaseStructInit( &TIM_TimeBaseStructure ); TIM_OCStructInit( &TIM_OCInitStructure ); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 0xFFFF; TIM_TimeBaseStructure.TIM_Prescaler = 0x0; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit( TIM3, &TIM_TimeBaseStructure ); /* Output Compare Toggle Mode configuration: Channel3 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR_Val; TIM_OC3Init( TIM3, &TIM_OCInitStructure ); TIM_OC3PreloadConfig( TIM3, TIM_OCPreload_Disable ); BUZZER_SetFrequency( 440 ); /* Enable TIM3 IT */ TIM_ITConfig( TIM3, TIM_IT_CC3, ENABLE ); Buzzer_Mode = BUZZER_OFF; }
/*---------------------------------------------------------------------------*/ void rtimer_arch_init(void) { /* to init, we use structures that are filled in and passed to the HAL */ TIM_TimeBaseInitTypeDef tim_init_s; TIM_OCInitTypeDef tim_ocinit_s; NVIC_InitTypeDef nvic_init_s; /* Enable TIM2 peripheral clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /* configure TIM2 */ tim_init_s.TIM_Prescaler = PRESCALER; tim_init_s.TIM_CounterMode = TIM_CounterMode_Up; tim_init_s.TIM_ClockDivision = 0; tim_init_s.TIM_Period = 1; /* tim_init_s.TIM_Period = RTIMER_SECOND/2;*/ TIM_TimeBaseInit(TIM2, &tim_init_s); /* Configure the timer for output compare interrupt */ TIM_OCStructInit(&tim_ocinit_s); tim_ocinit_s.TIM_OCMode = TIM_OCMode_Timing; tim_ocinit_s.TIM_Pulse = 0; /* tim_ocinit_s.TIM_OutputState = TIM_OutputState_Enable;*/ /* tim_ocinit_s.TIM_OCPolarity = TIM_OCPolarity_High;*/ TIM_OC1Init(TIM2, &tim_ocinit_s); /* Immediate load of TIM2 Precaler value */ /* TIM_PrescalerConfig(TIM2, (F_CPU/RTIMER_SECOND), TIM_PSCReloadMode_Immediate);*/ /* TIM_PrescalerConfig(TIM2, ((SystemCoreClock/1200) - 1), TIM_PSCReloadMode_Immediate);*/ /* Clear TIM2 update pending flag */ TIM_ClearFlag(TIM2, TIM_FLAG_Update); /* Enable TIM2 Update interrupt */ TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); TIM_Cmd(TIM2, ENABLE); /* Enable the TIM2 Interrupt in the NVIC */ nvic_init_s.NVIC_IRQChannel = TIM2_IRQn; nvic_init_s.NVIC_IRQChannelPreemptionPriority = 0; nvic_init_s.NVIC_IRQChannelSubPriority = 0; nvic_init_s.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&nvic_init_s); }
void TIM_Config(void) { // timer runs at 5MHz. timer frequency= sysclock/prescaler(the counting speed) Prescaler= (uint16_t) (72000000 / 0xFFFF); /* TIM2 configuration */ // generate 1Hz interrupts TIM_TimeBaseStructure.TIM_Period = 0xFFFF; TIM_TimeBaseStructure.TIM_Prescaler = Prescaler; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; /*update every time when counter overflows*/ TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_OCStructInit(&TIM_OCInitStructure); /* Output Compare Timing Mode configuration: Channel1 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; TIM_OCInitStructure.TIM_Pulse = 0x0; TIM_OC1Init(TIM2, &TIM_OCInitStructure); TIM_PrescalerConfig(TIM2,Prescaler,TIM_PSCReloadMode_Immediate); TIM_ClearFlag(TIM2, TIM_FLAG_Update); /* Configure two bits for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* Enable the TIM2 Interrupt */ //NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0); NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* Enable TIM2 Update interrupts */ TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); /* TIM2 enable counters */ TIM_Cmd(TIM2, ENABLE); }
void PWM_Init(void) { uint16_t PrescalerValue = 0; /* Control the frequency rate of PWM */ GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* Set GPIO function */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); TIM_DeInit(TIM2); /* Configure timer */ PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1; TIM_TimeBaseStructure.TIM_Period = 999; /* The upper limit of counter */ TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; /* The timer fractional frequency of PWM */ TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); /* Configure the model of the TIM2 is PWM */ TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM2, &TIM_OCInitStructure); TIM_OC2Init(TIM2, &TIM_OCInitStructure); TIM_OC3Init(TIM2, &TIM_OCInitStructure); TIM_OC4Init(TIM2, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_Cmd(TIM2, ENABLE); }
static void init_timer2(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_OCStructInit(&TIM_OCInitStructure); TIM_TimeBaseStructure.TIM_Period = 65535 - 1; TIM_TimeBaseStructure.TIM_Prescaler = (uint16_t) (SystemCoreClock / 1000000) - 1; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_Cmd(TIM2, ENABLE); }
void pwmOCInit(const TIM_TypeDef *tim, uint16_t channel, uint32_t inititalValue) { TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; TIM_OCInitStructure.TIM_Pulse = inititalValue; switch (channel) { case TIM_Channel_1: TIM_OC1Init((TIM_TypeDef *)tim, &TIM_OCInitStructure); break; case TIM_Channel_2: TIM_OC2Init((TIM_TypeDef *)tim, &TIM_OCInitStructure); break; case TIM_Channel_3: TIM_OC3Init((TIM_TypeDef *)tim, &TIM_OCInitStructure); break; case TIM_Channel_4: TIM_OC4Init((TIM_TypeDef *)tim, &TIM_OCInitStructure); break; } }