/** * @brief Example firmware main entry point. * @par Parameters: * None * @retval * None */ void main(void) { /* Time base configuration */ TIM2_TimeBaseInit(TIM2_PRESCALER_2048, 65535); /* Prescaler configuration */ TIM2_PrescalerConfig(TIM2_PRESCALER_2048, TIM2_PSCRELOADMODE_IMMEDIATE); /* Output Compare Active Mode configuration: Channel1 */ /* TIM2_OCMode = TIM2_OCMODE_ACTIVE TIM2_OutputState = TIM2_OUTPUTSTATE_ENABLE TIM2_Pulse = CCR1_Val TIM2_OCPolarity = TIM2_OCPOLARITY_HIGH */ TIM2_OC1Init(TIM2_OCMODE_ACTIVE, TIM2_OUTPUTSTATE_ENABLE,CCR1_Val, TIM2_OCPOLARITY_HIGH); TIM2_OC1PreloadConfig(DISABLE); /* Output Compare Active Mode configuration: Channel2 */ /*TIM2_Pulse = CCR2_Val */ TIM2_OC2Init(TIM2_OCMODE_ACTIVE, TIM2_OUTPUTSTATE_ENABLE,CCR2_Val, TIM2_OCPOLARITY_HIGH); TIM2_OC2PreloadConfig(DISABLE); /* Output Compare Active Mode configuration: Channel3 */ /* TIM2_Pulse = CCR3_Val */ TIM2_OC3Init(TIM2_OCMODE_ACTIVE, TIM2_OUTPUTSTATE_ENABLE,CCR3_Val, TIM2_OCPOLARITY_HIGH); TIM2_OC3PreloadConfig(DISABLE); TIM2_ARRPreloadConfig(ENABLE); /* Set PG.6 pin */ GPIO_Init(GPIOG, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_WriteHigh(GPIOG, GPIO_PIN_6); /* TIM2 enable counter */ TIM2_Cmd(ENABLE); while (1); }
void __delay_us(uint16_t delay) { delay = delay * 16; uint16_t count = 0; TIM2_ARRPreloadConfig(DISABLE); TIM2_SetAutoreload(delay); TIM2_SetCounter(0); TIM2_Cmd(ENABLE); while(TIM2_GetFlagStatus(TIM2_FLAG_Update) == RESET); TIM2_ClearFlag(TIM2_FLAG_Update); TIM2_Cmd(DISABLE); }
void MOD_TIM_Config(Mod_Master_Frame_TypeDef* aFrame) { TIM2_DeInit(); TIM2_TimeBaseInit(0x0F, 1500); //2ms comm response time TIM2_UpdateRequestConfig(TIM2_UPDATESOURCE_REGULAR); TIM2_GenerateEvent(TIM2_EVENTSOURCE_UPDATE); TIM2_Cmd(DISABLE); TIM2_ClearITPendingBit(TIM2_IT_UPDATE); TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); TIM2_ClearFlag(TIM2_FLAG_UPDATE); TIM4_DeInit(); TIM4_TimeBaseInit(0x07, 126); //128 * 126 = 16128 = 2ms (8MHz), frame check TIM4_UpdateRequestConfig(TIM4_UPDATESOURCE_REGULAR); TIM4_GenerateEvent(TIM4_EVENTSOURCE_UPDATE); TIM4_Cmd(DISABLE); TIM4_ClearITPendingBit(TIM4_IT_UPDATE); TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); TIM4_ClearFlag(TIM4_FLAG_UPDATE); }
void BuzzerStart(void) { /* TIM2_DeInit(); TIM2_TimeBaseInit(TIM2_PRESCALER_16,u8BzrFrqBuf); TIM2_ARRPreloadConfig(ENABLE); TIM2_Cmd(ENABLE); TIM2_ITConfig(TIM2_IT_UPDATE,ENABLE); */ TIM2_DeInit(); TIM2_TimeBaseInit(TIM2_PRESCALER_16,u8BzrFrqBuf ); #ifdef NEW_260 TIM2_CCxCmd(TIM2_CHANNEL_3, ENABLE); TIM2_OC3Init(TIM2_OCMODE_TOGGLE, TIM2_OUTPUTSTATE_ENABLE, 64, TIM2_OCPOLARITY_LOW); TIM2_OC3PreloadConfig(ENABLE); #else TIM2_CCxCmd(TIM2_CHANNEL_2, ENABLE); TIM2_OC2Init(TIM2_OCMODE_TOGGLE, TIM2_OUTPUTSTATE_ENABLE, 64, TIM2_OCPOLARITY_LOW); TIM2_OC2PreloadConfig(ENABLE); #endif TIM2_ARRPreloadConfig(ENABLE); TIM2_ITConfig(TIM2_IT_CC1, DISABLE); TIM2_ITConfig(TIM2_IT_CC2, DISABLE); TIM2_ITConfig(TIM2_IT_CC3, DISABLE); TIM2_ITConfig(TIM2_IT_UPDATE, DISABLE); TIM2_GenerateEvent(TIM2_EVENTSOURCE_UPDATE); TIM2_Cmd(ENABLE); SetBuzzerEnOn(); }
static void TIM2_Config(void) { /* Enable TIM2 CLK */ CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE); /* Capture only every 8 events!!! */ /* Enable capture of TIM2 */ TIM2_ICInit(TIM2_Channel_1, TIM2_ICPolarity_Falling, TIM2_ICSelection_DirectTI, TIM2_ICPSC_Div8, 0); /* Enable timer1 */ TIM2_Cmd(ENABLE); /* Config Channel 1 pin*/ GPIO_Init(GPIOB, GPIO_Pin_0, GPIO_Mode_In_PU_No_IT); /* Clear CC1 Flag*/ TIM2_ClearFlag(TIM2_FLAG_CC1); /* wait a Capture on CC1 */ while((TIM2->SR1 & TIM2_FLAG_CC1) != TIM2_FLAG_CC1); /* Get CCR1 value*/ ICValue1 = TIM2_GetCapture1(); /* Clear CC1 Flag*/ TIM2_ClearFlag(TIM2_FLAG_CC1); /* wait a capture on cc1 */ while((TIM2->SR1 & TIM2_FLAG_CC1) != TIM2_FLAG_CC1); /* Get CCR1 value*/ ICValue2 = TIM2_GetCapture1(); TIM2_ClearFlag(TIM2_FLAG_CC1); }
void InitTimer(void) { clk_config(); TIM2_DeInit(); CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE); TIM2_TimeBaseInit(TIM2_Prescaler_1, TIM2_CounterMode_Up, 500); TIM2_Cmd(ENABLE); }
inline void vMBPortTimersDisable( ) { /* Disable any pending timers. */ TIM2_ITConfig(TIM2_IT_UPDATE, DISABLE); TIM2_Cmd(DISABLE); }
/* Configure TIM2 to interrupt every 10ms */ void InitTimer() { TIM2_DeInit(); TIM2_TimeBaseInit(TIM2_PRESCALER_32768, // Interrupt every 32768 clock pulses. 5); // 16Mhz / 32768 = 488 -> every 2ms -> ARR=5 -> every 10ms TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); TIM2_Cmd(ENABLE); }
void timerInit(void) { /* TIM2 initial */ TIM2_TimeBaseInit(TIM2_PRESCALER_16,7812); TIM2_ITConfig( TIM2_IT_UPDATE , ENABLE); TIM2_SetCounter(0x0000); /*计时器打开*/ TIM2_Cmd(ENABLE); TIM2_ClearFlag(TIM2_FLAG_UPDATE); }
void timer_init() { TIM2_DeInit(); TIM2_TimeBaseInit(TIM2_PRESCALER_1, 1600); //TIM2_PrescalerConfig(TIM2_PRESCALER_32768, TIM2_PSCRELOADMODE_IMMEDIATE); TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); ITC_SetSoftwarePriority(ITC_IRQ_TIM2_OVF, ITC_PRIORITYLEVEL_1); TIM2_Cmd(ENABLE); }
void setTimeoutCheck(Mod_Timer_Check_TypeDef act) { if (act == MOD_TIMER_START) { TIM2_Cmd(DISABLE); TIM2_SetCounter(0); TIM2_Cmd(ENABLE); modInts.timeout_int_en = TRUE; } else if (act == MOD_TIMER_PAUSE) { TIM2_Cmd(DISABLE); modInts.timeout_int_en = FALSE; } else if (act == MOD_TIMER_RESUM) { TIM2_Cmd(ENABLE); modInts.timeout_int_en = TRUE; } else if (act == MOD_TIMER_STOP) { TIM2_Cmd(DISABLE); modInts.timeout_int_en = FALSE; } }
inline void vMBPortTimersEnable( ) { /* Enable the timer with the timeout passed to xMBPortTimersInit( ) */ TIM2_ClearFlag(TIM2_FLAG_UPDATE); TIM2_SetCounter(0x00); TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); TIM2_Cmd(ENABLE); }
/** * @brief Включить таймер № 2. * @par * Параметры отсутствуют * @retval * Возвращаемое значение отсутствует */ void CounterTimerStart(void) { TIM2_DeInit(); TIM2_TimeBaseInit(TIM2_PRESCALER_32768, 610); TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); TIM2_Cmd(ENABLE); }
void BuzzerStop(void) { TIM2_Cmd(DISABLE); // TIM2_ITConfig(TIM2_IT_UPDATE,DISABLE); SetBuzzerEnOff(); u8BzrFrqBuf = 0; u8OutState &= (u8)(~BuzWork); u8BzrOn5MSCnt = 0; u8BzrOff5MSCnt = 0; }
void tim2_on(void) { TIM2_TimeBaseInit(TIM2_Prescaler_2,TIM2_CounterMode_Up,0x0800); TIM2_OC1Init(TIM2_OCMode_PWM2,TIM2_OutputState_Enable,0x0400,TIM2_OCPolarity_High,TIM2_OCIdleState_Set); TIM2_OC2Init(TIM2_OCMode_PWM2,TIM2_OutputState_Enable,0x0400,TIM2_OCPolarity_Low ,TIM2_OCIdleState_Set); TIM2_CCxCmd(TIM2_Channel_1,ENABLE); TIM2_CCxCmd(TIM2_Channel_2,ENABLE); TIM2_BKRConfig(TIM2_OSSIState_Enable,TIM2_LockLevel_Off,TIM2_BreakState_Disable,TIM2_BreakPolarity_High,TIM2_AutomaticOutput_Enable); TIM2_ITConfig(TIM2_IT_CC1,ENABLE); TIM2_ITConfig(TIM2_IT_CC2,DISABLE); TIM2_Cmd(ENABLE); };
/* Private functions ---------------------------------------------------------*/ void TIM2_Config(void) { /* Time base configuration */ TIM2_TimeBaseInit(TIM2_Prescaler_1,TIM2_CounterMode_Up, 1); /* Clear TIM1 update flag */ TIM2_ClearFlag(TIM2_FLAG_Update); /* Enable update interrupt */ TIM2_ITConfig(TIM2_IT_Update, ENABLE); /* Enable TIM2 */ TIM2_Cmd(ENABLE); }
/******************************************************************************* * ==定时器2初始化函数== * TIM2_DeInit(); --> 初始化定时器2寄存器 * TIM2_TimeBaseInit(TIM2_PRESCALER_1, 224); --> 定时器2基本初始化 设置 分频系数 , 初值 --> ( 无分频 , 7372800 / 32768 = 225 校准为224 ) * TIM2_OC1Init(TIM2_OCMODE_PWM1 , TIM2_OUTPUTSTATE_ENABLE , 112 , TIM2_OCPOLARITY_HIGH); --> 定时器2输出方式 为PWM1 , 定时器2输出状态使能 , 输出占空比 50% , 输出起始电平 为高 * TIM2_Cmd(ENABLE); --> 启动定时器 *******************************************************************************/ void TIME2_INIT(void) { // TIM2_DeInit(); TIM2_TimeBaseInit(TIM2_PRESCALER_2, 1000); TIM2_OC3Init(TIM2_OCMODE_PWM1 , TIM2_OUTPUTSTATE_ENABLE , 0 , TIM2_OCPOLARITY_HIGH); // TIM2_OC3PreloadConfig(ENABLE); // TIM1_CtrlPWMOutputs(ENABLE); TIM2->CCMR3 |= (uint8_t)TIM2_CCMR_OCxPE; TIM1->BKR |= TIM1_BKR_MOE; TIM2->CR1 |= (uint8_t)TIM2_CR1_CEN; TIM2_Cmd(ENABLE); }
/** * @brief Example firmware main entry point. * @par Parameters: * None * @retval * None */ void main(void) { /* Time base configuration */ TIM2_TimeBaseInit(TIM2_PRESCALER_2048, 65535); /* Prescaler configuration */ TIM2_PrescalerConfig(TIM2_PRESCALER_2048, TIM2_PSCRELOADMODE_IMMEDIATE); /* Output Compare Active Mode configuration: Channel1 */ /* TIM2_OCMode = TIM2_OCMODE_INACTIVE TIM2_OCPolarity = TIM2_OCPOLARITY_HIGH TIM2_Pulse = CCR1_Val */ TIM2_OC1Init(TIM2_OCMODE_INACTIVE, TIM2_OUTPUTSTATE_ENABLE,CCR1_Val, TIM2_OCPOLARITY_HIGH); TIM2_OC1PreloadConfig(DISABLE); /* Output Compare Active Mode configuration: Channel2 */ /*TIM2_Pulse = CCR2_Val; */ TIM2_OC2Init(TIM2_OCMODE_INACTIVE, TIM2_OUTPUTSTATE_ENABLE,CCR2_Val, TIM2_OCPOLARITY_HIGH); TIM2_OC2PreloadConfig(DISABLE); /* Output Compare Active Mode configuration: Channel3 */ /*TIM2_Pulse = CCR3_Val */ TIM2_OC3Init(TIM2_OCMODE_INACTIVE, TIM2_OUTPUTSTATE_ENABLE,CCR3_Val, TIM2_OCPOLARITY_HIGH); TIM2_OC3PreloadConfig(DISABLE); TIM2_ARRPreloadConfig(ENABLE); /* TIM IT enable */ TIM2_ITConfig(TIM2_IT_CC1, ENABLE); TIM2_ITConfig(TIM2_IT_CC2, ENABLE); TIM2_ITConfig(TIM2_IT_CC3, ENABLE); /* Set pin PG.5 & PG.6 & PG.7 to high state */ GPIO_Init(GPIOG, (GPIO_PIN_5|GPIO_PIN_6| GPIO_PIN_7), GPIO_MODE_OUT_PP_LOW_FAST); GPIO_WriteHigh(GPIOG, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7); /* TIM2 enable counter */ TIM2_Cmd(ENABLE); enableInterrupts(); while (1); }
void TIM2_Config(void) { /* TIM2 configuration: - TIM2CLK is set to 16 MHz, the TIM2 Prescaler is equal to 128 so the TIM2 counter clock used is 16 MHz / 512 = 31250 Hz - In this example we need to generate a time base equal to 500 ms so TIM2_PERIOD = (0.5 * 312500 - 1) = 15624 */ /* Time base configuration */ TIM2_TimeBaseInit(TIM2_PRESCALER_512, TIM2_PERIOD); TIM2_ARRPreloadConfig(ENABLE); TIM2_ClearFlag(TIM2_FLAG_UPDATE); /* Enable update interrupt */ TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); /* Enable TIM2 */ TIM2_Cmd(ENABLE); }
/** * @brief Configure Output Compare Active Mode for TIM2 Channel1, Channel2 and * channel3 * @param None * @retval None */ static void TIM2_Config(void) { /* Time base configuration */ TIM2_TimeBaseInit(TIM2_PRESCALER_2048, 65535); /* Prescaler configuration */ TIM2_PrescalerConfig(TIM2_PRESCALER_2048, TIM2_PSCRELOADMODE_IMMEDIATE); /* Output Compare Active Mode configuration: Channel1 */ /* TIM2_OCMode = TIM2_OCMODE_INACTIVE TIM2_OCPolarity = TIM2_OCPOLARITY_HIGH TIM2_Pulse = CCR1_Val */ TIM2_OC1Init(TIM2_OCMODE_INACTIVE, TIM2_OUTPUTSTATE_ENABLE,CCR1_Val, TIM2_OCPOLARITY_HIGH); TIM2_OC1PreloadConfig(DISABLE); /* Output Compare Active Mode configuration: Channel2 */ /*TIM2_Pulse = CCR2_Val; */ TIM2_OC2Init(TIM2_OCMODE_INACTIVE, TIM2_OUTPUTSTATE_ENABLE,CCR2_Val, TIM2_OCPOLARITY_HIGH); TIM2_OC2PreloadConfig(DISABLE); /* Output Compare Active Mode configuration: Channel3 */ /*TIM2_Pulse = CCR3_Val */ TIM2_OC3Init(TIM2_OCMODE_INACTIVE, TIM2_OUTPUTSTATE_ENABLE,CCR3_Val, TIM2_OCPOLARITY_HIGH); TIM2_OC3PreloadConfig(DISABLE); TIM2_ARRPreloadConfig(ENABLE); /* TIM IT enable */ TIM2_ITConfig(TIM2_IT_CC1, ENABLE); TIM2_ITConfig(TIM2_IT_CC2, ENABLE); TIM2_ITConfig(TIM2_IT_CC3, ENABLE); /* TIM2 enable counter */ TIM2_Cmd(ENABLE); }
//Modbus Initialization void Modbus_Init(void) { //Clock divider equals 1.Clock 16MHz CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //Clear bits TIM2_DeInit(); GPIO_DeInit(GPIOA); UART2_DeInit(); //Peripetial Initialization TIM2_TimeBaseInit(TIM2_PRESCALER_2048, 78); GPIO_Init(GPIOA, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST); UART2_Init(BAUDRATE, UART2_WORDLENGTH_8D, UART2_STOPBITS_2,UART2_PARITY_NO,UART2_SYNCMODE_CLOCK_DISABLE,UART2_MODE_TXRX_ENABLE ); //Enable Periphs TIM2_Cmd(ENABLE); UART2_Cmd(ENABLE); //Interrupt configuration TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); UART2_ITConfig(UART2_IT_RXNE_OR, ENABLE); #ifndef __DELAY_EN #define __MODBUS_EN enableInterrupts(); #endif }
/** * @brief Configure TIM1,2,3 peripherals * @param None * @retval None */ static void TIM_Config(void) { /* TIM1 configuration: - TIM1CLK is set to 2 MHz, the TIM2 Prescaler is equal to 15 so the TIM1 counter clock used is 2 MHz / (15 + 1) = 125 000 Hz - TIM1 Channel 1 output frequency = TIM1CLK / (TIM1_PERIOD + 1) * (TIM1_PRESCALER + 1) = 2 000 000 / 256 * 16 = 488.28 Hz */ /* Time Base configuration */ TIM1_TimeBaseInit(TIM1_PRESCALER, TIM1_CounterMode_Up, TIM1_PERIOD, TIM1_REPETITION_COUNTER); /* TIM1 Channel 1 Configuration in PWM2 mode */ TIM1_OC1Init(TIM1_OCMode_PWM2, TIM1_OutputState_Enable, TIM1_OutputNState_Disable, TIM1_CCR1_VAL, TIM1_OCPolarity_Low, TIM1_OCNPolarity_Low, TIM1_OCIdleState_Set, TIM1_OCNIdleState_Set); /* Master Mode selection: Update event */ TIM1_SelectOutputTrigger(TIM1_TRGOSource_Update); /* TIM2 configuration: - TIM2 is connected to TIM1 Update so TIM2CLK is equal to TIM1 output clock / (TIM1_REPETITION_COUNTER + 1) = 488.28 / 5 = 97.65 Hz - TIM2 Prescaler is equal to 1 so the TIM2 counter clock used is 97.65 / 1 = 97.65 Hz - TIM2 Channel 1 output frequency = TIM2CLK / (TIM2_PERIOD + 1) * TIM2_Prescaler = 97.65 / 3 * 1 = 32.55 Hz */ /* Time Base configuration */ TIM2_TimeBaseInit(TIM2_Prescaler_1, TIM2_CounterMode_Up, TIM2_PERIOD); TIM2_OC1Init(TIM2_OCMode_PWM2, TIM2_OutputState_Enable, TIM2_CCR1_VAL, TIM2_OCPolarity_Low, TIM2_OCIdleState_Reset); /* TIM2 Slave Mode selection: Gated mode */ TIM2_SelectSlaveMode(TIM2_SlaveMode_Gated); TIM2_SelectInputTrigger(TIM2_TRGSelection_TIM1); /* TIM3 configuration: - TIM3 is connected to TIM1 Update so TIM3CLK is equal to TIM1 output clock / (TIM1_REPETITION_COUNTER + 1) = 488.28 / 5 = 97.65 Hz - TIM3 Prescaler is equal to 1 so the TIM3 counter clock used is 97.65 / 1 = 97.65 Hz - TIM3 Channel 1 output frequency = TIM3CLK / (TIM3_PERIOD + 1) * TIM3Prescaler = 97.65 / 4 * 1 = 24.41 Hz */ /* Time Base configuration */ TIM3_TimeBaseInit(TIM3_Prescaler_1, TIM3_CounterMode_Up, TIM3_PERIOD); TIM3_OC1Init(TIM3_OCMode_PWM2, TIM3_OutputState_Enable, TIM3_CCR1_VAL, TIM3_OCPolarity_Low, TIM3_OCIdleState_Reset); /* TIM3 Slave Mode selection: Gated mode */ TIM3_SelectSlaveMode(TIM3_SlaveMode_Gated); TIM3_SelectInputTrigger(TIM3_TRGSelection_TIM1); /* Main Output Enable */ TIM1_CtrlPWMOutputs(ENABLE); TIM2_CtrlPWMOutputs(ENABLE); TIM3_CtrlPWMOutputs(ENABLE); /* TIM2 counter enable */ TIM2_Cmd(ENABLE); /* TIM3 counter enable */ TIM3_Cmd(ENABLE); /* TIM1 counter enable */ TIM1_Cmd(ENABLE); }
void Config() { //System clock at power up is HSI/8 = 16MHz/8 = 2MHz //CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); //set HSI/4 = 4MHz SysClk to Core and Memory, minimum clock = 125KHz for CLK_SYSCLKDiv_128 //PWR_PVDCmd(ENABLE); //Power voltage detector and brownout Reset unit supply current 2,6uA //PWR_PVDLevelConfig(PWR_PVDLevel_2V26); //set Programmable voltage detector threshold to 2,26V //PWR_GetFlagStatus(PWR_FLAG_PVDOF); //checks whether the specified PWR flag is set or not //Configure external interrupts - BTN1 and BTN2 presses //EXTI_SetPinSensitivity(EXTI_Pin_2, EXTI_Trigger_Falling_Low); //EXTI_SetPinSensitivity(EXTI_Pin_4, EXTI_Trigger_Falling_Low); //EXTI_SelectPort(EXTI_Port_B); //EXTI_SetHalfPortSelection(EXTI_HalfPort_B_MSB, ENABLE); // Timer 4 Configuration CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE); // 8bit: used for system periodic flags and timeouts TIM4_TimeBaseInit(TIM4_Prescaler_16, 125); // Overflow at 1ms, 2MHz/16/125 = 1000 TIM4_ITConfig(TIM4_IT_Update, ENABLE); TIM4_Cmd(ENABLE); // Timer 2 Configuration CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE); // 16bit: used for runtime measurement TIM2_TimeBaseInit(TIM2_Prescaler_2, TIM2_CounterMode_Up, 0xFFFF); // timebase of 1us, 2MHz/2=1M TIM2_Cmd(ENABLE); // Timer3 Configuration CLK_PeripheralClockConfig(CLK_Peripheral_TIM3, ENABLE); TIM3_TimeBaseInit(TIM3_Prescaler_2, TIM3_CounterMode_Up, 0xFFFF); // 1us timebase @ 2MHz system clock TIM3_ICInit(TIM3_Channel_2, TIM3_ICPolarity_Falling, TIM3_ICSelection_IndirectTI, TIM3_ICPSC_Div1, 0); TIM3_ICInit(TIM3_Channel_1, TIM3_ICPolarity_Rising, TIM3_ICSelection_DirectTI, TIM3_ICPSC_Div1, 0); TIM3_SelectInputTrigger(TIM3_TRGSelection_TI1FP1); TIM3_SelectSlaveMode(TIM3_SlaveMode_Reset); // Reset timer on selected trigger signal TIM3_ITConfig(TIM3_IT_CC1, ENABLE); TIM3_ITConfig(TIM3_IT_CC2, ENABLE); TIM3_Cmd(ENABLE); /* Output PP High - bicolor LED to GND */ GPIO_Init(LED_PORT, LED_PIN1, GPIO_Mode_Out_PP_Low_Slow); GPIO_Init(LED_PORT, LED_PIN2, GPIO_Mode_Out_PP_Low_Slow); /* Input pull up no IT - onboard Button, external pull-up */ GPIO_Init(BTN1_PORT, BTN1_PIN, GPIO_Mode_In_FL_No_IT); /* RFM85W pins */ GPIO_Init(RFM_DATA_PORT, RFM_DATA_PIN, GPIO_Mode_In_FL_No_IT); /* DEBUG pin */ GPIO_Init(DEBUG_PIN_PORT, DEBUG_PIN_PIN, GPIO_Mode_Out_PP_Low_Fast); /* H bridge outputs */ GPIO_Init(PMOS_L_PORT, PMOS_L_PIN, GPIO_Mode_Out_PP_High_Fast); GPIO_Init(PMOS_R_PORT, PMOS_R_PIN, GPIO_Mode_Out_PP_High_Fast); GPIO_Init(NMOS_L_PORT, NMOS_L_PIN, GPIO_Mode_Out_PP_Low_Fast); GPIO_Init(NMOS_R_PORT, NMOS_R_PIN, GPIO_Mode_Out_PP_Low_Fast); }
/** * @brief Main program. * @param None * @retval None */ void main(void) { disableInterrupts(); Config(); enableInterrupts(); /* Stop used peripheral clocks */ CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, DISABLE); LED_OFF; /* go to HALT mode */ halt(); /* Infinite loop */ while (1) { CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv4); // Set System Clock to 4Mhz CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE); TIM4_TimeBaseInit(TIM4_Prescaler_16, 0xFF); // 4us delay timebase CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE); TIM2_Cmd(ENABLE); disableInterrupts(); TIM2->CCER1 |= TIM_CCER1_CC1E; // enable PWM output delay_tim4(119); TIM2->CCER1 &= (uint8_t)(~TIM_CCER1_CC1E); // disable PWM output if(Btn_pressed == 0) { delay_tim4(250); delay_tim4(250); delay_tim4(250); delay_tim4(250); delay_tim4(250); delay_tim4(100); } else { delay_tim4(250); delay_tim4(250); delay_tim4(250); delay_tim4(250); delay_tim4(250); delay_tim4(250); delay_tim4(250); delay_tim4(101); } TIM2->CCER1 |= TIM_CCER1_CC1E; // enable PWM output delay_tim4(119); TIM2->CCER1 &= (uint8_t)(~TIM_CCER1_CC1E); // disable PWM output TIM2_Cmd(DISABLE); enableInterrupts(); LED_ON; delay_tim4(80); LED_OFF; /* Stop used peripheral clocks */ CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, DISABLE); CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, DISABLE); LED_OFF; /* go to HALT mode */ halt(); } }